# Introduction to SatLayer

SatLayer unleashes the possibilities of BTC, the world's best economic collateral, to secure any type of dApp or protocol

## What is SatLayer? <a href="#what-is-satlayer" id="what-is-satlayer"></a>

SatLayer is a **shared security platform** designed to leverage Bitcoin as the primary security collateral.&#x20;

By deploying as a set of smart contracts on Babylon, SatLayer enables Bitcoin restakers to secure any type of decentralized application or protocol as a Bitcoin Validated Service (BVS). This means that Bitcoin, the largest and most widely trusted cryptocurrency, can now provide security to a broad range of applications, with full Turing-complete programmability while minimizing trust assumptions.

By expanding the ways Bitcoin can be used, SatLayer helps Bitcoin maximizes its potential as a reward-generating asset.

## How does SatLayer generate rewards? <a href="#how-satlayer-generates-yield" id="how-satlayer-generates-yield"></a>

SatLayer generates rewards by staking wrapped Bitcoin or Bitcoin LSTs to secure BVS applications. These BVS applications distribute their tokens as rewards to Bitcoin restakers who provide collateral, and operators who help with the validation.

## FAQs

<details>

<summary>What is a BVS?</summary>

BVS stands for **Bitcoin Validated Service.** A BVS is any decentralized application which consumes Bitcoin security from SatLayer. Read more details on the different roles you can play in the SatLayer Ecosystem at [SatLayer Overview](/architecture/satlayer-overview).

</details>

<details>

<summary>Can users send SatLayer receipt tokens to other wallets? </summary>

Yes, users can send SatLayer receipt tokens to other wallets, whether externally-owned accounts (EOAs) or smart contract wallets such as Safe.

</details>

<details>

<summary>Which networks does SatLayer's Staking App currently support?</summary>

The rewards earning Staking App is currently deployed on the mainnet of

* Ethereum
* BNB Chain
* Berachain
* Bitlayer
* Sui (Early Access)

Your wallet should support these networks or if not, allow you to add the network RPCs.

</details>

<details>

<summary>Which wallets are supported on SatLayer?</summary>

You can connect popular Ethereum and Bitcoin-compatible wallets such as

* MetaMask
* OKX Wallet
* Trust Wallet
* Rabby
* Bitget Wallet
* Safe{Wallet}
* ...and any wallet that supports WalletConnect and the ability to add the networks that are supported by SatLayer

</details>


# SatLayer on Babylon

**What is Babylon**

[Babylon Genesis](https://babylonlabs.io/) is a Proof-of-Stake (PoS) blockchain built using the Cosmos SDK, making it a part of the broader Cosmos ecosystem. Babylon Genesis will also be the first Bitcoin-secured network (BSN) in the Babylon ecosystem.

What sets Babylon apart is its security model: instead of solely relying on its own token and validators for security, Babylon has an extra guarantee secured by Finality Providers who stake native Bitcoin. This native Bitcoin remains on the Bitcoin network, but can still be slashed if a Finality Provider acts maliciously.

Babylon employs **extractable one-time signatures** (EOTS) to achieve such slashing. EOTS is a cryptographic technique that allows any third party to extract the private key of a Bitcoin wallet, if that wallet attested to a double-spend or fork attack. Thus, when a validator acts maliciously, the staked Bitcoin can be slashed as a penalty.

<div data-full-width="true"><figure><img src="/files/rGpFZFWxGSFDR9ReJKPd" alt="" width="563"><figcaption><p>How Babylon secures native Bitcoin on its chain</p></figcaption></figure></div>

This technology enables Babylon to secure any proof-of-stake chain against forking using staked Bitcoin. The Bitcoin staked in Babylon is staked non-custodially, meaning that the entire stack is trust-minimized. This makes Babylon a powerful, yet limited, primitive for activating the potential of Bitcoin staking for security purposes. Many applications cannot utilize Babylon for their security needs.\
\
SatLayer bridges this functionality gap by building a fully programmable slashing layer on top of Babylon. Bitcoin staked in Babylon can be **restaked** in SatLayer and used to secure off-chain **Bitcoin Validated Services** (BVSs) using programmatically specified reward and punishment schemes.

## Building SatLayer on Babylon

<figure><img src="/files/kL8mVZeu8S9uF4fd6luu" alt=""><figcaption><p>How SatLayer fits into the Babylon ecosystem</p></figcaption></figure>

SatLayer is a set of core smart contracts, written in CosmWasm, that will be deployed onto Babylon Genesis. CosmWasm is a Turing-complete smart contract platform that allows for highly customizable smart contracts. This flexibility allows SatLayer to implement advanced security features, including tailored slashing mechanisms to penalize specific types of malicious behaviors on the network.

These custom slashing mechanisms are crucial for applications such as oracles, data availability platforms, bridges, and decentralized exchanges, as their security requirements extend beyond basic equivocation attacks like fork attacks or double spends. As a result, we cannot use extractable one-time signatures alone to secure these types of applications, instead we must use Turing-complete smart contracts.


# Litepaper

<figure><img src="/files/ZmAbJgcnfsqcrLm0GiRf" alt=""><figcaption></figcaption></figure>

Download full litepaper:

{% file src="/files/BVsKL80a1VrukUPG9o3G" %}

Read full litepaper:

* &#x20;<https://github.com/satlayer/satlayer-bvs/blob/main/docs/public/assets/whitepaper.pdf>


# Roadmap

### Phase I

In Phase I, SatLayer will enable users to deposit Bitcoin assets and LSTs to vaults on Babylon Genesis. These assets will accrue SatLayer rewards similarly as SatLayer deposit contracts on other chains. This stage purely functions as a signalling apparatus for support for the SatLayer protocol.

### Phase II

In Phase II, SatLayer will expand to include the following features:

* Operators can create vaults via the `vault-factory`
* Bitcoin Validated Services (BVSs) can register to vaults and get stake delegated to them
* Slashing enabled over the operators which have delegated stake to a particular BVS using a simple quorum-based model
* Tokenizing Babylon Genesis vaults such that receipt tokens can be issued

### Phase III

In Phase III, SatLayer will enable more slashing modalities, moving closer towards fully programmable slashability of Bitcoin collateral. It will also enable more flexible movement of slashed funds, such as capture of slashed funds into a pot which is controllable by unslashed validators. Operators could then vote to redistribute slashed funds over the remaining set of operators or use those funds for some protocol-specific function (i.e. insurance payout).


# SatLayer Overview

Think of SatLayer as a marketplace where we connect Bitcoin restakers, BVS developers and node operators to bring crypto-economically secured services to life.

## Participants

The SatLayer ecosystem consists of the following participants:

* **Bitcoin restakers** enhance cryptoeconomic security by depositing and restaking their Bitcoin assets, delegating them to node operators. If a node operator acts maliciously, these assets face the risk of being slashed, reinforcing cryptoeconomic security. In exchange, Bitcoin restakers earn rewards. Bitcoin restakers can currently restake wrapped Bitcoin and specific Bitcoin LSTs through the [SatLayer Staking App](https://stake.satlayer.xyz/).\\
* **Bitcoin Validated Services (BVS) developers** can address the cold-start problem—where new services and protocols are initially insecure—by launching services secured through SatLayer secured using staked Bitcoin. These services, called Bitcoin Validated Services (BVS), derive their security from the amount of Bitcoin backing them (i.e staked Bitcoin).\\
* **Node operators** are responsible for running nodes to validate BVSs, using stakes delegated to them by Bitcoin restakers. In exchange for providing the validation service, computing resources, and expertise required to run the node operator software required for validation, these node operators take a portion of the rewards as their fee.

In addition, node operators can choose which BVS applications to secure where their fees increase and decrease based on their selection. As a permission-less protocol, SatLayer does not dictate how much stake, or how many BVSs a node operator needs to secure. The market will decide which BVSs gain the most support by way of validation, and which node operators can win the trust and delegation of Bitcoin restakers.

<div data-full-width="true"><figure><img src="/files/M48wRC7LomkrrxEMIvGB" alt=""><figcaption><p>How the different participants contribute to SatLayer's ecosystem</p></figcaption></figure></div>

SatLayer offers the above-mentioned framework for developers to build BVS systems secured by Bitcoin assets staked in our contracts. It features a clean and straightforward abstraction while allowing flexibility for both on-chain and off-chain components. Similar to Next.js or React, SatLayer acts as a modular lego block for developers' customization and creativity.

## Extending Bitcoin cryptoeconomic security

A BVS relies on economic incentives and risk mechanisms to discourage malicious behavior in off-chain processes.

Each BVS enforces a set of "slashing conditions" either off-chain or on an on-chain smart contract. When a slashing condition is met, node operators who violate these rules have a portion or all of their stake confiscated. BVS developers have considerable flexibility in managing these slashing conditions and outcomes — slashed assets can be redirected by Vault restakers or permanently burned by sending them to a null address.

<figure><img src="/files/LCrvcu07TzsmCTLZwH8m" alt=""><figcaption><p><strong>SatLayer provides the SDK, contracts, and ecosystem</strong></p></figcaption></figure>

This structure creates a financial incentive for node operators to behave responsibly, as they risk losing their collateral and assets if malicious behavior is detected. Meanwhile, restakers are motivated to deploy assets with trustworthy node operators and monitor for potential risks.

In practice, slashing conditions for a real-world BVS are likely complex and often require cryptographic proof of malicious activity. Slashes are validated and executed on-chain. Thus, developers must ensure that **(a)** slashing remains affordable to execute to deter unchecked malicious activity, and **(b)** slashing is secure against misuse to prevent false triggers. Note that full slashing will not be enabled until [Phase III](broken://pages/SbyZID1YzxTepynVSNL7) of SatLayer's release.

By accepting the risks associated with slashing, restakers earn rewards as defined by the BVS developers, distributed through the SatLayer ecosystem. These rewards may come from the BVS’s native tokens or other specified assets.

The SatLayer protocol will be rolled out in three phases, described on the next page.\\


# Audits

SatLayer has multiple product areas and each have been audited by leading Web3 security firms


# Staking App

Audit reports for the SatLayer Staking App

## EVM Chains

We’ve partnered with industry-leading audit firms [Zellic](https://github.com/satlayer/deposit-contract-public/blob/main/audits/SatLayer%20Pool%20-%20Zellic%20Audit%20Report.pdf?ref=blog.satlayer.xyz) and [Salus](https://github.com/satlayer/deposit-contract-public/blob/main/audits/Satlayer_audit_report_2024-08-15.pdf?ref=blog.satlayer.xyz) to ensure that our EVM smart contracts meet the highest standards of safety and reliability. Our users can participate with confidence, knowing that their Bitcoin assets are protected by rigorously tested contracts. The audit report covers our deployments on the various EVM chains [listed here](https://docs.satlayer.xyz/security/contracts).

### Zellic

{% embed url="<https://github.com/satlayer/deposit-contract-public/blob/main/audits/SatLayer%20Pool%20-%20Zellic%20Audit%20Report.pdf>" %}

{% embed url="<https://github.com/satlayer/deposit-contract-public/blob/main/audits/SatLayer%20Pool%20-%20Zellic%20Audit%20Report%20(Patch).pdf>" %}

### Salus

{% embed url="<https://github.com/satlayer/deposit-contract-public/blob/main/audits/Satlayer_audit_report_2024-08-15.pdf>" %}

## Sui

Our Sui contracts are audited by Zenith and Asymptotic.

### Zenith

{% embed url="<https://github.com/satlayer/satlayer-sui/blob/main/audits/satlayer-sui-zenith-20250313.pdf>" %}

### Asymptotic

{% embed url="<https://github.com/satlayer/satlayer-sui/blob/main/audits/satlayer-sui-asymptotic-20250314.pdf>" %}


# SatLayer Core

Audit reports for SatLayer's BVS core contracts

## Babylon Genesis

We've partnered with leading auditors in the Cosmos ecosystem to ensure that our CosmWasm smart contracts meet the highest standards of safety and reliability for deployment onto the Babylon Genesis mainnet.

### Dedaub

{% embed url="<https://github.com/satlayer/satlayer-bvs/blob/main/docs/public/audits/satlayer-core-phase-1-dedaub-20250325.pdf>" %}

### Coinspect

{% embed url="<https://github.com/satlayer/satlayer-bvs/blob/main/docs/public/audits/satlayer-core-phase-1-coinspect-20250404.pdf>" %}


# Cube by SatLayer

Audit reports for Cube by SatLayer, the liquid staking token for BABY

## Babylon Genesis

We've partnered with leading auditors in the Cosmos ecosystem to ensure that our CosmWasm smart contracts meet the highest standards of safety and reliability for deployment onto the Babylon Genesis mainnet. The scope for these audit reports covers Cube by SatLayer, our liquid staking token for Babylon's governance token BABY.

### Oak Security

{% embed url="<https://github.com/satlayer/baby-lst/blob/main/audits/cube-by-satlayer-oak-security-20250410.pdf>" %}

### Hashlock

{% embed url="<https://github.com/satlayer/baby-lst/blob/main/audits/cube-by-satlayer-hashlock-20250408.pdf>" %}


# Contracts

List of all deployed contracts related to the SatLayer ecosystem

If you are looking for our contract addresses, refer to the following pages to find the relevant SatLayer contract addresses. In general, the contract addresses are organized across:

* Staking App would have addresses of our deposit pool contracts and receipt tokens on EVM blockchains and Sui, and vaults on Babylon Genesis
* SatLayer Core would have addresses of our core restaking protocol
* Cube by SatLayer would have addresses of our liquid staking token protocol

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><a href="/pages/Rlm1njcZgQY47f0GPsXg">Staking App</a></td><td><a href="/files/hqEHeDwXyipd399eZPKH">/files/hqEHeDwXyipd399eZPKH</a></td></tr><tr><td><a href="/pages/pD6vwifob09OoK5DxIKr">SatLayer Core</a></td><td><a href="/files/M48wRC7LomkrrxEMIvGB">/files/M48wRC7LomkrrxEMIvGB</a></td></tr><tr><td><a href="/pages/3xmeeXjq14oaMhuB6s7f">Cube by SatLayer</a></td><td><a href="/files/0nIA9aNWNa40AvkfQ5yT">/files/0nIA9aNWNa40AvkfQ5yT</a></td></tr></tbody></table>


# Staking App

The following contracts power SatLayer's [Staking App](https://app.satlayer.xyz/) where users can deposit their Bitcoin assets and LSTs to earn rewards. These contracts are deployed on major and secure blockchains such as Ethereum, BNB Chain, Berachain, Bitlayer, Sui and Babylon Genesis. We will be supporting more blockchain networks as we grow.

<div data-full-width="true"><figure><img src="/files/0r8dBmyoi1EuOhjmtidp" alt="" width="563"><figcaption><p>The SatLayer Staking App frontend.</p></figcaption></figure></div>

You may also find our deployed contract code at our GitHub repository:

* [satlayer/deposit-contract-public](https://github.com/satlayer/deposit-contract-public)
* [satlayer/satlayer-sui](https://github.com/satlayer/satlayer-sui)

{% hint style="info" %}
The following contract addresses are on the respective mainnet blockchains. We may have testnet contracts available should you need to test. Do reach out to us.
{% endhint %}

## Ethereum

### Deposit Contracts

<table><thead><tr><th width="133">Network</th><th width="321">Name</th><th>Address</th></tr></thead><tbody><tr><td>Ethereum Mainnet</td><td>SatLayer Pool Deposits</td><td><a href="https://etherscan.io/address/0x42a856dbEBB97AbC1269EAB32f3bb40C15102819#code"><code>0x42a856dbEBB97AbC1269EAB32f3bb40C15102819</code></a></td></tr></tbody></table>

### LST Assets

<table><thead><tr><th width="134">LST</th><th width="321">Token Address</th><th>Receipt Token Address</th></tr></thead><tbody><tr><td>LBTC</td><td><a href="https://etherscan.io/token/0x8236a87084f8b84306f72007f36f2618a5634494"><code>0x8236a87084f8b84306f72007f36f2618a5634494</code></a></td><td><a href="https://etherscan.io/token/0x067e11ac5471c853aea205b3c1933a5f6367152f"><code>0x067e11ac5471c853aea205b3c1933a5f6367152f</code></a></td></tr><tr><td>FBTC</td><td><a href="https://etherscan.io/token/0xC96dE26018A54D51c097160568752c4E3BD6C364"><code>0xC96dE26018A54D51c097160568752c4E3BD6C364</code></a></td><td><a href="https://etherscan.io/token/0xe2c6755c10d0b61d8b11dd2851ae8266cea912dc"><code>0xe2c6755c10d0b61d8b11dd2851ae8266cea912dc</code></a></td></tr><tr><td>uniBTC</td><td><a href="https://etherscan.io/token/0x004E9C3EF86bc1ca1f0bB5C7662861Ee93350568"><code>0x004E9C3EF86bc1ca1f0bB5C7662861Ee93350568</code></a></td><td><a href="https://etherscan.io/token/0xf7de2b7afdb07aa5dd143180ed758165821e076e"><code>0xf7de2b7afdb07aa5dd143180ed758165821e076e</code></a></td></tr><tr><td>WBTC</td><td><a href="https://etherscan.io/token/0x2260fac5e5542a773aa44fbcfedf7c193bc2c599"><code>0x2260fac5e5542a773aa44fbcfedf7c193bc2c599</code></a></td><td><a href="https://etherscan.io/token/0x69223b5b36a785ec08e5f685fd7961399982c566"><code>0x69223b5b36a785ec08e5f685fd7961399982c566</code></a></td></tr><tr><td>xSolvBTC (formerly SolvBTC.BBN)</td><td><a href="https://etherscan.io/token/0xd9d920aa40f578ab794426f5c90f6c731d159def"><code>0xd9d920aa40f578ab794426f5c90f6c731d159def</code></a></td><td><a href="https://etherscan.io/token/0x17140b69ffadff9e87bf1d86d99119ee10ad24ff"><code>0x17140b69ffadff9e87bf1d86d99119ee10ad24ff</code></a></td></tr><tr><td>pumpBTC</td><td><a href="https://etherscan.io/token/0xf469fbd2abcd6b9de8e169d128226c0fc90a012e"><code>0xf469fbd2abcd6b9de8e169d128226c0fc90a012e</code></a></td><td><a href="https://etherscan.io/token/0x0c4dd69705d16d91bc9c0534cc926966f23430c7"><code>0x0c4dd69705d16d91bc9c0534cc926966f23430c7</code></a></td></tr><tr><td>stBTC</td><td><a href="https://etherscan.io/token/0xf6718b2701D4a6498eF77D7c152b2137Ab28b8A3"><code>0xf6718b2701D4a6498eF77D7c152b2137Ab28b8A3</code></a></td><td><a href="https://etherscan.io/token/0xFF2858Cc8227aA45a51c8961598Edc2d44B5ee5b"><code>0xFF2858Cc8227aA45a51c8961598Edc2d44B5ee5b</code></a></td></tr></tbody></table>

## BNB Chain

### Deposit Contracts

<table><thead><tr><th width="133">Network</th><th width="321">Name</th><th>Address</th></tr></thead><tbody><tr><td>BNB Chain Mainnet</td><td>SatLayer Pool Deposits</td><td><a href="https://bscscan.com/address/0x42a856dbebb97abc1269eab32f3bb40c15102819#code"><code>0x42a856dbebb97abc1269eab32f3bb40c15102819</code></a></td></tr></tbody></table>

### LST Assets

<table><thead><tr><th width="139">LST</th><th width="312">Token Address</th><th>Receipt Token Address</th></tr></thead><tbody><tr><td>BTCB</td><td><a href="https://bscscan.com/token/0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c"><code>0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c</code></a></td><td><a href="https://bscscan.com/token/0xe2C6755C10d0B61D8B11Dd2851AE8266Cea912DC"><code>0xe2C6755C10d0B61D8B11Dd2851AE8266Cea912DC</code></a></td></tr><tr><td>stBTC</td><td><a href="https://bscscan.com/token/0xf6718b2701D4a6498eF77D7c152b2137Ab28b8A3"><code>0xf6718b2701D4a6498eF77D7c152b2137Ab28b8A3</code></a></td><td><a href="https://bscscan.com/token/0x067e11Ac5471C853aea205B3C1933a5f6367152F"><code>0x067e11Ac5471C853aea205B3C1933a5f6367152F</code></a></td></tr><tr><td>xSolvBTC (formerly SolvBTC.BBN)</td><td><a href="https://bscscan.com/token/0x1346b618dC92810EC74163e4c27004c921D446a5"><code>0x1346b618dC92810EC74163e4c27004c921D446a5</code></a></td><td><a href="https://bscscan.com/token/0x17140b69FfaDfF9e87BF1D86D99119ee10AD24ff"><code>0x17140b69FfaDfF9e87BF1D86D99119ee10AD24ff</code></a></td></tr></tbody></table>

## Berachain

### Deposit Contracts

<table><thead><tr><th width="137">Network</th><th width="312">Name</th><th>Address</th></tr></thead><tbody><tr><td>Berachain Mainnet</td><td>SatLayer Pool Deposits</td><td><a href="https://berascan.com/address/0x50198b5E1330753F167F6e0544e4C8aF829BC99d"><code>0x50198b5E1330753F167F6e0544e4C8aF829BC99d</code></a></td></tr></tbody></table>

### LST Assets

<table><thead><tr><th width="134">LST</th><th width="321">Token Address</th><th>Receipt Token Address</th></tr></thead><tbody><tr><td>LBTC</td><td><a href="https://berascan.com/token/0xecac9c5f704e954931349da37f60e39f515c11c1"><code>0xecAc9C5F704e954931349Da37F60E39f515c11c1</code></a></td><td><a href="https://berascan.com/token/0x961395ed9960fe5e281585beaa730b99af3ab763"><code>0x961395ed9960fE5e281585bEAa730b99AF3AB763</code></a></td></tr><tr><td>SBTC</td><td><a href="https://berascan.com/token/0x93f4d0ab6a8b4271f4a28db399b5e30612d21116"><code>0x93F4d0ab6a8B4271f4a28Db399b5E30612D21116</code></a></td><td><a href="https://berascan.com/token/0xd235571526170e7d167040166aae59cb8627abc2"><code>0xd235571526170E7D167040166aae59cb8627AbC2</code></a></td></tr><tr><td>uniBTC</td><td><a href="https://berascan.com/token/0xc3827a4bc8224ee2d116637023b124ced6db6e90"><code>0xC3827A4BC8224ee2D116637023b124CED6db6e90</code></a></td><td><a href="https://berascan.com/token/0x2a5fc05f71cfc54ddcad19457cee79e3aaf415c9"><code>0x2A5Fc05F71cfC54DdcAD19457CEe79E3aAF415C9</code></a></td></tr><tr><td>xSolvBTC (formerly SolvBTC.BBN)</td><td><a href="https://berascan.com/token/0xCC0966D8418d412c599A6421b760a847eB169A8c"><code>0xCC0966D8418d412c599A6421b760a847eB169A8c</code></a></td><td><a href="https://berascan.com/token/0xe7041941e9e4f3d12d9eb6d9b228d3781548b126"><code>0xE7041941E9E4f3d12D9Eb6D9b228d3781548b126</code></a></td></tr><tr><td>pumpBTC</td><td><a href="https://berascan.com/token/0x1fcca65fb6ae3b2758b9b2b394cb227eae404e1e"><code>0x1fCca65fb6Ae3b2758b9b2B394CB227eAE404e1E</code></a></td><td><a href="https://berascan.com/token/0xad9f7d8a79ab96c10ed94d49463c2ff0f5ca4ec8"><code>0xAD9f7d8a79Ab96C10Ed94d49463c2FF0F5Ca4eC8</code></a></td></tr><tr><td>waBTC</td><td><a href="https://berascan.com/token/0x09def5abc67e967d54e8233a4b5ebbc1b3fbe34b"><code>0x09DEF5aBc67e967d54E8233A4b5EBBc1B3fbE34b</code></a></td><td><a href="https://berascan.com/token/0x7b4dc4067251b4b5efd653527d6c26a02c85705c"><code>0x7b4DC4067251B4b5EfD653527D6c26a02C85705C</code></a></td></tr><tr><td>SolvBTC.BERA</td><td><a href="https://berascan.com/address/0x0f6f337b09cb5131cf0ce9df3beb295b8e728f3b"><code>0x0f6f337b09cb5131cf0ce9df3beb295b8e728f3b</code></a></td><td><a href="https://berascan.com/address/0xff21f46bc9d78125705eef6efca62f9420cfdb9b"><code>0xff21f46bc9d78125705eef6efca62f9420cfdb9b</code></a></td></tr></tbody></table>

## Bitlayer

### Deposit Contracts

<table><thead><tr><th width="137">Network</th><th width="312">Name</th><th>Address</th></tr></thead><tbody><tr><td>Bitlayer Mainnet</td><td>SatLayer Pool Deposits</td><td><a href="https://www.btrscan.com/address/0x2e3c78576735802ed94e52b7e71830e9e44a9a1c"><code>0x2E3c78576735802eD94e52B7e71830e9E44a9a1C</code></a></td></tr></tbody></table>

### LST Assets

<table><thead><tr><th width="137">LST</th><th width="317">Token Address</th><th>Receipt Token Address</th></tr></thead><tbody><tr><td>stBTC</td><td><a href="https://www.btrscan.com/address/0xf6718b2701d4a6498ef77d7c152b2137ab28b8a3"><code>0xf6718b2701d4a6498ef77d7c152b2137ab28b8a3</code></a></td><td><a href="https://www.btrscan.com/address/0xFF61668CfCCd9a29460136d36372f36C8c6b72A1"><code>0xFF61668CfCCd9a29460136d36372f36C8c6b72A1</code></a></td></tr><tr><td>uniBTC</td><td><a href="https://www.btrscan.com/address/0x93919784c523f39cacaa98ee0a9d96c3f32b593e"><code>0x93919784c523f39cacaa98ee0a9d96c3f32b593e</code></a></td><td><a href="https://www.btrscan.com/address/0x4Fdb0511f1e5C6c215596570F855cb1F9924B8b6"><code>0x4Fdb0511f1e5C6c215596570F855cb1F9924B8b6</code></a></td></tr><tr><td>WBTC</td><td><a href="https://www.btrscan.com/address/0xff204e2681a6fa0e2c3fade68a1b28fb90e4fc5f"><code>0xff204e2681a6fa0e2c3fade68a1b28fb90e4fc5f</code></a></td><td><a href="https://www.btrscan.com/address/0xA1F49994e5459628a3a5960C5B29D8dCc7557673"><code>0xA1F49994e5459628a3a5960C5B29D8dCc7557673</code></a></td></tr></tbody></table>

## Base

### Deposit Contracts

<table><thead><tr><th width="137">Network</th><th width="312">Name</th><th>Address</th></tr></thead><tbody><tr><td>Base Mainnet</td><td>SatLayer Pool Deposits</td><td><a href="https://basescan.org/address/0xb57752dDc2Ec2DEFE9eDBb1fdb99dB1ca9b0b9b3#code"><code>0xb57752dDc2Ec2DEFE9eDBb1fdb99dB1ca9b0b9b3</code></a></td></tr></tbody></table>

### LST Assets

<table><thead><tr><th width="137">LST</th><th width="317">Token Address</th><th>Receipt Token Address</th></tr></thead><tbody><tr><td>cbBTC</td><td><a href="https://basescan.org/address/0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf"><code>0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf</code></a></td><td><a href="https://basescan.org/token/0x9ED4b12EdDcF7BA4325d7D09e00dfA31d4165ADD"><code>0x9ED4b12EdDcF7BA4325d7D09e00dfA31d4165ADD</code></a></td></tr><tr><td>uniBTC</td><td><a href="https://basescan.org/token/0x93919784C523f39CACaa98Ee0a9d96c3F32b593e"><code>0x93919784C523f39CACaa98Ee0a9d96c3F32b593e</code></a></td><td><a href="https://basescan.org/token/0x422D6C77EE640fd4dd87bBAcc2BaD64e427F9802"><code>0x422D6C77EE640fd4dd87bBAcc2BaD64e427F9802</code></a></td></tr></tbody></table>

## Sui

### Deposit Contracts

<table><thead><tr><th width="137">Network</th><th width="312">Name</th><th>Address (Package)</th></tr></thead><tbody><tr><td>Sui Mainnet</td><td>SatLayer Pool Deposits</td><td><a href="https://suivision.xyz/package/0x25646e1cac13d6198e821aac7a94cbb74a8e49a2b3bed2ffd22346990811fcc6"><code>0x25646e1cac13d6198e821aac7a94cbb74a8e49a2b3bed2ffd22346990811fcc6</code></a></td></tr></tbody></table>

### LST Assets

<table><thead><tr><th width="137">LST</th><th width="317">Token Address</th><th>Receipt Token Address</th></tr></thead><tbody><tr><td>LBTC</td><td><a href="https://suivision.xyz/coin/0x3e8e9423d80e1774a7ca128fccd8bf5f1f7753be658c5e645929037f7c819040::lbtc::LBTC"><code>0x3e8e9423d80e1774a7ca128fccd8bf5f1f7753be658c5e645929037f7c819040::lbtc::LBTC</code></a></td><td><a href="https://suivision.xyz/coin/0xdfe175720cb087f967694c1ce7e881ed835be73e8821e161c351f4cea24a0f20::satlbtc::SATLBTC"><code>0xdfe175720cb087f967694c1ce7e881ed835be73e8821e161c351f4cea24a0f20::satlbtc::SATLBTC</code></a></td></tr><tr><td>xBTC</td><td><a href="https://suivision.xyz/coin/0x876a4b7bce8aeaef60464c11f4026903e9afacab79b9b142686158aa86560b50::xbtc::XBTC"><code>0x876a4b7bce8aeaef60464c11f4026903e9afacab79b9b142686158aa86560b50::xbtc::XBTC</code></a></td><td><a href="https://suivision.xyz/coin/0x4068a116305413e4aa03906fb2b9f8625b9f19e73ee0e4766b456ce502c247ed::satxbtc::SATXBTC"><code>0x4068a116305413e4aa03906fb2b9f8625b9f19e73ee0e4766b456ce502c247ed::satxbtc::SATXBTC</code></a></td></tr><tr><td>YBTC.B</td><td></td><td></td></tr></tbody></table>

## Babylon Genesis

### Vaults

We currently do not have receipt tokens as the shares are tracked internally within each vault. The following will be updated when SatLayer launches tokenized vaults in Q2 2025.

| LST    | Collateral                                                                                                                                                                       | Vault                                                                                                                                                                            |
| ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| cBABY  | [`bbn17y5zvse30629t7r37xsdj73xsqp7qsdr7gpnh966wf5aslpn66rq5ekwsz`](https://www.mintscan.io/babylon/wasm/contract/bbn17y5zvse30629t7r37xsdj73xsqp7qsdr7gpnh966wf5aslpn66rq5ekwsz) | [`bbn1aexzn458dzh0lnuqdtzjtacq6tacnluz9ky643xdvw67en2yh97swjzht5`](https://www.mintscan.io/babylon/wasm/contract/bbn1aexzn458dzh0lnuqdtzjtacq6tacnluz9ky643xdvw67en2yh97swjzht5) |
| uniBTC | [`bbn1fkz8dcvsqyfy3apfh8ufexdn4ag00w5jts99zjw9nkjue0zhs4ts6hfdz2`](https://www.mintscan.io/babylon/wasm/contract/bbn1fkz8dcvsqyfy3apfh8ufexdn4ag00w5jts99zjw9nkjue0zhs4ts6hfdz2) | [`bbn199v5hkf0c4rwqg0ce7ts5xqay30jtkw3akerrduvn8jadz2h4zjs4wmz4t`](https://www.mintscan.io/babylon/wasm/contract/bbn199v5hkf0c4rwqg0ce7ts5xqay30jtkw3akerrduvn8jadz2h4zjs4wmz4t) |

## BOB

### Deposit Contracts

| Network     | Name                   | Address                                                                                                                                         |
| ----------- | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| BOB Mainnet | SatLayer Pool Deposits | [`0x32fD8E43114Fb0a292Ca3127EAF4D1D69739Fb83`](https://explorer.gobob.xyz/address/0x32fD8E43114Fb0a292Ca3127EAF4D1D69739Fb83?tab=contract_code) |

### LST Assets

<table><thead><tr><th width="137">LST</th><th width="317">Token Address</th><th>Receipt Token Address</th></tr></thead><tbody><tr><td>uniBTC</td><td><a href="https://explorer.gobob.xyz/token/0x236f8c0a61dA474dB21B693fB2ea7AAB0c803894"><code>0x236f8c0a61dA474dB21B693fB2ea7AAB0c803894</code></a></td><td><a href="https://explorer.gobob.xyz/address/0x4CBE838E2BD3B46247f80519B6aC79363298aa09?tab=contract"><code>0x4CBE838E2BD3B46247f80519B6aC79363298aa09</code></a></td></tr></tbody></table>

## TAC

### Deposit Contracts

| Network     | Name                   | Address                                                                                                                       |
| ----------- | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| TAC Mainnet | SatLayer Pool Deposits | [`0x32fD8E43114Fb0a292Ca3127EAF4D1D69739Fb83`](https://explorer.tac.build/address/0x32fD8E43114Fb0a292Ca3127EAF4D1D69739Fb83) |

### LST Assets

<table><thead><tr><th width="137">LST</th><th width="317">Token Address</th><th>Receipt Token Address</th></tr></thead><tbody><tr><td>uniBTC</td><td><a href="https://explorer.tac.build/address/0xF9775085d726E782E83585033B58606f7731AB18"><code>0xF9775085d726E782E83585033B58606f7731AB18</code></a></td><td><a href="https://explorer.tac.build/address/0x4CBE838E2BD3B46247f80519B6aC79363298aa09?tab=contract"><code>0x4CBE838E2BD3B46247f80519B6aC79363298aa09</code></a></td></tr></tbody></table>


# SatLayer Core

The following contracts are a subset of the core contracts of the SatLayer protocol through the end of Phase I (see [Roadmap](broken://pages/SbyZID1YzxTepynVSNL7)).

Refer to our [EVM Deployments](https://build.satlayer.xyz/evm/deployments) for the latest contract addresses of our core restaking protocol.


# Cube by SatLayer

The following contracts are part of the Cube by SatLayer liquid staking token on Babylon Genesis.

## Babylon Genesis

### Token

| Token Name | Token Symbol | Token Address                                                                                                                                                                    |
| ---------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Cube Baby  | cBABY        | [`bbn17y5zvse30629t7r37xsdj73xsqp7qsdr7gpnh966wf5aslpn66rq5ekwsz`](https://www.mintscan.io/babylon/wasm/contract/bbn17y5zvse30629t7r37xsdj73xsqp7qsdr7gpnh966wf5aslpn66rq5ekwsz) |

### Contracts

| Network         | Name                        | Address                                                                                                                                                                          |
| --------------- | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Babylon Genesis | Cube LST Staking Hub        | [`bbn1tng5u7fls4lyg356zkh2g32e80a286m8p2n0hqugc5467n9y6nksamehyj`](https://www.mintscan.io/babylon/wasm/contract/bbn1tng5u7fls4lyg356zkh2g32e80a286m8p2n0hqugc5467n9y6nksamehyj) |
| Babylon Genesis | Cube LST Reward Dispatcher  | [`bbn14q5elxj4ghktt7d7d0uw0cs0gqyeay25h5fkree897gjm38gevxqp2sq97`](https://www.mintscan.io/babylon/wasm/contract/bbn14q5elxj4ghktt7d7d0uw0cs0gqyeay25h5fkree897gjm38gevxqp2sq97) |
| Babylon Genesis | Cube LST Validator Registry | [`bbn1w2tythwkgxjc3v537jup59u7ygxcfcnxwu095d255dddljcyr6nspvpvew`](https://www.mintscan.io/babylon/wasm/contract/bbn1w2tythwkgxjc3v537jup59u7ygxcfcnxwu095d255dddljcyr6nspvpvew) |


# Bug Bounty

Learn more about SatLayer's existing bug bounty program

We currently have an ongoing Bug Bounty program via Sherlock, our partner. For more information on the program rules and assets in scope, please refer to the [SatLayer Bug Bounty](https://audits.sherlock.xyz/bug-bounties/50) page.

If you discover a potential security issue in other areas of SatLayer, we ask that you notify SatLayer privately throug&#x68;**`bugs[at]satlayer.io`**&#x74;he soonest possible. Please do not create a public GitHub issue.


# Introduction

The SatLayer Protocol introduces the new economy, built on Bitcoin.&#x20;

By making Bitcoin programmable, SatLayer transforms BTC from a passive store of value into the foundation of a global reserve asset for a new, non-USD financial system.

At the center of this transformation lies the **SLAY token**. SLAY is designed to:

* Boost Bitcoin’s liquidity efficiency,
* Strengthen crypto-economic security, and
* Empower the community to govern SatLayer’s long-term trajectory.


# The SLAY Token

SLAY is the ecosystem token of SatLayer. It underpins governance, aligns incentives, and ensures the protocol’s sustainability.

## About SLAY

The SLAY token is the ecosystem token of SatLayer. It plays a central role in coordinating incentives, governance, and security across Bitcoin Validated Services (BVS) and integrated chains.

SLAY is used for staking and restaking to secure protocol operations, while also aligning users, operators, and partner applications around sustainable rewards. The token underpins our BVS products such as liquidity float, insurance coverage, and many more, ensuring that restaked Bitcoin assets remain productive in a secure, decentralized manner.

## Supported Networks & Token Addresses

Below are the list of supported and canonical token addresses of SLAY. You may use a bridge like [Stargate Finance](https://stargate.finance/) to bridge SLAY across different chains.

<table><thead><tr><th width="240">Network</th><th>Token Standard</th><th>Token</th><th>Address</th></tr></thead><tbody><tr><td>Ethereum</td><td>ERC-20</td><td>SLAY</td><td><a href="https://etherscan.io/token/0x51477A3002ee04B7542aDfe63ccdb50c00Ee5147">0x51477A3002ee04B7542aDfe63ccdb50c00Ee5147</a> </td></tr><tr><td>BNB Chain</td><td>BEP-20</td><td>SLAY</td><td><a href="https://bscscan.com/address/0xfC5a743271672E91D77F0176e5CEa581Fbd5D834">0xfC5a743271672E91D77F0176e5CEa581Fbd5D834</a></td></tr><tr><td>Base</td><td>ERC-20</td><td>SLAY</td><td><a href="https://basescan.org/token/0x3e248ab4554cfdec8fc4f18f569fe6f46de61db1">0x3e248ab4554cFdec8fc4f18F569FE6F46dE61DB1</a> </td></tr><tr><td>HyperEVM</td><td>ERC-20</td><td>SLAY</td><td><a href="https://hyperevmscan.io/token/0x9efdfc72c1bc90b36f8aae35247e62310c58eacf">0x9EfdFC72C1BC90b36f8aae35247e62310c58eACf</a></td></tr><tr><td>Hyperliquid</td><td>HIP-1</td><td>SLAY</td><td><a href="https://app.hyperliquid.xyz/explorer/token/0xf9dadbe873e83783630c7089320f361a">0xf9dadbe873e83783630c7089320f361a</a></td></tr></tbody></table>

{% hint style="danger" %}
Only use the official token addresses listed here. Beware of scams or fake contracts.
{% endhint %}

## How It Works

To understand more about SLAY in depth, you can explore the following docs:

{% content-ref url="/pages/s3K7LBSBAu91Qf56n9nJ" %}
[Utility](/slay/the-slay-token/utility)
{% endcontent-ref %}

{% content-ref url="/pages/BWN7AoSvc5wIHwyVDYi8" %}
[Tokenomics](/slay/the-slay-token/tokenomics)
{% endcontent-ref %}

{% content-ref url="/pages/he7H3A9XwOc2ncSZ8ruV" %}
[Supply & Distribution](/slay/the-slay-token/supply-and-distribution)
{% endcontent-ref %}


# Utility

Learn more about the utility of SLAY

##

## **Governance & Decentralization**

The SLAY token lies at the heart of governance and decentralization within the SatLayer ecosystem. Holders of SLAY actively shape the protocol’s evolution by proposing and voting on key governance matters. These include setting incentive parameters, funding new ecosystem initiatives that expand and strengthen the protocol. In this way, SLAY ensures that decision-making power is distributed among the community rather than concentrated in a single entity.

## **Value Accrual**

SLAY plays an important role in value accrual for the ecosystem. A portion of the protocol’s fees, once built and enabled, is directed into the SatLayer Foundation Treasury, which grows over time as adoption expands.

SLAY holders guide how these resources are deployed, whether toward ecosystem growth, research, or new incentive mechanisms. As the Treasury strengthens, holders benefit indirectly through the sustained health and long-term value of the network.

## **Staking & Security for BVSs**

SLAY is also fundamental to the security of Bitcoin Validated Services (BVSs). Bitcoin stakers who wish to secure these services can pair their Bitcoin with a minimum amount of SLAY, reinforcing the alignment of incentives between users, operators, and the protocol.

In return, stakers earn rewards in various forms from the protocol, along with potential additional rewards distributed directly by individual BVSs. This is done through our ongoing SatLayer Rewards Program.

## **Slashing**

Security is further reinforced through a slashing mechanism built into our protocol. Stakers risk losing a portion of their Bitcoin and SLAY collateral if the operators they delegate to fail to uphold the security standards required by the BVSs they support.

Each BVS defines its own slashing conditions, ensuring that accountability is embedded into the system and that participants are consistently incentivized to act honestly and reliably. For more technical information about programmable slashing in SatLayer, please refer to our [developer docs](https://build.satlayer.xyz/architecture/slashing).

{% hint style="info" %}
See the Whitepaper for additional information on the SatLayer Protocol [here](https://github.com/satlayer/satlayer-bvs/blob/main/docs/public/assets/whitepaper.pdf).
{% endhint %}


# Tokenomics

Learn more about the tokenomics of SLAY.

The distribution of SLAY is structured to ensure long-term alignment between the community, ecosystem participants, and early supporters.

<figure><img src="/files/5c3DkOcjj5dCtibuPRgk" alt=""><figcaption></figcaption></figure>

### **Community – 10%**

Distributed through the flagship **SlayDrop** and other Token Generation Event (TGE) initiatives to broaden community ownership.

### **Ecosystem – 45%**

Reserved to accelerate growth of the SatLayer ecosystem, including:

* **Incentives** – Rewards for BTC stakers securing BVSs
* **Investments** – Strategic capital for teams building on SatLayer, subject to approval by a joint SatLayer Labs and SatLayer Foundation committee
* **Grants** – Milestone-based funding for ecosystem projects that contribute to long-term protocol development

### **Foundation – 10%**

Allocated to the SatLayer Foundation to support ongoing research, development, and global adoption of the Protocol.

### **Early Backers – 15%**

Designated for strategic partners and financial supporters who provided early backing for the launch of SatLayer.

### **Early Contributors – 20%**

Reserved for builders and contributors across engineering, product, business development, marketing, and strategy who laid the foundation of the Protocol.


# Supply & Distribution

The total supply of **SLAY** is capped at **2,100,000,000 SLAY**.

| **Ticker**                     | SLAY                      |
| ------------------------------ | ------------------------- |
| **Token Standard**             | ERC-20 (Ethereum Mainnet) |
| **Token Decimals**             | 6                         |
| **Maximum Supply**             | 2,100,000,000 SLAY        |
| **Initial Circulating Supply** | 21.0%                     |

Distribution follows the allocation outlined in the previous section, ensuring a balanced approach across community engagement, ecosystem development, and long-term protocol sustainability.&#x20;

Vesting schedules, unlock periods, and cliffs are structured to promote responsible distribution and sustained alignment between contributors, backers, and the community.&#x20;

These details are transparently illustrated in the chart below:

<figure><img src="/files/NXfweDxeNOHlsblmSSuz" alt=""><figcaption></figcaption></figure>


# Staking SLAY

Learn more about what it means to stake SLAY.

## Overview

Staking SLAY allows users to contribute directly to the security and stability of the SatLayer ecosystem. By staking your tokens, you help strengthen the protocol’s foundation while earning rewards that reflect both the amount of SLAY staked and the duration of participation.

Staking is designed to be accessible and transparent, ensuring that users are consistently aligned with the long-term health of SatLayer.

## Rewards

Stakers in [The SLAYERS campaign](/slay/staking-slay/current-campaigns/the-slayers) is currently active. earn dynamic APR rewards, which scale based on staking activity.

## Liquid Staked SLAY Token (satSLAY)

When users stake SLAY, they receive satSLAY in return. satSLAY serves as a liquid, tokenized representation of the staked position. It is required for withdrawing SLAY back from the vault and provides proof of ownership over the staked assets. satSLAY enables flexibility for participants by making their staked position portable and verifiable across applications that integrate with SatLayer.

## Parameters

<table><thead><tr><th>Parameter</th><th width="374.73046875">Description</th><th>Value</th></tr></thead><tbody><tr><td>Minimum Deposit</td><td>The minimum deposit required to restake SLAY to any of the vaults.</td><td>1 SLAY</td></tr><tr><td>Withdrawal Period</td><td>The minimum time that must elapse after an unstake request is initiated, before a wallet can redeem back the underlying SLAY tokens.</td><td>30 days</td></tr></tbody></table>

## Contract Addresses

You can find the contract addresses below for the various receipt tokens of our SLAY vaults.

<table><thead><tr><th width="131.66015625">Network</th><th>Description</th><th>Address</th></tr></thead><tbody><tr><td>Ethereum</td><td>satSLAY for SLAY+ Vault</td><td><a href="https://etherscan.io/address/0x29f238f0501f53127e3684c4fd7829b96e6aa520"><code>0x29f238f0501f53127e3684c4fd7829b96e6aa520</code></a></td></tr><tr><td>Ethereum</td><td>satSLAY for SLAY Vault</td><td><a href="https://etherscan.io/address/0xb0f79ebd915a43b2dc75defd9cd7043c4aad45b2"><code>0xb0f79ebd915a43b2dc75defd9cd7043c4aad45b2</code></a></td></tr></tbody></table>


# Current Campaigns

{% content-ref url="/pages/rrSpxQWFeogSLZsnKbfz" %}
[The SLAYERS](/slay/staking-slay/current-campaigns/the-slayers)
{% endcontent-ref %}


# The SLAYERS

For a limited time only, SatLayer is running The SLAYERS campaign to reward users who stake their SLAY tokens.

Participants can choose between two vaults:

* SLAY Vault – Stake for shorter periods and earn APR in SLAY.
* SLAY+ Vault – Stake for longer periods, unlock APR in BTC, and gain access to exclusive perks.

| <p><br></p>         | **SLAY Vault**                                              | **SLAY+ Vault**                                                                                                                                                                                                                                                |
| ------------------- | ----------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Lock Duration       | 30 days from first deposit                                  | 60 days from first deposit                                                                                                                                                                                                                                     |
| Unbonding Duration  | 30 days                                                     | 30 days                                                                                                                                                                                                                                                        |
| APR Rewards Paid In | SLAY                                                        | BTC                                                                                                                                                                                                                                                            |
| Sats² Multiplier    | 4x                                                          | 6x                                                                                                                                                                                                                                                             |
| APR Boosts          | —                                                           | <ul><li>Hit TVL milestones – 10M, 25M, 45M – as a community to unlock APR boosts and additional rewards.</li><li>The more SLAY collectively staked, the higher the APR.</li></ul>                                                                              |
| Exclusive Perks     | 4x Sats² Rewards earned from staking SLAY in the SLAY Vault | <ul><li>6x Sats² Rewards earned from staking SLAY in the SLAY+ Vault can be converted into raffle tickets – your entry to win mystery prizes!</li><li>Qualify for the SatLayer Mecha Service (SMS) OG NFT – a one-time, limited-edition collectible.</li></ul> |
| Vault Expiry        | 13 October, 1:30 PM UTC                                     | 12 November, 1:30 PM UTC                                                                                                                                                                                                                                       |

## How to Participate

Read the full step-by-step guide [here](/slay/how-to-stake).

## Terms and Conditions

* Claims for the SlayDrop close on 13 September at 1:30 PM UTC. Any unclaimed allocations after this time will be forfeited, and late claims will not be entertained.
* The Sats² Multiplier for SLAY and SLAY+ Vaults will start accruing from 15 August, 2025, at 12:00 PM UTC.
* To be eligible for this campaign, you must stake the SLAY tokens you received from the SlayDrop through the SatLayer Deposit App at any time before the SlayDrop claim period closes.
* Upon your first deposit, you are required to maintain your staked SLAY for no less than the Lock Duration specified in the table above. The Lock Duration is calculated from the timestamp of your first deposit into the SatLayer Deposit App.
* If you unstake any portion of your SLAY before the completion of the Lock Duration for your chosen vault, all corresponding rewards will be forfeited.
* You may make multiple deposits of SLAY during the campaign period; however, your rewards will be determined based on the time-weighted average balance held over the Lock Duration.
* Rewards will be distributed at the end of the campaign.
  * SLAY Vault: Rewards in SLAY will be distributed within 10 business days after 13 October, 1:30 PM UTC.
  * SLAY+ Vault: Rewards in BTC will be distributed within 10 business days after 12 November, 1:30 PM UTC.
* Any attempt to exploit, manipulate, or game the system will result in disqualification, and may lead to the forfeiture of any rewards earned.
* SatLayer reserves the right to adjust rewards, modify eligibility, or terminate the program at its discretion.
* By participating, users agree to all terms set by SatLayer and its partners.


# FAQs

<details>

<summary>What is staked SLAY used for?</summary>

Staked SLAY helps secure the SatLayer ecosystem and its supported products.

</details>

<details>

<summary>Will I earn rewards while in the withdrawal queue?</summary>

&#x20;Yes. APR and Sats² rewards will continue to accrue during the 30-day withdrawal delay.

</details>

<details>

<summary>Why is there a 30-day withdrawal delay?</summary>

The delay is a security measure designed to:

* Ensure a guaranteed stake size for a set period
* Provide stability for the SatLayer ecosystem
* Prevent large, instant withdrawals that could compromise security

</details>


# How to Stake

## How to Stake SLAY

{% stepper %}
{% step %}
**Get SLAY**

To begin, acquire SLAY from any supported exchange.

<table><thead><tr><th width="131.28125">Exchange</th><th>Link</th></tr></thead><tbody><tr><td>PancakeSwap</td><td><a href="https://pancakeswap.finance/swap?outputCurrency=0x51477A3002ee04B7542aDfe63ccdb50c00Ee5147&#x26;chainOut=eth">https://pancakeswap.finance/swap?outputCurrency=0x51477A3002ee04B7542aDfe63ccdb50c00Ee5147&#x26;chainOut=eth</a></td></tr><tr><td>Aerodrome</td><td><a href="https://aerodrome.finance/swap?from=0x833589fcd6edb6e08f4c7c32d4f71b54bda02913&#x26;to=0x3e248ab4554cfdec8fc4f18f569fe6f46de61db1&#x26;chain0=8453&#x26;chain1=8453">https://aerodrome.finance/swap?from=0x833589fcd6edb6e08f4c7c32d4f71b54bda02913&#x26;to=0x3e248ab4554cfdec8fc4f18f569fe6f46de61db1&#x26;chain0=8453&#x26;chain1=8453</a></td></tr><tr><td>Hyperliquid</td><td><a href="https://t.co/FT5V9uNITP">app.hyperliquid.xyz/trade/SLAY/USDC</a></td></tr><tr><td>Binance Alpha</td><td><a href="https://www.binance.com/en/alpha/bsc/0xfc5a743271672e91d77f0176e5cea581fbd5d834">https://www.binance.com/en/alpha/bsc/0xfc5a743271672e91d77f0176e5cea581fbd5d834</a></td></tr><tr><td>Kraken</td><td><a href="https://pro.kraken.com/app/trade/slay-usd">https://pro.kraken.com/app/trade/slay-usd</a></td></tr><tr><td>Gate</td><td><a href="https://www.gate.com/tr/trade/SLAY_USDT">https://www.gate.com/tr/trade/SLAY_USDT</a></td></tr><tr><td>KuCoin</td><td><a href="https://www.kucoin.com/trade/SLAY-USDT">https://www.kucoin.com/trade/SLAY-USDT</a></td></tr><tr><td>MEXC</td><td><a href="https://www.mexc.com/price/SLAY">https://www.mexc.com/price/SLAY</a></td></tr><tr><td>BingX</td><td><a href="https://bingx.com/en/spot/SLAYUSDT">https://bingx.com/en/spot/SLAYUSDT</a></td></tr><tr><td>LBank</td><td><a href="https://www.lbank.com/trade/slay_usdt">https://www.lbank.com/trade/slay_usdt</a></td></tr><tr><td>Phemex</td><td><a href="https://phemex.com/trade/SLAY-USDT">https://phemex.com/trade/SLAY-USDT</a></td></tr></tbody></table>
{% endstep %}

{% step %}
**Visit the SatLayer Staking Page**

Go to: <https://app.satlayer.xyz/vaults/restake>&#x20;
{% endstep %}

{% step %}
**Connect your wallet**

{% endstep %}

{% step %}
**Choose your vault**&#x20;

* SLAY Vault – 30 days, APR in SLAY
* SLAY+ Vault – 60 days, APR in BTC + exclusive perks

<figure><img src="/files/Cfhw53cKMJNEmuDXngq6" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Stake your SLAY**

* Enter the amount to stake.
* Then, approve and confirm the transactions in your wallet.

<figure><img src="/files/a8EYhYJOYnVvmAUcjnNC" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Start earning**

* Once co[nfirmed, your stake begins earning ](#user-content-fn-1)[^1]APR immediately.&#x20;
* You can track your Sats² rewards from staking SLAY in the SatLayer Dashboard: <https://app.satlayer.xyz/dashboard>.&#x20;
  {% endstep %}
  {% endstepper %}

## How to Withdraw Your Stake

{% stepper %}
{% step %}
**Initiate Withdrawal**

* Go to the SatLayer Staking Page: <https://app.satlayer.xyz/dashboard>
* Click Withdraw.
* Enter the amount of SLAY you wish to withdraw.
* Confirm the transaction in your wallet.

<figure><img src="/files/s6P3wR2ioHvHCzyguhfW" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Withdrawal Queue**

* Your SLAY will enter a 30-day withdrawal delay period.
* You will continue earning APR during this time.

<figure><img src="/files/c8Yay1nWS637QkLvjv05" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Claim Rewards**

* Your rewards will be available after the 30-day delay. Claim them in the SatLayer Dashboard: <https://app.satlayer.xyz/dashboard?tab=Withdrawal%20Claims>
* Confirm the transaction to return SLAY to your wallet.

<figure><img src="/files/t9iDQa19sqJOJlHO7QH4" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

[^1]:


# How to Restake

This guide walks you through how to restake your assets using SatLayer.

<figure><img src="/files/hqEHeDwXyipd399eZPKH" alt=""><figcaption></figcaption></figure>

You can choose to restake your assets on:

* [EVM and Sui](https://app.satlayer.xyz/vaults/restake)
* [Babylon Genesis](https://app.satlayer.xyz/vaults/babylon)

By restaking through SatLayer, you can:

* Earn Sats² via the [SatLayer Rewards Program](https://blog.satlayer.xyz/satlayer-rewards-program/)
* Earn partner rewards
* Help secure BVSs on Babylon Genesis and receive additional BVS rewards

***

## Restaking Guides

* [Restake on Babylon Genesis](broken://pages/Z963UyRI0N8VBgPHBZl3)
* [Restake on EVM & Sui](broken://pages/r7kSar35kwSOL1ZQQ78e)

***

## Bridge to the Right Asset, on the Right Chain

You can easily swap and bridge crypto assets from one chain to another using [**IBC Eureka**](https://go.cosmos.network/) or [**garden**](https://app.garden.finance/?input-chain=bitcoin\&input-asset=BTC).

Below are some examples. For the full list of supported assets and networks, please visit the respective platforms directly.

### Bridging with **IBC Eureka**

Use IBC Eureka to bridge between Cosmos-native chains and external ecosystems like Ethereum.

<figure><img src="/files/Py4N5KdoqG7cx6dtRQLF" alt=""><figcaption></figcaption></figure>

Example:

* USDC (`Base` or `Solana`) <> LBTC (`Ethereum`)
* ETH (`Osmosis`) <> uniBTC (`Ethereum` or `Babylon Genesis`)
* stBTC (`Cosmos Hub`) → stBTC (`Ethereum`)

### Bridging with garden

Use Garden to bridge assets within EVM chains or from EVM to specific target networks like Berachain.

<figure><img src="/files/aRUYVpGjqBj6enrkLiYJ" alt=""><figcaption></figcaption></figure>

Example:&#x20;

* USDC (`Ethereum`) → LBTC (`Berachain`)
* WBTC (`Arbitrum`) → WBTC (`Ethereum`)


# Restake on Babylon Genesis

{% hint style="info" %}
You can restake either **cBABY** or **BTC LSTs** on **Babylon Genesis** — the process is the same for both.
{% endhint %}

### Getting started

If you’d like to restake cBABY, you’ll first need to obtain it by staking BABY on Cube by SatLayer. You can do this by clicking [here](https://cube.satlayer.xyz/claim) or tapping the banner shown below.

<figure><img src="/files/X0fewuWpHRVyNrQ3yCI3" alt=""><figcaption></figcaption></figure>

### Steps

{% stepper %}
{% step %}
**Connect your wallet**

Make sure you're using a supported wallet, such as Keplr.

<figure><img src="/files/4INCU3TuvFK9IXzgVQdv" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Choose a vault**

* Browse the available vaults and click on your chosen vault to begin the restaking process.
* Once restaked, you can monitor your position in the dashboard above.

<figure><img src="/files/9KhNcdkd0mMyyzDkTwyR" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Enter restake amount**

* Enter the amount of tokens you’d like to restake.

<figure><img src="/files/BUYVV0GzKQl3tUeblNi6" alt=""><figcaption></figcaption></figure>

* Click Restake and sign the approval transaction in your wallet.

{% hint style="success" %}
Success! You're now restaking and earning BVS rewards.
{% endhint %}

{% hint style="info" %}
**Tip**: You can view detailed vault information in the left-hand dashboard, including:

* Vault metrics
* Slashing parameters
* Operator details
* Your share of the vault
  {% endhint %}

<figure><img src="/files/qfMWCrMssWXqG1IesyT8" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

### Withdrawing restaked shares <a href="#withdrawing-restaked-shares" id="withdrawing-restaked-shares"></a>

{% stepper %}
{% step %}
**Enter withdrawal amount**

* Specify how much of your restaked position you'd like to withdraw.
* You'll see how much cBABY you'll receive upon withdrawal.

<figure><img src="/files/7uMDhF0PVWDL6pIoWicV" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Confirm withdrawal**

* Click Unstake.
* Approve the transaction in your wallet and pay the required network fees.

{% hint style="success" %}
Withdrawal complete! Your cBABY is now back in your wallet.
{% endhint %}

{% hint style="info" %}
To unstake your cBABY back to BABY, follow the guide [here](/cube-by-satlayer/how-to-stake#unstaking-cbaby).
{% endhint %}
{% endstep %}
{% endstepper %}


# Restake on EVM and Sui

### Getting started

Before you begin, make sure you:

* have wrapped BTC or BTC LSTs ready
* are using a supported wallet
* have enough native tokens for network fees (e.g. ETH for Ethereum, BNB for BNB Chain, etc.)

{% hint style="info" %}
The list of supported tokens may grow over time — check the SatLayer app for the latest list of supported assets.
{% endhint %}

### Steps

{% stepper %}
{% step %}

#### **Connect your wallet**

* Click Connect Wallet, and select your preferred wallet.

<figure><img src="/files/06hNi3gzc5ctU3gNmyZq" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/IRit4BNeZUvBur94p6A3" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Deposit BTC assets

* Select the BTC asset from the chain you'd like to deposit to SatLayer

<figure><img src="/files/u6sxC5M9AF3OSa3MVFnT" alt=""><figcaption></figcaption></figure>

* Enter the amount you’d like to restake

<figure><img src="/files/4srRXDkYUcMz0xAniZfs" alt=""><figcaption></figcaption></figure>

* Sign the approval transaction
* Click Deposit to finalize your restake
* Once confirmed, your progress bar will show as Complete

<figure><img src="/files/vs3zGLJd92BHyYR7eb02" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Add receipt tokens to your wallet

* After depositing, you’ll receive receipt tokens
* Click Add to wallet to include them in your wallet view
* You should now be able to see these tokens in your wallet

<figure><img src="/files/vE9vnfKrrMUsGvZy9ra6" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

### Resources

* [Guide to restaking uniBTC on EVM and BOB with SatLayer](https://blog.satlayer.xyz/guide-stake-unibtc-bedrock/)
* [Guide to restaking solvBTC.BBN on EVM with SatLayer](https://blog.satlayer.xyz/guide-staking-solvbtc-on-satlayer/)
* [Guide to restaking FBTC on EVM with SatLayer](https://blog.satlayer.xyz/guide-staking-fbtc-on-satlayer/)
* [Guide to restaking stBTC on EVM with SatLayer](https://blog.satlayer.xyz/restake-stbtc-lorenzo-satlayer/)
* [Guide to staking BTC with Lombard and restake LBTC on EVM with SatLayer](https://blog.satlayer.xyz/guide-staking-restaking-btc-lbtc-lombard/)
* [Guide to restaking LBTC on Sui with SatLayer](https://blog.satlayer.xyz/guide-restaking-lbtc-on-sui/)
* [Guide to restaking XBTC on Sui with SatLayer](https://blog.satlayer.xyz/guide-restaking-xbtc-okx-sui-satlayer/)


# Sats² Rewards&#x20;

Learn more about SatLayer's rewards program for early contributors and users

The Sats² Rewards Program is SatLayer’s incentive system, designed to reward users for depositing assets and helping grow the ecosystem.

Alongside Sats², participants may also benefit from ecosystem partner rewards, such as Lombard Lux, Babylon Points, and Sparks.

## What is Sats²

{% hint style="warning" %}
Sats² are not tokens. They are off-chain reward points tracked within SatLayer. \
There is no $SATS token. Stay mecha, stay safe and beaware of scams.
{% endhint %}

Sats² measure your contributions to the SatLayer ecosystem, and serve as the core unit of the SatLayer Rewards program. By depositing BTC, SLAY or BABY and actively participating in program activities, you continuously accumulate Sats² over time.


# Sats² Season & Epoch

We ran several epochs, with each epoch in the rewards program lasting several weeks or months, or until its cap was reached.

{% hint style="info" %}
For each epoch, **a fixed amount of Sats² will be available as rewards.** Additionally, bonuses may be introduced throughout the program to provide further incentives.
{% endhint %}

## Season 1

* Season 1 Epoch 1 began on **August 23, 2024, at 00:00 UTC** with a 40 BTC cap. It was fully subscribed by August 25, 2024, and officially concluded on September 13, 2024, at 00:00 UTC.
* Season 1 Epoch 2 started on **September 13, 2024, at 02:00 UTC** and ran until **August 11, 2025, at 12:00 UTC**, marking the commencement of the SLAY TGE.

{% hint style="success" %}
Following the conclusion of Epoch 2, from **August 11 through September 30, 2025**, participants continued to earn Season 1 points as a token of appreciation for their continued support.
{% endhint %}

## Season 2&#x20;

* Season 2 Epoch 1 will start on **October 1, 2025 at 00:00 UTC** and run till the epoch ends.&#x20;


# Current Campaigns

Stay tuned!


# Binance Wallet Restaking Challenge

SatLayer and Binance Wallet have teamed up to launch a Bitcoin restaking campaign with a 5 million Sats² reward pool for Binance Wallet users.

The campaign runs from **May 26, 2025, 18:00 UTC+8** to **Jun 26, 2025, 18:00 UTC+8.**

## How it works

To earn your share of the rewards, complete the following tasks before the deadline:

* Social tasks
  * Follow @SatLayer on X
  * Join the @satlayerannouncements Telegram channel
  * Be a part of the SatLayer [Discord](https://discord.com/invite/satlayer) channel&#x20;
* On-chain tasks
  * Restake at least 0.0001 BTC LST on any supported chain via [SatLayer](https://app.satlayer.xyz/restake) using your Binance Wallet
    * Maintain your restaked assets for the entire campaign duration

## Rewards

* 5,000,000 Sats² reward pool
* Equally shared among all eligible users

## Terms and conditions

* Your wallet address must be verified by Binance Wallet in order to be eligible for rewards.
* BTC LST assets must be restaked for the entire duration of the campaign to be eligible.
* All rewards will be distributed in Sats² rewards, which can be used in future SatLayer ecosystem programs.
* Future tokens may be distributed on Ethereum Mainnet, it is your responsibility to ensure you have access to the same wallet address used and are able to access such tokens even if you participated on a different blockchain network.
* Any attempt to exploit vulnerabilities, engage in fraudulent activity, or manipulate the system will result in disqualification and points may be removed from all associated accounts.
* By participating, users agree to comply with all applicable terms set forth by SatLayer and our partner.


# Past Campaigns


# OKX Cryptopedia

SatLayer partnered OKX and Babylon, as part of OKX Cryptopedia Season 23, to launch an [interactive campaign](https://www.okx.com/en-sg/help/okx-wallet-to-launch-cryptopedia-season-23) with the opportunity to earn rewards from Babylon and its ecosystem projects.

The campaign begins August 16, 2024 at 06:00 UTC through December 20, 2024 at 10:00 UTC.

## How it works

1. Download the OKX App or ensure that the app version isn't lower than 6.78.0. Open the App and select **Wallet** from the top toggle.
2. Create a wallet or import an existing one. Then, tap **Discover** tab at the bottom to access the Discover page, and tap **Cryptopedia: Learn to Earn**.
3. Tap **Season 23 Babylon** to access the interactive page, and choose the DApp you want to interact with.
4. Follow the task instructions as shown below before the deadline.\
   Task 1: Follow SatLayer on X\
   Task 2: Hold at least 0.001 BTC equivalent on SatLayer
5. After completing the quest, wait for 10 minutes and then tap **Verify**.

## Terms and conditions

* The total reward pool is capped at 88,000 USDT equivalent in future tokens, and are determined based on the market value on the future distribution date
* Your wallet address must be verified by OKX Wallet in order for you to be eligible for an entry
* Future tokens may be distributed on Ethereum mainnet, it is your responsibility to ensure you have access to the same wallet address used and are able to access such tokens even if you participated on a different blockchain network
* Any attempt to exploit vulnerabilities, engage in fraudulent activity, or manipulate the system will result in disqualification and points may be removed from all associated accounts
* By participating, users agree to comply with all applicable terms set forth by SatLayer and our partner


# Journey to the Sats

SatLayer launched the [Journey to the Sats](https://journey.satlayer.xyz/) campaign beginning October 11, 2024 at 10:00 UTC through November 8, 2024 00:00 UTC.

## How it works

1. Visit the [Journey to the Sats](https://journey.satlayer.xyz/) campaign site during the entire campaign period.
2. Complete the tasks as shown on the campaign site, which occur during the following periods.
   1. House of Bedrock campaign starts from October 11, 2024 at 10:00 UTC to October 25, 2024 at 00:00 UTC.
   2. House of Solv campaign starts from October 16, 2024 at 10:00 AM UTC to October 30, 2024 at 00:00 UTC.
   3. House of Lombard campaign starts from October 25, 2024 at 10:00 UTC to November 8, 2024 at at 00:00 UTC.

## Terms and conditions

* SP refers to the MEE6 XP used within the SatLayer Discord channel
* The duration of the points and rewards boost will vary, depending on the Bitcoin LST partners
* The shared prize pool will be distributed to users after the campaign ends
* Users’ deposited assets on SatLayer will earn Sats² with every snapshot, which occurs at least once every 24 hours, and follows mechanics of the SatLayer Rewards Program that was active during the duration of the campaign
* Any attempt to exploit vulnerabilities, engage in fraudulent activity, or manipulate the system will result in disqualification and points may be removed from all associated accounts
* By participating, users agree to comply with all applicable terms set forth by SatLayer and our partner


# The Great BTC Meme War

Four Great Houses. Four House Champions. One Meme Victor to reign supreme!

<figure><img src="/files/ApWUuOddhbFPrTuMo9bz" alt=""><figcaption></figcaption></figure>

As Babylon’s rise flooded the land with staked BTC, four great Houses emerged—Lombard, Bedrock, Solv, and Lorenzo—each vying for control over the most valuable asset ever created: **Bitcoin**.\
\
But this war is not waged with swords or armies. In the age of BTCfi, memes are the weapon of choice—shaping minds, rallying supporters, and declaring dominance.\
\
**Your mission if you choose to accept it... is clear:**\
Forge the most influential, hilarious, and legendary meme to cement your House’s legacy. As battle lines are drawn, the call has been issued: *“Meme or be forgotten.”*

## Chapter 1 - The Great Meme War Begins!

Create memes for your chosen House, where you will be judged on the quality of your art, creativity, and humor. The SatLayer team will shortlist the 3 winners per House, who will then move on to the next chapter. \
\
**Activity Period**\
Thursday, March 18th, 10:00 AM UTC to Monday, March 31, 10:00 AM UTC \
\
**How to join?**\
The campaign is open to all @Disciple roles who complete their verification in the [#verify channel](https://discord.com/channels/1273815030483259392/1276030034817318943) of the [SatLayer Discord](https://discord.com/invite/HKQngYyGEk).<br>

1. All @Disciple Roles can create memes to represent their chosen House: \
   @Lombard, @Bedrock, @Solv, or @Lorenzo
2. Follow [@satlayer on Twitter](https://x.com/satlayer) and [quote tweet this announcement](https://x.com/satlayer/status/1902724730760970708) with your meme.
3. Reshare your Quote Tweet as a link on the [#memes](https://discord.com/channels/1273815030483259392/1277532200711098420) channel the [SatLayer Discord](https://discord.com/invite/HKQngYyGEk).

**Prize Pool**\
Top 3 candidates from each of the four Houses will win $50 BTC LST each.&#x20;

## Chapter 2 - Elect your Champion

House members, your vote will decide the four Champions who will lead the final charge in the Great Meme War.

Choose wisely—for when your Champion’s meme triumphs in the next chapter, every member of the House shall receive **1,000 Sats² each.**

**Voting Activity Period:**

* Tuesday, April 1st, 10:00AM UTC to Thursday, April 3rd, 10:00AM UTC

**How to vote?**\
Voting of Champions is only available to @Lombard, @Bedrock, @Solv, @Lorenzo roles on the  [SatLayer Discord](https://discord.com/invite/HKQngYyGEk).<br>

1. Each House member votes for their favorite candidate on their respective House channels:\
   [#house-of-lombard](https://discord.com/channels/1273815030483259392/1296347550647062578), [#house-of-bedrock](https://discord.com/channels/1273815030483259392/1293852909087358987), [#house-of-solv](https://discord.com/channels/1273815030483259392/1293852997511548938), and [#house-of-lorenzo](https://discord.com/channels/1273815030483259392/1316280253949411328)
2. SatLayer Team will tally the votes and announce the final House Champions on the [#community](https://discord.com/channels/1273815030483259392/1296754561423245343) channel on the [SatLayer Discord](https://discord.com/invite/HKQngYyGEk).
3. The four Champions will win $150 BTC LST each. They will move on to the next chapter to represent their House and compete to win **1,000 Sats²** per member for their house

**Prize Pool**

* 1 House Champion from each of the four Houses will win $150 BTC LST each

## Chapter 3 - The Clash of Champions

The final four Champions will clash in a public vote open to all @Disciples for the crown of Meme King/Queen, while also securing **1,000 Sats²** for every member of their House!

**Voting Champion Activity Period**

* Friday, April 4th, 10:00AM UTC to Sunday, April 6, 10:00AM UTC

**How to vote?**\
Voting is open to all @Disciple roles on the [SatLayer Discord](https://discord.com/invite/HKQngYyGEk) who complete their verification in the [#verify ](https://discord.com/channels/1273815030483259392/1276030034817318943)channel.<br>

1. All @Disciple roles will vote on the meme of their favorite champion on the [#memes](https://discord.com/channels/1273815030483259392/1277532200711098420) channel of the [SatLayer Discord](https://discord.com/invite/HKQngYyGEk).
2. The SatLayer team will tally the votes and announce the winner once the activity period ends.
3. The winning champion will win an additional $200 BTC LST and 1,000 Sats² for all members of his/her House.

**Prize Pool**

* 1 Meme Vicotr of the Great Meme War wins $200 in BTC LST, 1000 XP, & @Ambassador Role
* **1,000 Sats²** for all members of the Meme King/Queen's affiliated House.

## Prize Breakdown

<table><thead><tr><th width="237">Campaign Chapters</th><th width="221.4609375">Number of Winners</th><th>Prize per winner </th></tr></thead><tbody><tr><td>Chapter 1<br>The Great Meme War Begins</td><td>12 candidates<br>(Top 3 winners for each of the 4 Houses)</td><td>$50 in BTC LST</td></tr><tr><td>Chapter 2<br>Elect your Champion</td><td>4 Champions<br>(1 Champion for each of the 4 Houses)</td><td>$150 in BTC LST</td></tr><tr><td>Chapter 3<br>The Clash of Champions</td><td>1 Meme King/Queen of the Great Meme War<br></td><td><p>$200 in BTC LST, 1000XP, and an @Ambassador Role (prizes are exclusive to the Meme King/Queen ONLY) </p><p><br>1,000 Sats² for all members of the Meme King/Queen's affiliated House.</p></td></tr></tbody></table>

## Terms and Conditions

* To receive your reward, you must provide a compatible hot wallet that accepts LBTC, uniBTC, solvBTC, or stBTC via the ERC-20 network. Failure to do so may result in the permanent loss of your prize. SatLayer is not responsible for any lost or unrecoverable funds.
* USD value of the prize will be based upon the time of distribution.
* The official winners for each chapter will be announced 1 day after the end of its respective activity period.
* Prizes will be distributed to the winners within one week after the end of each chapter.
* Participants may submit as many memes as they would like and for any House they choose. However only one of their submissions will be eligible for voting.&#x20;
* If the winner does not have the @Disciple role, they can still participate in the campaign. However they must obtain the role by verifying in the [#verify channel](https://discord.com/channels/1273815030483259392/1276030034817318943) of the SatLayer Discord before they can claim their prize.
* SatLayer reserves the right to disqualify any participant suspected of fraudulent behavior, including but not limited to the use of multiple accounts, stealing content, or manipulation of the voting system.&#x20;
* Any suspicious activity or abuse may be determined by sole discretion of the SatLayer team.


# 5 Million Sats² OKX Wallet Giveaway Rewards

SatLayer and OKX Wallet have teamed up to launch a Bitcoin restaking campaign with a 5M Sats² reward pool for OKX Wallet users.

The campaign runs from **March 28, 2025, 18:00 UTC+8** to **April 28, 2025, 18:00 UTC+8**.

## How it works

Head to the [OKX Wallet Giveaway Campaign page](<https://web3.okx.com/en-eu/giveaway/satlayer >) and complete the following tasks before the deadline:

* Follow @SatLayer on X
* Join the @satlayerannouncements Telegram channel
* Connect to [SatLayer](https://app.satlayer.xyz/restake) using your OKX Wallet and restake at least 0.0001 BTC LST on any supported chain using OKX Wallet
  * Maintain your restaked assets for the entire campaign duration

## Rewards

* 5,000,000 Sats² reward pool
* Equally shared among all eligible users

## Terms and conditions

* Your wallet address must be verified by OKX Wallet in order to be eligible for rewards.
* BTC LST assets must be restaked for the entire duration of the campaign to be eligible.
* All rewards will be distributed in Sats² rewards, which can be used in future SatLayer ecosystem programs.
* Future tokens may be distributed on Ethereum mainnet, it is your responsibility to ensure you have access to the same wallet address used and are able to access such tokens even if you participated on a different blockchain network.
* Any attempt to exploit vulnerabilities, engage in fraudulent activity, or manipulate the system will result in disqualification and points may be removed from all associated accounts.
* By participating, users agree to comply with all applicable terms set forth by SatLayer and our partner.

\ <br>


# Bitcoin Pizza Day Promo: 3x Sats² Multiplier Boost

Bitcoin Pizza Day is celebrated every year on May 22nd, marking the first known commercial transaction using Bitcoin. On this day in 2010, programmer Laszlo Hanyecz paid 10,000 BTC for two pizzas — an event that’s become legendary in the crypto community. It's a fun reminder of how far Bitcoin has come since its early days.

To commemorate this iconic moment in Bitcoin history, SatLayer is rolling out a special promotion.

## How it works

To celebrate Bitcoin's ATH, SatLayer is offering a **3× Sats² Multiplier Boost** on select vaults for a limited time — **from** **May 22 to June 5, 2025** 🍕

| Chain           | Asset    | Sats² Multiplier |
| --------------- | -------- | ---------------- |
| Ethereum        | uniBTC   | 3x               |
| Ethereum        | LBTC     | 3x               |
| Ethereum        | xSolvBTC | 3x               |
| Ethereum        | stBTC    | 3x               |
| BNB Smart Chain | stBTC    | 3x               |
| BNB Smart Chain | xSolvBTC | 3x               |
| Berachain       | uniBTC   | 3x               |
| Berachain       | LBTC     | 3x               |
| Berachain       | xSolvBTC | 3x               |
| Berachain       | waBTC    | 3x               |
| Berachain       | SBTC     | 3x               |

## Terms and conditions&#x20;

* All rewards will be distributed in Sats² rewards, which can be used in future SatLayer ecosystem programs.&#x20;
* Future tokens may be distributed on Ethereum mainnet, it is your responsibility to ensure you have access to the same wallet address used and are able to access such tokens even if you participated on a different blockchain network.&#x20;
* Any attempt to exploit vulnerabilities, engage in fraudulent activity, or manipulate the system will result in disqualification and points may be removed from all associated accounts.&#x20;
* By participating, users agree to comply with all applicable terms set forth by SatLayer and our partner.


# SatLayer x Pulsar Money Bitcoin Restaking Challenge

SatLayer is partnering with Pulsar Money and Astrarizon to launch a Bitcoin staking campaign featuring a 5 million Sats² reward pool.

The campaign runs from **29 May, 2025, 18:00 UTC+8** to **27 June, 2025, 18:00 UTC+8.**

## How it works

To earn your share of the rewards, complete both on-chain and social tasks before the deadline. The more points you earn, the larger your share of the Sats² reward pool.

### On-chain tasks

Stake any of the supported BTC Liquid Staking Tokens (LSTs) via SatLayer on **Ethereum** or **BNB Smart Chain.**

| Chain           | Supported Assets |
| --------------- | ---------------- |
| Ethereum        | uniBTC           |
| Ethereum        | xSolvBTC         |
| Ethereum        | LBTC             |
| Ethereum        | stBTC            |
| BNB Smart Chain | xSolvBTC         |
| BNB Smart Chain | stBTC            |

#### Deposit tiers&#x20;

| Deposit Amount | Points Earned |
| -------------- | ------------- |
| 0.0001 BTC     | 100 points    |
| 0.00025 BTC    | 300 points    |
| 0.001 BTC      | 600 points    |

Points are awarded based on the `net new Total Value Locked (TVL)` you bring in during a `rolling 24-hour window`. The aim is to reward genuine, sustained inflows of new capital.

#### **What this means**

* `Net new TVL` is the *increase* in the amount of funds you've deposited, excluding any amounts you’ve withdrawn and re-deposited.
* A `rolling 24-hour window` means your points are calculated continuously. At any given moment, we compare your TVL now to what it was exactly 24 hours ago.

#### **Why it matters**

We want to reward users who consistently bring in new capital and keep it deposited, rather than those trying to game the system by quickly withdrawing and redepositing the same funds.

**Example**

* You deposit 0.0001 BTC today and keep it there → You earn 100 points.
* Tomorrow, you deposit an additional 0.0001 BTC → You earn another 100 points.
* But if you withdraw and re-deposit the same 0.0001 BTC later today → Your net new TVL stays the same → No new points are earned.

This approach ensures rewards go to users who genuinely help grow TVL over time.

{% hint style="success" %}
**Tip**: Add fresh deposits daily to accumulate more points and boost your share of the reward pool!
{% endhint %}

### Social tasks

Complete these social actions to boost your total score:

| Follow SatLayer Twitter        | 30 points     |
| ------------------------------ | ------------- |
| Join Discord                   | 30 points     |
| Daily Claim Points             | 30 points/day |
| Subscribe to Pulsar newsletter | 30 points     |
| Enter and verify email         | 100 points    |
| Bonus: Pulsar Pro Subscription | +50% points   |
| Bonus: Complete KYC            | +30% points   |

## Rewards

* 5,000,000 Sats² reward pool&#x20;
* Rewards are distributed proportionally based on each eligible user’s total points, relative to the total across all participants
* Minimum of 300 points required to qualify for rewards

## Terms and conditions&#x20;

* All rewards will be distributed in Sats² rewards, which can be used in future SatLayer ecosystem programs.&#x20;
* Future tokens may be distributed on Ethereum mainnet, it is your responsibility to ensure you have access to the same wallet address used and are able to access such tokens even if you participated on a different blockchain network.&#x20;
* Any attempt to exploit vulnerabilities, engage in fraudulent activity, or manipulate the system will result in disqualification and points may be removed from all associated accounts.&#x20;
* By participating, users agree to comply with all applicable terms set forth by SatLayer and our partner.


# Restake uniBTC on Build on Bob

<figure><img src="/files/4vQf7GDRcUzKJT3quMh7" alt=""><figcaption></figcaption></figure>

SatLayer now supports BOB, kicking off with uniBTC restaking — and featuring a 2x Sats² multiplier boost! To celebrate we are giving away a $10 USD in uniBTC prize pool to each lucky BOB restaker.

## How it works

1. Restake at least 0.001 uniBTC on BOB at[ https://app.satlayer.xyz/](https://app.satlayer.xyz/).
2. Take a screenshot of your restake as proof.
3. Post your screenshot on Twitter and tag @satlayer’s X.
4. Post your tweet link in the [#bob](https://discord.com/channels/1273815030483259392/1380387450651934720) channel on the [SatLayer Discord](https://discord.com/invite/HKQngYyGEk).
5. Once confirmed by our Mods, we will give you access to a BOB Claim form where you can submit your address.

Keep your uniBTC restaked on SatLayer starting from June 6 to July 6, 2025 (UTC+8) — the first 50 participants will receive $10 in uniBTC!

## Rewards

* 10 USD in uniBTC\* for 50 winners

{% hint style="info" %}
The USD value of the prize will be based on the uniBTC price at the time of the official winner announcement on SatLayer’s X.
{% endhint %}

## Terms and Conditions

* To ensure fairness, only uniBTC restaked on BOB between June 6 and June 20, 2025 (18:00 UTC+8) will be eligible for this campaign.
* Once restaked, you must hold at least 0.001 uniBTC on BOB until July 6, 2025, 18:00 UTC+8. If you unstake and your balance falls below 0.001 uniBTC, your restake will become ineligible for this campaign.
* To be eligible for this campaign, you must include both your BOB wallet address and the link to your BOB restake tweet in the BOB Claim form.
* Participants must enter their BoB wallet address in the claim form. Addresses from other chains won’t be accepted. Rewards will be distributed to the same BoB wallet address.
* Rewards will be in the form of $uniBTC only, and will be distributed within 14 working days via BoB chain after July 6, 2025 18:00 UTC+8.
* The USD value of the prize will be determined based on the uniBTC price at the time the official winner announcement is published on SatLayer’s Twitter.Any attempt to exploit vulnerabilities, engage in fraudulent activity, or manipulate the system will result in disqualification and points may be removed from all associated accounts.
* By participating, users agree to comply with all applicable terms set forth by SatLayer and our partner.


# SatLayer x OKX Wallet Bitcoin Deposit Challenge

<figure><img src="/files/nMAQm9HDMnAKFjqEXTiv" alt=""><figcaption></figcaption></figure>

SatLayer and OKX Wallet have joined forces for an exclusive Bitcoin deposit campaign! Deposit your BTC and unlock *early access* to our highly anticipated **SatLayer Community Round** — plus, get a chance to share in a massive **800,000 SatLayer token** reward pool!

The campaign runs from **June 19, 2025, 17:00 UTC+8** to **July 2, 2025, 17:00 UTC+8**.

## How it works

Head to the [OKX Wallet Giveaway campaign page](https://web3.okx.com/giveaway/satlayer2) and complete the following tasks before the deadline above:

* Complete social tasks
  * Follow [@SatLayer](https://x.com/satlayer) on X
  * Join the [@satlayerannouncements](https://t.me/satlayerannouncements) Telegram channel
  * Join the [SatLayer Discord](https://discord.gg/Sywm5WcH5R)
* Connect to [SatLayer](https://app.satlayer.xyz/vaults/restake) using your OKX Wallet ([for users new to OKX Wallet](https://web3.okx.com/learn/how-to-create-an-okx-wallet)) and deposit at least 0.00001 BTC asset on any supported chain (except Sui)
* Hold any assets worth $10 USD or more in your OKX Wallet for at least 24 hours

### For a list of available chains and assets, see the guide below :point\_down:

{% hint style="warning" %}
For a step-by-step guide on **depositing or acquiring BTC assets**, click [here](/depositors/how-to-restake).
{% endhint %}

{% hint style="success" %}
**Don't forget!** The more you deposit and the longer you keep it, the greater your chance to unlock early access to our upcoming Community Round.
{% endhint %}

## Rewards

* 800,000 SatLayer Tokens
  * Equally shared among all eligible users
  * Fully claimable at TGE
* The top 800 participants — ranked by TVL and Time Deposited — will unlock early access to our upcoming Community Round!

## Terms and conditions

* Your wallet address must be verified by OKX Wallet in order to be eligible for rewards.
* BTC assets deposited on the Sui blockchain are not eligible for this campaign.
* BTC assets must be restaked for at least 24 hours during the campaign to be eligible.
* SatLayer tokens may be distributed on Ethereum mainnet, it is your responsibility to ensure you have access to the same wallet address used and are able to access such tokens even if you participated on a different blockchain network.
* Any attempt to exploit vulnerabilities, engage in fraudulent activity, or manipulate the system will result in disqualification and points may be removed from all associated accounts.
* By participating, users agree to comply with all applicable terms set forth by SatLayer and our partner.


# The Order of the Sats

Access mystical rewards and powers - only for those who hold Bitcoin’s rarest relics.

<figure><img src="/files/7ZYmrAh9Tc41Oi0IzG8n" alt=""><figcaption></figcaption></figure>

In the shadowy depths of SatLayer’s Discord lies an ancient society — one that predates even the first Genesis. Known to some as The Order of the Sats, this elusive group of individuals was formed in the aftermath of the Sat Cubes’ disappearance which plunged their home, The City of Gold, into darkness.\
\
While The Order is historically elusive, whispers of a new protocol breathing life into raw Bitcoin has changed that. Re-energized by this innovation, The Order believes that a new generation must be welcomed into the fold in order to restore the city back to its former glory and beyond.

Only the bold can slay their way into The Order. Are you one of them?

## Phase 1: The Initiation

To be admitted into The Order you must possess at least one of these NFT relics:

* Taproot Wizards
* Node Monkeys
* Bitcoin Frogs
* Quantum Cats
* Bitcoin Puppets
* OCM Genesis
* Pizza Ninjas
* OMB
* UniSatOG Pass.

\
Forged into the very fabric of Bitcoin’s (BRC-20) blockchain, ownership of these relics marks you as no ordinary traveler — but one deemed worthy enough by The Order to join their sacred ranks.

### Follow the steps below to complete your initiation:

1. **Enter the realm to verify your relic**\
   \- Sign in to <https://matrica.io/login> with your Discord account.\
   \- Go to <https://matrica.io/settings> and press the **Add Wallet** button to link the wallet address that holds your Ordinal NFT.\
   \- Join the [SatLayer Discord](https://discord.com/invite/HKQngYyGEk) and go to [#verify-nft](https://discord.com/channels/1273815030483259392/1361662248107638925) to connect your wallet.\
   \- Bot will check if you hold at least one of the qualifying NFT collections listed above.<br>
2. **Meet The Order**\
   \- Once verified, you will receive an exclusive The Order Role, Badge, and 1,000XP which marks your acceptance into The Order.\
   \- Meet your fellow brothers and sisters in the [#city-of-gold](https://discord.com/channels/1273815030483259392/1361950253292585047) channel and stay tuned for further updates.<br>
3. **Claim your rewards from The Order**\
   \- Check the pinned message in the[ #city-of-gold](https://discord.com/channels/1273815030483259392/1361950253292585047) and access the rewards claim form to share your wallet addresses for future rewards.

## Phase 2: The Rite of Restaking

You’ve proven your worth, but The Order of the Sats was never just a society of NFT collectors. It was forged with a sacred mission: restore the lost City of Gold. Now, with the arrival of Bitcoin’s novel technology, that moment has finally come.

To harness this power, The Order has unveiled a new sacred ritual — *the Rite of Restaking* — a process designed to transform raw Bitcoin into a staked force strong enough to awaken the city from its eternal darkness.

The ritual has begun. Will you be among the first to revive the city’s soul… and rise as a legend within The Order?

#### To complete the Rite of Restaking, you must [restake your BTC assets into SatLayer](http://app.satlayer.xyz).

### **Powers unlocked for those who complete the Rite:**

* A mystical multiplier boosting Sats² for those who possess The Order Role.
* Blessings from above…  some of The Order claim they fall directly from the sky.

## &#x20;Final Reminders

* You must hold at least one qualifying NFT to join The Order.
* You must verify it via the[ #verify-nft](https://discord.com/channels/1273815030483259392/1361662248107638925) channel in the SatLayer Discord.
* Membership openings within The Order are limited and may close at any moment.
* Restaking via Babylon unlocks exclusive rewards only accessible to The Order.
* Don’t forget to submit your addresses through The Order Form in the [#city-of-gold](https://discord.com/channels/1273815030483259392/1361950253292585047) channel to claim your full rewards and benefits.


# Join Sui City Bingo for a chance to win $100 in Sui!

SatLayer now supports restaking on Sui starting with LBTC and OKX’s xBTC! To celebrate we're giving away $100 in SUI to 50 lucky winners who complete their Bingo card.

## How it works

<figure><img src="/files/sfqUlzG7lMiyhwu5TilP" alt="" width="375"><figcaption></figcaption></figure>

1. Complete any full row, column, or diagonal on your bingo card.
2. Paste a screenshot as proof of each completed task into its corresponding square.
3. Quote Tweet the [Sui City Bingo Announcement](https://x.com/satlayer/status/1943611311574966320) with your own completed Bingo card.

{% hint style="info" %}
The center square is a FREE space so use it to your advantage!
{% endhint %}

### Here are a few examples of completed Bingo cards:

<div><figure><img src="/files/MIA7gUAZJwJjSvAOSmEN" alt=""><figcaption></figcaption></figure> <figure><img src="/files/lF9S8QpZ66IKCwPQVYWQ" alt=""><figcaption></figcaption></figure> <figure><img src="/files/qgVMPGUUJxV0oVTdWdnr" alt=""><figcaption></figcaption></figure></div>

Complete these tasks by **July 17, 2025, 6PM (UTC+8)** to join!

## Rewards

* Send your Quote Tweet link at [#city-of-sui](https://discord.com/channels/1273815030483259392/1316945430382116885) channel on [Discord](https://discord.gg/HKQngYyGEk) to receive Sui Role & 500 XP.
* 50 participants will be randomly selected to win $100 USD in Sui tokens!

## Terms and conditions

* Multiple bingo entries are allowed, but you can only be selected as a winner once for this campaign.
* Tasks involving restaking on Sui must show the asset and amount restaked on the Tweet.
* Screenshots for Discord, Twitter/X, and Telegram should show your username for verification purposes.
* The USD value of the prizes will be based on the time of distribution.
* Prizes will be sent within 7 days of the official winner's announcement on SatLayer's X account.
* Any attempt to exploit vulnerabilities, engage in fraudulent activity, or manipulate the system will result in immediate disqualification.
* By participating, users agree to comply with all applicable terms set forth by SatLayer and our partners.


# Sui-percharge your xBTC with OKX and SatLayer

SatLayer now supports xBTC deposits on Sui!&#x20;

To celebrate, from 10 Jul, 10pm (UTC+8) to 1 Oct, 8pm (UTC+8), earn double rewards just by depositing xBTC on Sui.

<figure><img src="/files/wYBlgJmQNdW0A323610U" alt=""><figcaption></figcaption></figure>

## How It Works

* To qualify for rewards, deposit at least $10 worth of xBTC on Sui.
* Once deposited, you'll earn real-time APR rewards, calculated dynamically based on:
  * Total xBTC TVL on Sui
  * Remaining rewards in the pool
  * Your deposit amount
  * How long you keep it deposited

{% hint style="info" %}
For the user guide on how to restake XBTC on Sui, click [here](https://blog.satlayer.xyz/guide-restaking-xbtc-okx-sui-satlayer/).
{% endhint %}

## Rewards

Earn double rewards, distributed continuously and updated in real-time:

| Reward              | Duration | Type        |
| ------------------- | -------- | ----------- |
| $60,000 USDC        | 3 months | Dynamic APY |
| 3x Sats² multiplier | 3 months | —           |

{% hint style="info" %}
Dynamic APY means your yield changes based on live pool activity, with early depositors benefitting from higher rates!
{% endhint %}

{% hint style="success" %}
You only earn APR while holding restaked XBTC. Using it in LPs or elsewhere makes it ineligible unless they are in eligible protocols i.e. [Bluefin](https://trade.bluefin.io/deposit/0xc296d2eb4c7ea59f596d4e833a6e1c489e48700beb074abe7c7cc36d47a86128).
{% endhint %}

## Terms and Conditions

* A minimum deposit of $10 in xBTC is required to qualify.
* APR rewards are calculated and distributed based on real-time deposits.
* Any attempt to exploit, manipulate, or game the system will result in disqualification.&#x20;
* SatLayer reserves the right to adjust rewards, modify eligibility, or terminate the program at its discretion.&#x20;
* By participating, users agree to all terms set by SatLayer and its partners.


# FINAL CALL

<div data-full-width="true"><figure><img src="/files/dbmnldO3HcQ0BCbhQlax" alt=""><figcaption></figcaption></figure></div>

Want to increase your SlayDrop allocation? This is the last call.

## **How It Works**

Deposit ANY asset across ANY supported chain on [SatLayer](https://app.satlayer.xyz/vaults/restake).

{% hint style="info" %}
For the step-by-step guide on How to Restake, click [here](/depositors/how-to-restake).
{% endhint %}

## **4X the Rewards**

<figure><img src="/files/6iYrT8BfwHZy0MXDO6ZO" alt=""><figcaption></figcaption></figure>

<h3 align="center">4,200,000 SLAY (0.2% of supply)</h3>

4.2 Million SLAY (0.2% of the total supply of SLAY) will be allocated to both existing and new users who deposited and maintained TVL during the campaign period. To earn the maximum allocation, users should maintain their stake for the duration of the campaign.

<table data-view="cards"><thead><tr><th align="center"></th><th></th><th></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td align="center"><strong>3x Sats² Boost</strong></td><td>We're increasing the Sats² multiplier across all assets to 3x for a limited time!<br><br>Deposit and hold any asset on any chain to earn a 3x Sats² multiplier.</td><td></td><td><a href="/files/izJnjH1VRNZzDq0pH2Mn">/files/izJnjH1VRNZzDq0pH2Mn</a></td></tr><tr><td align="center"><strong>Double Sats² for OGs</strong></td><td>As a token of gratitude for the OGs that participated in Epoch 1, we're doubling the Sats² you earned during that period! </td><td>A sincere thank you for believing in us from the earliest days.</td><td><a href="/files/bRGfKXf4KPPWbw3faHlQ">/files/bRGfKXf4KPPWbw3faHlQ</a></td></tr><tr><td align="center"><strong>Referral Bonus</strong></td><td>Turn your network into a multiplier!</td><td><p></p><p><strong>Here’s how it works:</strong></p><ul><li>Share your unique referral link</li><li>When someone deposits BTC, you earn 20% of their Sats²</li></ul><p>More details <a href="/pages/NWatUYDCMRgM4VefT5nV">here</a>.</p></td><td><a href="/files/nDd4JSpMyR1V1YMkiuVG">/files/nDd4JSpMyR1V1YMkiuVG</a></td></tr></tbody></table>

## **TL;DR**

* **4.2 Million SLAY (0.2% of token supply)** allocated for all existing and new depositors during campaign period.
* **3x Sats² Boost** across *all* assets and *all* chains
* Epoch 1 loyalty appreciation: Epoch 1 Sats² balance has been doubled for our OG restakers
* **20% Referral Rewards** for inviting others

## Terms and Conditions

* A minimum deposit of $10 in BTC is required to qualify.
* Self-referrals are prohibited. Transactions suspected of self-referral activity may be reviewed and disqualified from earning any referral Sats² points.
* Campaign starts Aug 2, 2025 at 00:00 UTC and ends 60 days after TGE.
  * Users may withdraw at any time, but early withdrawals will result in a reduced allocation from the 4.2 Million SLAY (0.2% token distribution) pool.
* 3x Sats² Boost multiplier will take effect starting from Aug 2, 2025 00:00 UTC. &#x20;
* Any attempt to exploit, manipulate, or game the system will result in disqualification.&#x20;
* SatLayer reserves the right to adjust rewards, modify eligibility, or terminate the program at its discretion.&#x20;
* By participating, users agree to all terms set by SatLayer and its partners.


# Sats² FAQs

<details>

<summary>How do I earn Sats²?</summary>

You earn Sats² for restaking assets on SatLayer and through other campaigns such as referrals. The longer your assets remain restaked and the earlier you restake the assets, the more Sats² you will earn.&#x20;

</details>

<details>

<summary>What happens if I withdraw my BTC early? </summary>

If you withdraw before the end of the staking period, the counter for Sats² will stop, but your accumulated rewards prior to withdrawal will be accounted.

</details>

<details>

<summary>Are users rewarded Sats<strong>² for depositing assets across multiple chains (e.g. Ethereum, BNB Chain, Berachain and Bitlayer)?</strong></summary>

Sats² are awarded on deposit of every supported asset on every supported chain.

</details>

<details>

<summary>If a user deposits assets before a Snapshot and withdraws after, would they be eligible for Sats<strong>² rewards?</strong></summary>

You will earn Sats**²** as long as your deposit shows up on one or more snapshots.

</details>

<details>

<summary>I deposited BTC after Epoch 1's overfill. Will I be rewarded with Sats²?</summary>

For depositors who deposited BTC assets in Epoch 1 after the overfill, we will be counting and rewarding the Sats² equally. This is an exception as we have decided to make this gesture of goodwill to thank and reward our early supporters.\
\
For future epochs, we will reward less multiplier for the overfills.

</details>

<details>

<summary>What are other possible ways to earn Sats²? </summary>

We will be rolling out side quest epochs and bonus campaigns for users to earn Sats².&#x20;

In the mean time, active community participation such as participating in Discord (through conducive activity/roles), writing content, creating memes and engaging with the SatLayer community are potential ways to earn. For more information, read [Earning Sats²](/depositors/earning-sats).

</details>

<details>

<summary>Is my BTC safe with SatLayer?</summary>

Yes, our deposit contract has went through two independent audits from Zellic and Salus, both of which found no significant issues with the contract. You can find the audits reports on our [Audits](/security/audits) page.

</details>

<details>

<summary>How does SatLayer work with Babylon?</summary>

SatLayer is the designated restaking partner of Babylon. \
\
Babylon is a **Bitcoin staking protocol** and powerful primitive that enables Bitcoin to be used as collateral to secure Proof-of-Stake (PoS) blockchains against *equivocations,* also known as double signing or double spending, when validators sign two separate blocks at the same block height.

While Babylon offers Bitcoin-based protection against validators double signing, it cannot extend slashing capabilities to address other forms of misbehavior due to the limitations of the Bitcoin scripting language.

Hence, SatLayer builds on Babylon’s **slashable safety** guarantees to power its own restaking protocol, which leverages restaked Bitcoin assets as **programmably slashable** collateral for security. By doing so, SatLayer significantly broadens the scope of cryptoeconomic security Bitcoin can offer, unlocking its full potential as a reward-generating asset.\
\
For more information, you can read our [technical blog piece](< https://blog.satlayer.xyz/satlayer-babylon-bitcoin-security-with-restaking/>). <br>

</details>

<details>

<summary>Where can I receive my Babylon Airdrop?</summary>

For users who have staked Bitcoin via liquid staking token (LST) protocols, the airdrop were distributed directly through the respective LST protocols.

This means that users who have staked Bitcoin on BTC LST platforms such as Lombard, Solv, Bedrock, Lorenzo, among others, will be able to claim $BABY through the apps of those specific LST protocols.

Follow their guide to register for your airdrop by creating a BABY wallet address: <https://babylon.foundation/docs/wallet-compatibilities>

</details>

<details>

<summary>Why can't I see my Bedrock points on the Bedrock Dashboard after restaking Berachain and/or BitLayer on SatLayer?</summary>

There is currently a miscalculation of $uniBTC points on the Bedrock airdrop checker, impacting restakers who staked $uniBTC on Bitlayer and Berachain.&#x20;

This is because Bedrock's API doesn't yet support these chains, but we're working with them to manually provide a snapshot of all $uniBTC restakers on Bitlayer and Berachain to ensure the points are updated correctly for Bedrock users.

In any case, $uniBTC restakers on Ethereum should see their points reflected properly. We'll notify everyone once the manual allocation and update are complete.

</details>

<details>

<summary>Why can't I see the LUX I've earned on Lombard Dashboard after restaking on Berachain via SatLayer?</summary>

Lombard is in the process of building out the integration so as of now, you'll be unable to see the LUX you've earned on their dashboard.

Once integration is finished you will be able to see your points at a later date.

</details>

<details>

<summary>Why aren't my Sats² rewards not appearing properly or significantly reduced?</summary>

This is mostly a a leaderboard bug which has already been fixed. Please login again, the error in points should now be corrected.

If you continue to experience this error, please [click here](https://discord.com/channels/1273815030483259392/1288373100429316157) to create a ticket on Discord so we can further investigate your issue.

</details>

<details>

<summary>Why are my Sats² across Sui, Babylon and EVM vaults are not calculated accurately?</summary>

* For restaked $BABY, your Sats² incentives are viewable at [cube.satlayer.xyz](https://cube.satlayer.xyz).
* For EVM vaults, you can check your Sats² rewards by connecting your EVM wallet at [app.satlayer.xyz/dashboard](https://app.satlayer.xyz/dashboard).
* For Sui vaults, rewards are displayed on a separate dashboard. To access them, click "Connect Wallet" on the Dashboard tab and switch to your Sui wallet.

We’re currently building a unified dashboard to consolidate rewards across all chains. In the meantime, rewards will be aggregated at the time of snapshot—so no need to worry about missing out.

</details>

## How to earn XP on Discord

<details>

<summary>What is XP?</summary>

XP are points you can only earn by being active in the SatLayer Discord. They’re used to track your engagement and contributions within the community.

</details>

<details>

<summary>How can I earn XP?</summary>

Here are the main ways you can rack up XP:\
\
**1. Join Sats² Sprint Events**

Every Monday, we post a weekly schedule of events on Discord—ranging from games and activities to AMAs with the team. By participating, you can earn bonus XP ranging anywhere from **100 to 1,000 XP per event.**

#### 2. Share Memes in #memes

Got a good meme? Post it in the **#memes** channel to earn **25 XP per meme.**

{% hint style="info" %}
*\*Make sure the memes are original and not spam. Posting low-effort or stolen content could get your posts removed—or worse, get you kicked from the channel.*
{% endhint %}

#### 3. Chat in the Server

Active, genuine conversations in the community also earn you XP. It’s not a huge amount at once, but if you’re consistently chatting each day, it adds up quickly.

{% hint style="info" %}
*\*Spamming or low-effort “XP farming” messages won’t count—and might get you muted temporarily.*
{% endhint %}

</details>

<details>

<summary>What is XP used for?</summary>

XP feeds directly into the **monthly Sats² Sprint leaderboard.** At the end of the month, the top 10 users with the highest XP scores will win **bonus Sats² rewards.**

So the more you participate, the higher your chances of stacking Sats².\
\
Click here to learn more about **Sats².**

</details>

<details>

<summary>How do I check my current XP and leaderboard ranking?</summary>

You can always check your total XP and current leaderboard position at [**mee6.gg/satlayer**](https://mee6.gg/satlayer).

</details>


# Earning Sats²

Earn Sats² through our SatLayer Rewards Program when you deposit your BTC assets and stay active in the SatLayer community

## Ways to earn Sats²&#x20;

You can earn Sats² through various actions. This is not an exhaustive list and there may be other (secret 🤫) ways and approaches to earn Sats².&#x20;

### 1. Depositing BTC, BABY and SLAY assets <a href="#depositing-assets" id="depositing-assets"></a>

After depositing wrapped BTC and BTC LSTs, not only you are stacking Sats² but also many of our DeFi protocol partners' rewards.

<figure><img src="/files/uIEbxjpJKeg06I6UixQu" alt=""><figcaption><p>For example, depositors of uniBTC recieve not only Sats² but also uniBTC Diamonds <br>and Babylon rewards all through the deposit of a single Bitcoin LST.</p></figcaption></figure>

### 2. Referring friends to SatLayer

Through our Sats² rewards program, users can share a personalized referral link to earn extra Sats². Each referral link is tied to the user, allowing the referrer to earn both fixed and variable Sats² rewards when the referred person completes specific actions, such as following [SatLayer on Twitter](https://x.com/satlayer), joining the [Discord community](https://discord.com/invite/HKQngYyGEk), or [restaking any amount of BTC assets](https://app.satlayer.xyz/vaults/restake?tab=Ethereum).

<figure><img src="/files/z6AeEK9dQWCNZPF16wx0" alt=""><figcaption><p>Referring your friends to SatLayer also earns you Sats².</p></figcaption></figure>

Earn XP by actively participating in our community campaigns and giveaways on Discord. These XP help you to level up and attain roles within Discord.

While earning XP is separate from earning Sats², we distribute various Discord roles to active community users on a frequent basis. These roles may offer hidden multiplier or boost which may boost your Sats² earnings!

## Tracking Sats²

Want to track how many Sats² points you've earned? Depending on where you deposited, follow the steps below:

### **Babylon Genesis vaults**

<figure><img src="/files/Xbeoig569ZEqcwQFzXlq" alt=""><figcaption></figcaption></figure>

* If you deposited via Babylon Genesis, head over to [cube.satlayer.xyz](https://cube.satlayer.xyz/)
* Check the **"Your Positions"** section to view your Sats² points

### EVM vaults

<figure><img src="/files/3tWv6j8wTDSa8jn0PFVn" alt=""><figcaption></figcaption></figure>

* If you deposited via Babylon Genesis, head over to [app.satlayer.xyz/dashboard](https://app.satlayer.xyz/dashboard)
* Connect your **EVM wallet** to view your Sats² points

### Sui vaults

* If you deposited via **Sui**, head over to [app.satlayer.xyz/dashboard](https://app.satlayer.xyz/dashboard)
* Connect your **Sui wallet** to view your Sats² points

{% hint style="success" %}
📸 **Airdrop snapshot**: When it's time for the airdrop, we’ll take a snapshot and sum up your Sats² points across all three dashboards.
{% endhint %}


# Season 1

Season 1 has ended. The reward mechanics and rates described below applied only to Season 1 and are no longer active.

Season 1 officially **launched on** **August 23, 2024, at 00:00 UTC** and **ended on August 11, 2025, at 12:00 UTC**.

{% embed url="<https://www.youtube.com/watch?v=HIsDFSEWLRw>" %}

## Season 1 Mechanics

### Sats² Base Rewards <a href="#sats-base-rewards" id="sats-base-rewards"></a>

* 21,000 Sats² per 1 BTC deposited per day through the [main SatLayer restaking protocol](https://app.satlayer.xyz/)
* 0.021 Sats² for every 1 BABY deposited via [Cube by SatLayer](https://cube.satlayer.xyz/)
* **Minimum threshold**: To qualify, users had to earn at least 1 Sats² per distribution. For example, holding \~0.00005 BTC in restaked tokens daily would generate the minimum 1 Sats² under the base rate.

### **Distribution Schedule**

Rewards were distributed automatically through snapshots that occurred on different schedules depending on the network:

* **EVM networks**: Every 24 hours
* **Sui**: Every 24 hours
* **Babylon Genesis**: Every 24 hours, except for liquidity pool deposits which were taken on a weekly basis
* **BOB**: Weekly, usually on Mondays, covering the prior week

### Reward Multipliers <a href="#sats-c2-b2-bonuses-and-multipliers" id="sats-c2-b2-bonuses-and-multipliers"></a>

Certain BTC assets had different multipliers depending on the epoch and special bonuses.

In Season 1, users could also earn additional multipliers by completing side quests. For example, community members who follow SatLayer on [Twitter](https://x.com/satlayer), actively engage in our [Discord channel](https://discord.com/invite/HKQngYyGEk) and join our [Twitter Spaces](https://x.com/satlayer) might also be rewarded for their contributions. These bonuses reset with each new epoch.


# Season 2

Earn Sats² with the SatLayer Rewards Program by depositing your BTC and SLAY assets and actively participating in ecosystem activities.

<figure><img src="/files/Mi3ySvtn2QA2Uc6Bj5TH" alt=""><figcaption></figcaption></figure>

Welcome to **Season 2** of the **Sats² Rewards Program!**

Season 2 builds on the success of, and learnings from Season 1 with even more ways to maximize your earnings. This season introduces loyalty bonuses, time-weighted multipliers, referral rewards, and campaign-based boosts – all designed to reward long-term commitment and active participation.

Rewards are distributed daily, with final loyalty bonuses applied nearing the end of the season.

{% hint style="info" %}
Learn how to track your Sats² rewards [here](/depositors/earning-sats#tracking-sats).
{% endhint %}

## How Rewards Work <a href="#how-rewards-work" id="how-rewards-work"></a>

It's simple. Earn Sats² by depositing BTC or SLAY on [SatLayer](https://app.satlayer.xyz/vaults/restake), or BABY on [Cube by SatLayer](https://cube.satlayer.xyz/), through one of the many supported blockchain networks.

<div align="center" data-full-width="false"><figure><img src="/files/sfxXT2cXWxy4jjfFHCdo" alt=""><figcaption><p>SatLayer Core App</p></figcaption></figure> <figure><img src="/files/R29JTwyXhxZ7vkkJs39G" alt=""><figcaption><p>Cube by SatLayer</p></figcaption></figure></div>

## Sats² Base Rewards <a href="#sats-base-rewards" id="sats-base-rewards"></a>

Our current rewards mechanics are simple:

* We award 1 Sats² per $10 of BTC, SLAY, or BABY deposited per day
* Rewards are distributed **minimally on a weekly basis**
* Prices of tokens are calculated based on **average market value** of the time period in which the points are distributed for, and applied at distribution

For example, staking 1 BTC LST for 7 consecutive days, assuming Bitcoin is at $110,000 (being the average market value of the said 7-day period) = \~77,000 Sats².

From here, you can unlock Badges, some of which may contain **additional boosts and multipliers** to significantly increase your total rewards.

## Badges

{% hint style="warning" %}
Loyalty Boosts and Badges might not be showing accurately due to a migration in our tracking service provider. Your bonus points will be applied at the end of Season 2 based on the boosts you received.
{% endhint %}

In Season 2, we introduce Badges that showcase your participation and achievements across milestones within the SatLayer ecosystem. Some Badges may award you with special boosts as described in the following sections.

<figure><img src="/files/4y0RlP1uhXmabXJRnzxj" alt=""><figcaption><p>The new SatLayer Dashboard</p></figcaption></figure>

To see all your earned Badges, visit the Badges section on the SatLayer Dashboard with your connected wallet. The current Badges are shown below. We may have special badges awarded throughout Season 2, stay tuned!

<figure><img src="/files/sWWv9VMMKiJqFDzWxjP9" alt=""><figcaption><p>SatLayer Badges</p></figcaption></figure>

## Reward Multipliers <a href="#reward-multipliers" id="reward-multipliers"></a>

### **Loyalty Boosts**

{% hint style="warning" %}
Loyalty Boosts and Badges might not be showing accurately due to a migration in our tracking service provider. Your bonus points will be applied at the end of Season 2 based on the boosts you received.
{% endhint %}

Loyalty Boosts are calculated and awarded at the **end of Season 2**, based on how consistently you maintained your holdings:

| Badge         | Description                                                                               | Boost      |
| ------------- | ----------------------------------------------------------------------------------------- | ---------- |
| BTC Loyalist  | Never withdrew Season 1 balance between Aug 11, 2025 snapshot and Season 2 snapshot.      | 1.5x boost |
| Iron Hands    | Withdrew less than 20% of Season 2 holdings during the campaign.                          | 1.5x boost |
| Diamond Hands | Combined Season 1 + Season 2 streak with less than 20% withdrawals across both snapshots. | 2x boost   |

We may take multiple snapshots throughout Season 2 to compare the total holdings of your restaked assets with us, to determine eligibility. For the "never withdrew" condition, you must not have any unstaking transaction, or token transfers to another wallet address.

You will only get one Loyalty Boost (e.g. 2x boost if you qualify for the Diamond Hands badge), and they can stack with other boosts.

### **Time-Weighted Deposits**

The longer you keep your assets deposited without interruption, the greater your reward multiplier becomes:

| Badge      | Description                                                                               | Boost      |
| ---------- | ----------------------------------------------------------------------------------------- | ---------- |
| Novice     | For holding restaked BTC or SLAY assets for at least 14 consecutive days during Season 2. | 1.1x boost |
| Apprentice | For holding restaked BTC or SLAY assets for at least 30 consecutive days during Season 2. | 1.3x boost |
| Settler    | For holding restaked BTC or SLAY assets for at least 30 consecutive days during Season 2. | 1.6x boost |

You will only get one Time-weighted Deposit Boost (e.g. 1.6x boost if you qualify for the Settler badge), and they can stack with other boosts.

### **Referral Boost**

Turn your network into extra rewards! Invite friends and earn **+20% of their Sats² earnings** on top of your own.

{% hint style="info" %}
Click [here](/depositors/referral-guide) for the Referral Guide, and learn more about how you can refer your friends to SatLayer.
{% endhint %}

You may receive the City Herald badge for referring new users that deposited at least $100 worth of BTC assets into SatLayer, on top of the referral rewards above.

### Campaign-Based Boosts

During active campaigns throughout Season 2, you can unlock additional multipliers based on how you put your assets to work.

**BTC Assets**

| Action                       | Boost |
| ---------------------------- | ----- |
| Holding **satBTC**           | `1x`  |
| Holding **satcBABY**         | `1x`  |
| Deploying **satBTC in DeFi** | `2x`  |

**SLAY Assets**

| Action                                         | Boost                                   |
| ---------------------------------------------- | --------------------------------------- |
| Staking **SLAY**                               | `4x – 6x`  (depending on the campaign)  |
| Providing liquidity in **selected SLAY pools** | `4x – 6x`  (higher risk, higher reward) |

Note: Multipliers are calculated against the daily market value of each token based on various price feeds.

{% hint style="info" %}
See the current [SLAY campaigns](/slay/staking-slay/current-campaigns) and [Sats² campaigns](/depositors/sats-staker-rewards/current-campaigns).
{% endhint %}

## Terms and Conditions

To ensure fairness and protect the integrity of the Season 2 program, the following restrictions apply:

* We may vest the top 1,000 wallet addresses based on the allocation, with details to be provided closer to the end of Season 2.
* Wallet addresses will be screened using various third-party tools, and will be excluded entirely from Season 2 if they belong to any of the following, but not limited to:
  * Wallets listed on official sanctions lists, or prohibited as stated on our [Terms of Service](https://satlayer.xyz/terms-of-service).
  * Wallets identified as sybils or engaging in manipulation of the campaign mechanics.
  * Wallets linked to known on-chain scams.
* We will screen our wallet addresses and may manually review activities to determine actions taken, and source of funds. Any attempt to exploit, manipulate, or game the system will result in disqualification and forfeiture of any rewards allocated.
* We will not allow transfers of rewards for wallet addresses that are hacked (e.g. you lose control over the private keys to your addresses), you can however choose to nullify the rewards allocated so that threat actors cannot claim the rewards. These will be processed based on our standard operating procedures.
* Wallets without active SatLayer restaked BTC, SLAY, or cBABY deposits at the final snapshot date, with a value to be determined closer to the final snapshot.
* SatLayer reserves the right to adjust rewards, modify eligibility, or terminate the program at its discretion.
* By participating, users agree to all terms set by SatLayer and/or its partners where applicable.


# Sats² Sprint

Finish with the top 10 highest XP at the end of the month to earn bonus Sats²

<figure><img src="/files/J5OC1fjCT15PGoVp8pyi" alt=""><figcaption></figcaption></figure>

## Boost your Sats² and stay ahead!

Missed out on earning Sats² because you didn’t restake any BTC, BABY or SLAY? \
\
Don’t worry, our monthly Sats² Sprints are designed for active community members to contribute and earn rewards.&#x20;

Stack Sats² faster with bigger rewards, role-specific boosts, and bonus Sats² for your regional community when you claim the top spot on the leaderboard.

Don’t just restake, sprint your way ahead!&#x20;

## How it works

1. **Earn XP** \
   In the SatLayer Discord, members earn XP by actively participating on the server and engaging with SatLayer community. Read [here](/depositors/sats-staker-rewards/sats-faqs) to learn more about earning XP on Discord.<br>
2. **Climb the Leaderboard to Win Sats²** \
   At the end of each month, the Top 10 Sprinters with the highest XP receives Sats². Track where you rank on our weekly leaderboard update posted in [Discord](https://discord.com/channels/1273815030483259392/1296754561423245343).

<table><thead><tr><th width="187.75">Leaderboard Ranking</th><th width="530.75">Sats² Rewards </th></tr></thead><tbody><tr><td>1st </td><td>5,000 Sats² </td></tr><tr><td>2nd - 3rd</td><td>2,000 Sats² each</td></tr><tr><td>4th - 10th</td><td>1,000 Sats² each</td></tr></tbody></table>

{% hint style="info" %}
Sats² Sprint leaderboard resets monthly, giving everyone a chance to climb the ranks and earn Sats²
{% endhint %}

3. **Use your Discord Role for an extra boost**\
   Sprinters also have a chance to earn exclusive role-specific bonuses for each Sats² Sprint. Role specific bonuses will be announced at the start of each month.<br>

   <table><thead><tr><th width="187.75">Leaderboard Ranking</th><th width="530.75">Role Specific Sats² Bonus</th></tr></thead><tbody><tr><td>1st</td><td>500 Sats²</td></tr><tr><td>2nd - 3rd</td><td>200 Sats² each</td></tr><tr><td>4th - 10th</td><td>100 Sats² each</td></tr></tbody></table>

{% hint style="info" %}
**Example:** If Role-Specific Bonuses are for Overseer Role, then all Overseer Roles in top 10 will receive these additional Sats² bonuses.
{% endhint %}

4. **Sprint for your Region**\
   Secure 1st place on the Sats² Sprint leaderboard to unlock a 500 Sats² bonus for the first 10 people with your Region Role.

{% hint style="info" %}
**Example**: If the 1st place winner at the end of the the Sats² Sprint is from Japan, then the first 10 members with the @Japanese role can claim the Sats² bonus.
{% endhint %}

## Sats² Sprint Weekly Calendar

<figure><img src="/files/0VUP8t8YDC7gDI4RH3ao" alt=""><figcaption><p>Example of our Sats² Sprint Weekly Calendar</p></figcaption></figure>

Starting this Season 2, we’re rolling out a weekly calendar every Monday so you’ll always know what events, drops, and perks are coming your way.&#x20;

Keep an eye out on our [Discord](https://discord.com/channels/1273815030483259392/1296754561423245343) as each event is a chance to earn XP, secure rewards, and unlock exclusive bonuses.

### What to Expect:

**1. Region Role Exclusive Events**\
Join special competitions and activities hosted for your Region Role. Rally your local SatLayer community, boost your XP, and climb the leaderboard together. \
\
&#x32;**. Seasonal Sprint Events**\
Watch out for limited-time Sprint events tied to holidays like Halloween and Christmas. These special events bring surprise rewards and extra chances to boost your XP.\
\
**3. AMAs**\
We hear you SatFam. AMAs are coming to Discord to keep you updated and answer any burning questions you may have. Earn bonus XP for attending and participating during the AMA!\
\
&#x34;**. Partner Perks**\
Surprise rewards from SatLayer and our partners — ranging from XP boosts to token drops and limited bonuses.<br>

## Start Sats² Sprinting now!

1. Join the [SatLayer Discord](https://discord.com/invite/HKQngYyGEk) channel
2. Verify and get the **Disciple** role
3. Earn XP by participating in our community events!


# Referral Guide

Through our Sats² rewards program, users can share a personalized invite link to earn extra Sats². Each invite link is tied to the user's wallet address, allowing the referrer to earn both fixed and variable Sats² rewards when the referred person completes specific actions.

### How do I refer someone to SatLayer?

You can create an invite link in the [Dashboard](mailto:undefined) tab by clicking on the Copy icon under Referral Program.

<figure><img src="/files/GY7gMuMzTf4GNtAA0oeL" alt=""><figcaption><p>SatLayer Dashboard</p></figcaption></figure>

<figure><img src="/files/ZrRBFRP9twMvqvMaD7qJ" alt=""><figcaption><p>Invite Link</p></figcaption></figure>

You may be required to sign a message to retrieve your invite link, this will not cost any transaction fee. The message will look similar to the following:

```
I confirm that I am creating the 7ed0faf2-5391-437c-9595-25784fd3c114 code on Fuul
```

### Sharing invite links&#x20;

You can share your unique invite link with friends to earn additional Sats².

Both the referrer (the user sharing the invite link) and the referee (the user staking and participating in SatLayer through the referrer's invite link) will receive extra Sats² rewards.

* When someone clicks your invite link and restakes any BTC assets, you’ll earn a one-time reward of 500 Sats², while your friend will receive a one-time 300 Sats².
* Additionally, the inviter will receive 20% of the referred user's Sats² rewards. The more BTC assets your friend (the referee) restakes on SatLayer, the more Sats² you’ll earn.

Invite links are active on Ethereum, BNB Chain and Berachain.&#x20;

{% hint style="info" %}
Bitlayer and Sui are currently not yet supported, but we are working on integrating it soon.  Referring friends to stake BABY are not supported yet.&#x20;
{% endhint %}

### Reviewing referral earning history

{% hint style="success" %}
Our reward history captures a snapshot of your restaked BTC holdings and your referee’s holdings on the platform once a week (every 7 days, distributed on Sunday). Currently, it displays only up to the most recent 25 transactions.
{% endhint %}

You can find an overview of the Sats² rewards you earned from referrals on the [Dashboard](https://app.satlayer.xyz/dashboard) under **Reward History**.

<figure><img src="/files/hgIbHQreaUdvItEdTYUC" alt=""><figcaption></figcaption></figure>

### Terms and conditions

* All referral rewards will be distributed in Sats² points, which can be used in future SatLayer ecosystem programs.
* It is your responsibility to ensure you have access to the same wallet address used and are able to access such tokens even if you participated on a different blockchain network.
* Self-referrals are prohibited. Transactions suspected of self-referral activity may be reviewed and disqualified from earning any referral Sats² points.
* Any attempt to exploit vulnerabilities, engage in fraudulent activity, or manipulate the system will result in disqualification and points may be removed from all associated accounts.
* By participating, users agree to comply with all applicable terms set forth by SatLayer and our partner.


# Getting Started

In this guide, we will guide verified operators through how to setup and manage your operator status using our command-line interface (CLI).  You’ll learn how to connect your wallet, interact with SatLayer contracts, and verify your status on our Devnet block explorer.

To become verified, check out the [Apply as Operator](/operators/apply-as-an-operator) section.  Once you’re verified, you’ll gain access to the [SatLayer CLI](/bvs-developers-1/developer-toolbox/satlayer-cli) tool as well as direct support from our Solutions Engineers.&#x20;

## Wallet Setup and Devnet Tokens

To start your journey as an operator, be sure to setup your wallets by following [Operator Wallet Setup](/operators/operator-wallet-setup).  Also, don't forget to grab [Devnet Tokens](/bvs-developers-1/devnet-and-explorer#faucet-info) from our faucet for contract execution fees.

## Creating a Vault

Use the following commands to register your address as an operator to both the delegation manager and the BVS directory. This enables the address to a) be accepted by a BVS as an operator and b) allows acceptance of delegation of stakes from stakers.

### Setup your Approver

```bash
satlayer-cli delegation reg-operator my-operator <address-of-approver>
```

This sets the approver address for your operator.  The approver is an address that serves as a gatekeeper. it signs and approves stakers staking into the operator. It must not be the same address as the operator. But can be owned by the same group of people owning the operator. For example, in an hypothetical corporation, the IT department may own the operator address while the accounting department owns the approver.

### Register your operator

This registers your operator to complete the process. &#x20;

```
satlayer-cli directory reg-operator my-operator
```

Both commands are required to complete the registration process. Upon successful execution, each command will print the transaction hash to the console. For example:

```bash
❯ satlayer-cli delegation reg-operator my-operator bbn1ps2tyw6u8693qmvd07akcafyjz579lc2h7apzp
Delegation Register operator success. txn: 910DE039C1046B759CEB73868F11D94211D4FF4787E6AF2D08B83A4E4DA9E715

❯ satlayer-cli directory reg-operator my-operator
Register operator success. txn: 0EF0DB40ED3A5E22209432E1388371D4889AE72B17C5419E3F8E4E63D2D2C576
```

## Verify Your Registration

These transaction hashes can be checked in our block explorer to confirm successful registration. For instance, [this link](https://devnet.satlayer.xyz/satlayer-babylon-testnet/tx/910DE039C1046B759CEB73868F11D94211D4FF4787E6AF2D08B83A4E4DA9E715) takes you to a the page showing detailed information regarding the first transaction.

<div data-full-width="true"><figure><img src="/files/YOs33okpr7s9LASxawqv" alt=""><figcaption></figcaption></figure></div>

## **De-registering as an Operator**

If you decide to remove your account from operator status, you can de-register using the CLI:

```bash
satlayer-cli delegation dereg-operator my-operator
```

This action will revoke your operator status.  Any staked assets remain secured and unaffected. &#x20;


# Apply as an Operator

Learn more about how you can become a node operator on the SatLayer network

Our operator partners are extremely important as you play a crucial role in safeguarding our users’ assets. We know that this collaboration will take valuable time and resources from your team, so we're here to make this work and are committed to making this process as smooth and simple as possible.

The SatLayer team is excited to collaborate and support you as an Operator into our ecosystem!

If you are interested to run node operators on the SatLayer network, please apply as an Operator via the form below and we’ll get back to you the soonest we can.

{% embed url="<https://survey.typeform.com/to/uUQij45g>" %}


# Apply as a Developer

Learn more about how you can build applications and infrastructure with Bitcoin shared security and liquidity

At SatLayer, expanding our Bitcoin Validated Services ecosystem is a top priority, and we’re thrilled to collaborate with skilled builders like you. We’re eager to connect with developers from diverse backgrounds who are ready to create something exceptional with Bitcoin shared security and liquidity.

Our ideal partners should be startup operators with strong technical skills, go-to-market expertise, and a track record in venture-backed projects. Given our startup nature and limited resources, we can only onboard a select number of BVS teams—but for those who join us, the potential is enormous! 🔥

If you are interested to build Bitcoin Validated Services on the SatLayer network, please apply as a BVS developer via the form below and we’ll get back to you the soonest we can!

{% embed url="<https://survey.typeform.com/to/VGONzQV4>" %}


# Operator Onboarding

This page describes how to create an operator, register it in SatLayer, and create a vault on SatLayer testnet. SatLayer's testnet exists as a set of smart contracts on top of Babylon's own [testnet](https://testnet.babylon.explorers.guru/) `bbn-test-5`. \
\
In order to onboard onto SatLayer testnet, operators have to complete the following steps:\
\
1\) Generate an address via a wallet app such as Keplr.

2\) Instantiate your address as a signer.&#x20;

<pre class="language-typescript"><code class="lang-typescript"><strong>const chainId = "bbn-test-5";
</strong>const endpoint = "https://babylon-testnet-rpc.nodes.guru";

import { GasPrice } from "@cosmjs/stargate";
import { SigningCosmWasmClient } from "@cosmjs/cosmwasm-stargate";
import { DirectSecp256k1HdWallet } from "@cosmjs/proto-signing";
import { stringToPath } from "@cosmjs/crypto";

const gasPrice = GasPrice.fromString("0.002000ubbn");

// create signer object using mnemonic phrase you created in Keplr
const signer = await DirectSecp256k1HdWallet.fromMnemonic("[YOUR MNEMONIC PHRASE]", {
  prefix: "bbn",
});

const client = await SigningCosmWasmClient.connectWithSigner(endpoint, signer, { gasPrice });
</code></pre>

3\) Register your operator in the `bvs-registry`.&#x20;

<pre class="language-typescript"><code class="lang-typescript"><strong>const registry = "bbn1a9tleevqygn862ll2la49g637fjttfzzlttdrmmua35fadpuvnksuyud7a";
</strong><strong>
</strong>const executeMsg = {
    register_as_operator: {
        metadata: {
            name: "[YOUR OPERATOR NAME]",
            uri: "[YOUR OPERATOR URI]"
        }
    }
};

await client.execute("[YOUR OPERATOR ADDRESS]", registry, executeMsg, "auto");
</code></pre>

4\) Create a `Vault` to start accepting collateral. `Vaults`can be configured to accept either `cw20`or `bank`module tokens.

**CW20:**

```typescript
const factory = "bbn1tnpg0hs099tpmaavzjzx02kvf7lcqhwmkrp0spg30aejmfydxnkqfzwdyx";

const executeMsg = {
    deploy_cw20: {
        cw20: "[YOUR CW20 ADDRESS]"
    }
};

const response = await client.execute("[YOUR OPERATOR ADDRESS]", factory, executeMsg, "auto");
```

Where the `cw20`argument is the address of the cw20 token that you wish to accept as collateral.

**Bank Module:**

<pre class="language-typescript"><code class="lang-typescript">const factory = "bbn1tnpg0hs099tpmaavzjzx02kvf7lcqhwmkrp0spg30aejmfydxnkqfzwdyx";

const executeMsg = {
    deploy_bank: {
        denom: "[YOUR BANK DENOM]"
    }
};

<strong>const response = await client.execute("[YOUR OPERATOR ADDRESS]", factory, executeMsg, "auto");
</strong></code></pre>

Where the `denom`argument is the `denom`of the `x/bank`module token which you wish to accept as collateral.&#x20;

5\) Whitelist your vault in the `router`&#x20;

<pre class="language-typescript"><code class="lang-typescript">const router = "bbn1tztx8vkgw24rm5f6ny52qyt6kpg7gyfd5nggvfgjjfj8n7ggkx7qfhvdum";

const executeMsg = {
<strong>  set_vault: {
</strong>    vault: "[YOUR VAULT ADDRESS]",
    whitelisted: true,
  }    
};

await client.execute("[YOUR OPERATOR ADDRESS]", router, executeMsg, "auto");
</code></pre>

After completing these steps, you will have created an `operator`and a `vault`, linked them together, and whitelisted this `vault`in the router. The final step to get set up on testnet is to identify a Bitcoin Validated Service (BVS) you wish to validate and register to validate it.

6\) Register services you want to validate to your `operator`. First you need to identify the address of the service in SatLayer. This address represents the BVS'es on-chain footprint.&#x20;

<pre class="language-typescript"><code class="lang-typescript"><strong>const executeMsg = {
</strong>    register_service_to_operator: {
        service: "[SERVICE ADDRESS]"
    }
}

await client.execute("[YOUR OPERATOR ADDRESS]", registry, executeMsg, "auto");
</code></pre>


# BVS Onboarding

This page describes how to create a BVS, and register it in SatLayer to an operator for it to be validated. You can participate even now  You can experiment with this functionality on SatLayer's testnet now. SatLayer's testnet exists as a set of smart contracts on top of Babylon's own testnet.

The following guide will take you through the process of creating a BVS address, registering it in SatLayer, and registering an operator to validate it.

1\) Generate an address via a wallet app such as Keplr.

2\) Instantiate your address as a signer

```typescript
const chainId = "bbn-test-5";
const endpoint = "https://babylon-testnet-rpc.nodes.guru";

import { GasPrice } from "@cosmjs/stargate";
import { SigningCosmWasmClient } from "@cosmjs/cosmwasm-stargate";
import { DirectSecp256k1HdWallet } from "@cosmjs/proto-signing";
import { stringToPath } from "@cosmjs/crypto";

const gasPrice = GasPrice.fromString("0.002000ubbn");

// create signer object using mnemonic phrase you created in Keplr
const signer = await DirectSecp256k1HdWallet.fromMnemonic("[YOUR MNEMONIC PHRASE]", {
  prefix: "bbn",
});

const client = await SigningCosmWasmClient.connectWithSigner(endpoint, signer, { gasPrice });
```

3\) Register your service in the registry

<pre class="language-typescript"><code class="lang-typescript"><strong>const registry = "bbn1a9tleevqygn862ll2la49g637fjttfzzlttdrmmua35fadpuvnksuyud7a";
</strong><strong>
</strong>const executeMsg = {
    register_as_service: {
        metadata: {
            name: "[YOUR SERVICE NAME]",
            uri: "[YOUR SERVICE URI]"
        }
    }
};

await client.execute("[YOUR SERVICE ADDRESS]", registry, executeMsg, "auto");
</code></pre>

4\) Link your service to an operator to enable that operator to begin validating your service (the operator will need to [link to your service](/satlayer-testnet/operator-onboarding) as well).&#x20;

```typescript
const executeMsg = {
    register_operator_to_service: {
        operator: "[OPERATOR ADDRESS]"
    }
}

await client.execute("[YOUR SERVICE ADDRESS]", registry, executeMsg, "auto");
```

5\) Once your BVS is registered, you can reward registered operators and their stakers using the methodology described [here](/protocol-rewards).&#x20;


# Developer Toolbox

Here we document how SatLayer works in detail - to bring SatLayer from the realms of magic into the world of physics. so to speak. Expect command lines, diagrams and code. &#x20;


# SatLayer CLI

The SatLayer CLI tool allows developers to deploy, update and query BVS. It is an useful tool during development and avoids the complication of interacting with BVS/SatLayer's core contracts using the raw `babylond` command.&#x20;

The SatLayer CLI tool is constructed on top of the ChainIO library, with just a minimal layer of code for handling user inputs. Everything the CLI can accomplish is also possible with [ChainIO](/bvs-developers-1/developer-toolbox/satlayer-cli/chainio).

## Installing SatLayer CLI

The SatLayer CLI is written in the Go programming language. Hence the Go compiler is needed in order to build the CLI tool. Methods to install golang differ depending on the operating system you are using. Generally, please follow the instructions on the [Golang install page](https://go.dev/doc/install) to install the Go compiler.&#x20;

For Linux users, follow the installation instructions according to the distribution you are using. For Ubuntu and other Debian-based system, run:

```bash
sudo apt-get install golang-go
```

For Arch based systems, run:

```bash
sudo pacman -S go
```

For Fedora and other RHEL based systems, run:

```bash
sudo dnf install golang
```

With the Golang compiler installed, run the following to build the SatLayer CLI.

```bash
git clone https://github.com/satlayer/devnet-satlayer-cli
cd devnet-satlayer-cli

# Modify go.mod to as satlayer-api is not public yet (will be!)
echo "\nreplace github.com/satlayer/satlayer-api v0.3.0 => /path/to/your/clone/of/devnet-satlayer-api" >> go.mod
go build
```

By default the `satlayer-cli` uses the `os` keyring backend. This allows key sharing between the Babylon command line and `satlayer-cli`. Enabling seamless inter-operation. Please refer to [Cosmos's Keyring document](https://docs.cosmos.network/v0.46/run-node/keyring.html) for details.

### Installation

`satlayer-cli` can be installed by running `go install`. This installs the built result into golang's default installation directory.&#x20;

```bash
go install
```

This installs to `$HOME/go/bin`. Please make sure to have this path added to your [PATH environment variable.](https://en.wikipedia.org/wiki/PATH_\(variable\))  Please make sure the directory is in your system's `PATH` environment variable. For UNIX users (Linux, MacOS, etc..)

```bash
# ~/.bashrc or ~/.zshrc
export PATH=$HOME/go/bin:$PATH
```

Then `source` your shell rc scrip or start a new shell to active it.

```bash
source ~/.bashrc
# or
source ~/.zshrc
```

On Windows or UNIX with PowerShell you should edit the `$profile` file (run `echo $profile` in PowerShell to acquire the file path) and append the following.

```powershell
# Edit $profile
$env:Path = $env:UserProfile+[IO.Path]::PathSeparator+"go"+[IO.Path]::PathSeparator+"bin;"+$env:Path
```

Close and start a new PowerShell session to activate the change.

### Configuration

By default the configuration file is stored in `$HOME/.config/satlayer/config.toml`(or `%USERPROFILE%\.config\satlayer\config.toml` on Windows). You can set the `SATLAYER_CONFIG` environment variable to change where the configuration is loaded from. There is no need to set this variable if you wish to use the default configuration file path.

On \*NIX (Linux, MacOS, etc..), assuming a BASH or DASH compatible shell:

```bash
# Demo command. the ... at the end is the rest of the command you wish to run
SATLAYER_CONFIG=/path/to/your/config.toml ./satlayer-cli ...
```

On Windows, or using PowerShell on \*NIX, remember to `Remove-Item` afterwards as PowerShell does not support temporary variables.

```powershell
# Demo command. the ... at the end is the rest of the command you wish to run
$env:SATLAYER_CONFIG = "C:\path\to\your\config.toml"; ./satlayer-cli ...
Remove-Item env\SATLAYER_CONFIG
```

## Command Structure

The SatLayer CLI is a monolithic program (in opposite to how most classic UNIX commands) with layered sub-commands.&#x20;

Commands are in the format of the following.&#x20;

* Subcommands could be layered and flags follows the UNIX convention. A double dash (`--`) is used for long names and a single dash (`-`) is used for short, single character flags and options. &#x20;

```bash
./satlayer-cli [subcommand 1 [subcommand 2 [subcommand 3] ...]] [-f --flags]  
```

#### Notation conversion

We follow the convention of what is used by most GNU and BSD commands:

* Optional parameters are enclosed in `[square-brackets]`
* Required parameters are free-formed `without-any-decoration`
* Template/string expected to be provided by user is in `<angle-brackets>`
* Flags/options can be followed by zero or more parameters. For example
  * `-v` in a flag with no parameters
  * `-f <path-to-file>`is an option that accepts a parameter
  * `-c <files>...` indicates it accepts multiple parameters

For example, `my-command read -f <path-to-file> [-v]` indicates:

* The command name is `my-command`
* The subcommand is `read` and is mandatory
* The `-f` option is required and it is followed by a path to a file
* And the `-v` option is optional without any parameter following it.

## Built-in help

Every command and sub-commands of the SatLayer CLI includes built-in help message for quick access.&#x20;

They can be displayed by either running the `help` subcommand or via the `--help` or `-h` flag. They generally follow the same notation used in this document.&#x20;

For example:

```bash
❯ ./satlayer-cli chain -h
Chain related commands

Usage:
  satlayer chain [command]

Available Commands:
  get-account To query the account.
  get-node    To query the node status info.
  get-txn     To query the transaction.

Flags:
  -h, --help   help for chain
```

## Common parameters

The `user-key-name` parameter is very common among commands. To reduce the amount of text in the document. The option will not be described in each command documentation. `user-key-name` is a mandatory parameter that specifies which key in the keyring is used to invoke a contract.&#x20;


# (BVS) Directory

The `directory` subcommand houses commands that interacts with the BVS Directory contract to simplify BVS registration, management and other operations.&#x20;

### reg-bvs

The `reg-bvs` command registers your BVS to the SatLayer BVS directory. The format is

```
satlayer-cli directory bvs-reg <bvs-address>
```

In which:

* **bvs-address** - the address of your BVS contract

### reg-operator

Registers an account as an operator to the BVS Directory.

```
satlayer-cli directory reg-operator <operator-key-name>
```

In which:

* **operator-key-name** - the key to be registered as an operator.

### **dereg-operator**

Deregister an operator from the BVS Directory.

```
satalyer-cli directory dereg-operator <operator-key-name>
```

In which:

* (optional) **operator-key** - the key to be unregistered as an operator.&#x20;

### **update-metadata**

Updates the URI of the BVS.

```
satlayer-cli directory update-metadata <user-key-name> <metadata-uri>
```

In which:

* **user-key-name** - the name of the key in the keyring to use for contract execution
* **metadata-uri** - an URI that will be broadcasted as an event.

### cancel-salt

Cancels a salt of the BVS specified in the configuration file

```
satlayer-cli directory cancel-salt <user-key-name> <salt>
```

In which:

* **user-key-name** - the name of the key in the keyring to use for contract execution
* **salt** - the salt (raw text, not the hash of the salt)

### **transfer-owner**

Transfers the owner of the BVS Directory, specified in the configuration file, to another account.

```
satlayer-cli directory transfer-owner <user-key-name> <owner-address>
```

In which:

* **user-key-name** - the name of the key in the keyring to use for contract execution
* **owner-address - the** address of the new owner

### pause

Pause the BVS, specified in the configuration file

```
satlayer-cli directory pause <user-key-name>
```

In which:

* **user-key-name** - the name of the key in the keyring to use for contract execution

### unpause

Resume the BVS, specified in the configuration file

```
satlayer-cli directory unpause <user-key-name>
```

In which:

* **user-key-name** - the name of the key in the keyring to use for contract execution

### **set-pauser**

Set the address that is allowed to pause the BVS Directory

```
satlayer-cli directory set-pauser <user-key-name> <address>
```

#### In which:

* **user-key-name** - the name of the key in the keyring to use for contract execution
* **address** - the address of the account to become the pauser

### **set-unpauser**

Set the address that is allowed to unpause the BVS Directory

```
satlayer-cli directory set-unpauser <user-key-name> <address>
```

#### In which:

* **user-key-name** - the name of the key in the keyring to use for contract execution
* **address** - the address of the account to become the unpauser

### **get-operator**

Checks if an address is registered as an operator

```
satlayer-cli directory get-operator <address>
```

In which:

* **address** - the address to be checked if is an operator

### **calc-digesthash**

Computes a hash for an BVS, given a salt and expiration. Used as a part of creating a signature with expiration.

```
satlayer-cli directory calc-digesthash <address> <salt> <exipry>
```

In which:

* **address** - the address of the BVS
* **salt** - a string
* **expiry** - UNIX timestamp of the expiration time

{% hint style="info" %}
SatLayer is tracking time with (unsigned) 64bit integers. There's no need to worry about the 2038 problem
{% endhint %}

### is-salt-spent

The `is-salt-spent` command checks if a salt is already used in BVS operation.

```
satalyer-cli directory is-salt-spent <bvs-address> <salt>
```

In which:

* **bvs-address** - the address of your BVS contract
* **salt** - the salt (raw text, not the hash of the salt!)

Results in:

* Prints `true` if salt is spent. Else prints `false`.

For example:

```
❯ satlayer-cli directory is-salt-spent osmo1ltgcuacn8chffqzklag9a9wg0catqpuq8fd9wk salt
false
```

### get-delegationmanager

Queries the address of the delegation manager contract:

```
satlayer-cli directory get-delegationmanager
```

### get-owner

Queries the address of the owner of the BVS, specified in the configuration file

```
satlayer-cli directory get-owner
```

### get-domain-name

Queries domain of the BVS Driver contract (not the metadata URL!)

```
satlayer directory get-domain-name
```

### get-bvsinfo

Queries generic on-chain information of a BVS

```
satlayer directory get-bvsinfo <bvs-hash>
```

In which:

* **bvs-hash** - the hash of the BVS (Not the BVS contract!)


# Delegation

The `delegation` subcommand simplifies the process to delegate and undelegate tokens.

### reg-operator

Registers an operator to the delegation manager that it is ready to receive delegation.

```
satlayer-cli delegation reg-operator <operator-key-name> [<approver-address>]
```

In which:

* **operator-key-name** - the name of the key (in the key storage specified in the configuration) of the operator
* **approver-address(optional)** - the address of the approver wallet. It's an optional address.

### update-operator-details

Updates on-chain delegation information of the operator

```
satlayer-cli delegation update-operator-details <user-key-name> <deprecated-earnings-receiver> <delegation-approver> <staker-optout-window-blocks> 
```

In which:

* **user-key-name**- the name of the key in the keyring to use for contract execution
* **deprecated-earnings-receiver** - the address that receives the tokens if operator left before reward distribution
* **delegation-approver(optional)** - the address of the approver contract. It's optional that can bet set 0.
* &#x20;**staker-optout-window-blocks** - the number of block between staker opting out and opting-out finishes

### update-operator-metadatauri

Updates the metadata URI

```
satlayer-cli delegation update-operator-metadatauri <user-key-name> <uri>
```

In which:

* **user-key-name** - the name of the key in the keyring to use for contract execution
* **uri** - the new URI to be broadcasted on-chain for operator metadata

This function must be invoked with the default address in the configuration to be the operator itself.

### delegate-to

Delegate to an operator

```
satlayer-cli delegation delegate-to <staker-key-name> <operator-address> <approver-key-name>
```

In which:

* **staker-key-name** - the name of the key (in the key storage specified in the configuration) of the staker to stake it's assets
* **operator-address**- the operator to delegate to
* **approver-key-name** - the name of the key (in the key storage specified in the configuration) of the approver

### undelegate

Undelegate from an operator

```
satlayer-cli delegation undelegate <staker-key-name> <operator-address>
```

* **staker-key-name** - the name of the key (in the key storage specified in the configuration) of the staker to stake it's assets
* **operator-address** - the operator to delegate to

### is-delegated

Query if an address have already delegated it's assets to an operator

```
satlayer-cli delegation is-delegated <address>
```

In which:

* **address** - the address of which to be checked

### is-operator

Queries if an operator has registered for accepting delegation

```
satlayer-cli delegation is-operator <address>
```

In which:

* **address** - the address of the operator to be queried

### get-operator-details

Query the information set by `update-operator-details`.&#x20;

```
satlayer-cli delegation get-operator-detail <address>
```

In which

* **address** - the address of the operator to be queried

### get-delegation-approver

Queries the delegation approver address of an operator

```
satlayer-cli delegation get-delegation-approver <address>
```

In which:

* **address** - the address of the operator to be queried

### get-staker-optoutwindowblocks

Queries how many block has to pass before opting out finishes for an operator. This information is also available in `get-delegation-approver`.

```
satlayer-cli delegation get-staker-optoutwindowblocks <address>
```

In which:

* **address** - the address of the operator to be queried

### get-operator-shares

Query the amount of shares of a strategy an operator has.

```
satlayer-cli delegation get-operator-shares <operator-address> <strategy>
```

In which

* **operator-address** - the address of the operator to be queried
* **strategy** - address of the strategy we are concerned about

### get-delegatable-shares

Query the amount of shares that can be delegated to an operator

```
satlayer-cli delegation get-delegatable-shares <address>
```

In which:

* **address** - the address of the operator to be concerned about

### get-withdraw-delay

Query the withdraw delay of a strategy

```
satlayer delegation get-withdraw-delay <strategy>
```

In which:

* **strategy** - address of the strategy we are concerned about&#x20;


# Strategy

The `strategy` subcommand handles operations regarding a strategy. Most users should not need access to these commands as they directly control a strategy.

### transfer-owner

Transfer the owner of the strategy contract, specified in the configuration file

```
satlayer-cli strategy transfer-owner <user-key-name> <new-owner-address>
```

In which:

* **user-key-name** - name of the key in the keyring to use for contract execution
* **new-owner-address** - address of the new owner of the strategy

### set-delegation-manager

Set the delegation manager interacting with the strategy contract

```
satlayer-cli strategy set-delegation-manager <user-key-name> <delegation-manager-address>
```

In which:

* **user-key-name** - name of the key in the keyring to use for contract execution
* **delegation-manager-address** - address of the delegation manager

### set-strategy-whitelist

Sets the account to the list of accounts that is allowed to add strategy to the strategy whitelist.

```
satlayer-cli strategy set-strategy-whitelist <user-key-name> <address>
```

* **user-key-name** - name of the key in the keyring to use for contract execution
* **address** - the address to be allowed to add strategy to the strategy whitelist

### remove-strategy-from-whitelist

Removes a strategy from the strategy whitelist.

```
satlayer-cli strategy remove-strategy-from-whitelist <user-key-name> <strategy-address>
```

In which:

* **user-key-name** - name of the key in the keyring to use for contract execution
* **strategy-address** - address of the strategy contract to be removed

### add-strategy-to-whitelist

Add a strategy to the strategy whitelist

```
satlayer-cli strategy add-strategy-towhitelist <user-key-name> <strategy-address> <disallow-3rd-party>
```

In which:

* **user-key-name** - name of the key in the keyring to use for contract execution
* **strategy-address** - the address of the strategy contract to be added
* **disallow-3rd-party** - boolean, `true` or `false`. If 3rd party transfers are allowed

### set-third-transfer-forbidden

Set if 3rd party transfers are disallowed for a strategy

```
satlayer-cli strategy set-third-transfer-forbidden <user-key-name> <strategy-address> <disallow-3rd-party>
```

In which:

* **user-key-name** - name of the key in the keyring to use for contract execution
* **strategy-address** - the address of the strategy contract to be added
* **disallow-3rd-party** - boolean, `true` or `false`. If 3rd party transfers are allowed

### deposit-strategy

Deposit into the strategy from the wallet address set in the configuration file

```
satlayer-cli strategy deposit-strategy <user-key-name> <strategy-addresss> <token-address> <amount>
```

In which:

* **user-key-name** - name of the key in the keyring to use for contract execution
* **strategy-address** - the address of the strategy contract to be added
* **token-address** - the address of the CW20 token
* **amount** - the amount to be deposited

### get-deposits

Query a staker's deposit information regarding a strategy

```
satlayer-cli strategy get-deposits <staker-address> <strategy-adress>
```

In which:

* **staker-address** - the address of the staker  you are querying
* **strategy-address** - the address of the strategy

### get-staker-strategy-list-length

Queries how many strategy a staker has staked into

```
satlayer-cli strategy get-staker-strategy-list-length <staker>
```

In which:

* **staker-address** - the address of the staker you are querying

### get-staker-strategy-shares

Query how many shares a staker owns given a strategy

```
satlayer-cli strategy get-staker-strategy-shares <staker-address> <strategy-adress>
```

In which:

* **staker-address** - the address of the staker you are querying
* **strategy-address** - the address of the strategy

### is-third-transfer-forbidden

Queries if 3rd perty transfer is disallowed (set by `set-third-transfer-forbidden`).&#x20;

```
satlayer-cli strategy is-third-transfer-forbidden <strategy-address>
```

In which:

* **strategy-address** - the address of the strategy

### get-staker-strategy-list

Queries the list of strategy a staker has staked into

```
satlayer-cli strategy get-staker-strategy-list-length <staker>
```

In which:

* **staker-address** - the address of the staker you are querying

### get-owner

Queries the owner of the strategy, set in the configuration file.

```
satlayer-cli strategy get-owner
```

### is-strategy-whitelisted

Query is a strategy is whitelisted

```
satlayer-cli strategy is-strategy-whitelisted <strategy-address>
```

In which:

* **strategy-address -** The address of the strategy


# Strategy Base

The `strategy-base` subcommand handles operations regarding a strategy base. Most users should not need access to these commands as they directly control the strategy-base.

### deposit

Deposits into the strategy base, specified in the configuration file

```
satlayer-cli strategy-base deposit <user-key-name> <amount>
```

In which:

* **user-key-name** - the name of the key in the keyring to use for contract execution
* **amount** - the amount to deposit

### withdraw

Withdraw from strategy base

```
satlayer-cli strategy-base withdraw <user-key-name> <receipient> <amount-share>
```

In which:

* **user-key-name** - the name of the key in the keyring to use for contract execution
* **receipient** - the recevier address
* **amount-share** - the amount (in shares) to withdraw

### get-shares

Query the amount of shares a staker owns in a strategy

```
satlayer-cli strategy-base get-shares <staker-address> <strategy-address>
```

In which:

* **staker-address** - the address of the staker you are querying
* **strategy-address** - address of the strategy contract

### underlying-token

Queries the underlying CW20 token address of the configured strategy base

```
satlayer-cli strategy-base underlying-token
```

### transfer-owner

transfer the strategy base contract owner to new address

```
satlayer-cli strategy-base transfer-owner <user-key-name> <new-owner-address>
```

In which:

* **user-key-name** - the name of the key in the keyring to use for contract execution
* **new-owner-address** - the address of the new owner


# ChainIO

The `chain` subcommand allows quick access to ChainIO's functionality, without writing a single line of code. Useful for debugging. These command are quite low level and thus can be done with the Babylon CLI too. We provide the functionality nevertheless since our syntax is easier on the eye.

### get-node

Queries the current RPC node status

```
satlayer-cli chain get-node
```

### get-txn

Query transaction details.

{% hint style="info" %}
Depending on the RPC node configured this command MAY return error or not finding a past transaction. Non-archiving Babylon nodes will truncate transaction history to reduce pressure on their storage.
{% endhint %}

```
satlayer-cli chain get-txn <txn-hash>
```

### get-account

Queries the an account's information

```
satlayer-cli chain get-account <address>
```

In which:

* **address** - the address of the account to be queried


# Strategy Base TVL

The strategy-base-tvl subcommand allows interaction wit the strategy-base-tvl contracts.

### underlying-token

Query the underlying token

```
satlayer-cli strategy-base-tvl underlying-token
```

### transfer-owner

Transfers the ownership of the Strategy Base TVL contract, set in the configuration file, to a new address.

```
satlayer-cli strategy-base-tvl transfer-owner <user-key-name> <new-owner-address>
```

In which:

* **user-key-name** - name of the key in the keyring to use for contract execution
* **new-owner-address** - address of the new owen

### set-tvl-limits

Set the maximum amount of single and total deposit into a strategy

```
satlayer-cli strategy-base-tvl set-tvl-limits <user-key-name> <max-per-deposit> <max-total-deposit>
```

In which:

* **user-key-name** - name of the key in the keyring to use for contract execution
* **max-per-deposit** - maximum amount allowed per deposit &#x20;
* **max-total-deposit** - maximum amount allowed across the entire strategy


# Strategy Factory

The `strategy-factory` subcommand allows interaction with the Strategy Factory contract.

### create-strategy

Create a new strategy

```
satlayer-cli strategy-factory create-strategy <user-key-name> <token> <pauser> <unpauser>
```

In which:

* **user-key-name** - name of the key in the keyring to use for contract execution
* **token** - the address of the CW20 token to be used in the strategy
* **pauser/unpauser** - the address that will be allowed to pause/unpause the strategy

### update-config

Updates the strategy factory

```
satlayer-cli strategy-factory update-config <user-key-name> <new-owner> <code-id>
```

In which:

* **user-key-name** - name of the key in the keyring to use for contract execution
* **new-owner** - new owner of the Strategy Factory
* **code-id** - the code-id of the new contract

### blacklist-tokens

Block tokens to be used in strategies.

```
satlayer-cli strategy-factory blacklist-tokens <user-key-name> token1 [token2...]
```

In which:

* **user-key-name** - the name of the key in the keyring to use for contract execution
* **tokenN** - token to be blacklisted

### transfer-owner

Transfers the ownership of the Strategy Factory contract to a new address

```
satlayer-cli strategy-factory transfer-owner <user-key-name> <new-owner-address>
```

In which:

* **user-key-name** - the name of the key in the keyring to use for contract execution
* **new-owner-address** - the new address to transfer the ownership of strategy factory

### is-token-blacklisted

Queries if a token is blacklisted

```
satlayer-cli strategy-factory is-token-blacklisted <token>
```

In which:

* **token** - the token to be convened about


# Babylon CLI

Babylon Chain's Command Line Tool

As SatLayer is built on Babylon, we will often need to interact with Babylon Chain.  Sometimes we need to utilize the low-level cli tool `babylond` during development.  This document serves as a centralized resource for getting and installing  `babylond` as well as commonly used operations.&#x20;

Please note that this is not an exhaustive list of the commands supported by Babylon.

## Installing babylond

In order to compile Babylon, `Go >= 1.21` should be installed. Methods to install golang differ depending on the operating system you are using. Generally, please follow the instructions on the [Golang install page](https://go.dev/doc/install) to install the Go compiler.&#x20;

For Linux users, follow the installation instructions according to the distribution you are using. For Ubuntu and other Debian-based system, run:

```bash
sudo apt-get install golang-go
```

For Arch based systems, run:

```bash
sudo pacman -S go
```

For Fedora and other RHEL based systems, run:

```bash
sudo dnf install golang
```

1. Clone Babylon source code repo and `cd` into the directory

```bash
git clone https://github.com/babylonchain/babylon.git
cd babylon
```

2. To build the binary, execute&#x20;

```bash
make build
```

After compiling, you can find the binary in `./build/babylond`.

3. Install babylond

To install the binary to your user's directories, execute the following. This command installs  `babylond` to Golang's default install directory `$HOME/go/bin`. Please make sure to have this path added to your [PATH environment variable.](https://en.wikipedia.org/wiki/PATH_\(variable\))

```bash
make install
```

Then add `$HOME/go/bin` to `PATH`. For UNIX users (Linux, MacOS, etc..)

```bash
# ~/.bashrc or ~/.zshrc
export PATH=$HOME/go/bin:$PATH
```

Then `source` your shell rc scrip or start a new shell to active it.

```bash
source ~/.bashrc
# or
source ~/.zshrc
```

Or Windows or UNIX with PowerShell you should edit the `$profile` file (run `echo $profile` in PowerShell to acquire the file path) and append the following.

```powershell
# Edit $profile
$env:Path = $env:UserProfile+[IO.Path]::PathSeparator+"go"+[IO.Path]::PathSeparator+"bin;"+$env:Path
```

Close and start a new PowerShell session to activate the change.

## Key Operations

`babylond` allows the management of keys. Common operations include create, delete, export, import and listing keys. Multiple keyring backends are supported.&#x20;

By default, `babylond` asks the OS to handle key storage. But other options are available, mostly for development purposes.

```shell
# Create a new key under the name `wallet_name`, stored by the OS
./babylond keys add ${wallet_name} --keyring-backend os --keyring-dir ./   

Flag explanation:
    --keyring-backend: Select keyring backend (os|file|kwallet|pass|test|memory) (default "os").
    --keyring-dir: The client Keyring directory; if omitted, the "default" home directory will be used.
```

### Deleting Keys

To delete keys, run this command:&#x20;

```bash
# Delete the given key:
./babylond keys delete ${wallet_name}
```

### Printing keys&#x20;

The `keys export` sub-comamnd prints the key:&#x20;

```bash
# Export private keys:
./babylond keys export ${wallet_name} --output json

Flag explanation:
    --output: Output format (text|json) (default "text").
```

### Importing keys

Key import is also supported via this command:&#x20;

```bash
# Import private keys into the local keybase:
./babylond keys import
```

### Listing keys

To list all keys stored in the keyring:&#x20;

```bash
# List all keys:
./babylond keys list
```

## Query

`query` houses subcommands that queries specific information. The most common queries are  for account balances, transaction information and smart contract states. These operations requires communication with a Babylon node. The `--node` parameter specifics the Babylon (RPC) node to use. And the `--chain-id` specifics the chain ID. For testnet, these 2 parameters must be specified correctly in order for the command to work at all.

```shell
# Query native token balances:
./babylond query bank balances ${wallet_address} --chain-id ${chain_id} --node ${rpc}

Flag explanation:
    --chain-id: The network id. 
    --node: CometBFT rpc interface for the chain.
```

#### To query a past transaction

```bash
# Query tx hash:
./babylond query tx ${tx_hash} --log_format=json --node ${rpc}

Flag explanation:
    --log_format: The logging format (json|plain) (default "plain")
```

{% hint style="info" %}
Not all nodes are so-called archiver nodes. Non-archive node will truncate chain history to reduce storage space needed by the node software. Querying an old transaction against an non-archiver may result in the transaction not being found or an error.
{% endhint %}

#### To query the state of a smart contract

```bash
# This command queries the state of a smart contract. Calls contract with given address with querying data and prints the returned result
./babylond query wasm contract-state smart ${contract_address} ${json_encoded_init_args} --log_format=json --node ${rpc}
```

## CosmWasm

Babylon supports CosmWasm smart contracts. The `wasm` subcommands deals with related operations.&#x20;

Like the `query` subcommand above, `--node` and `--chain-id` are needed when use on a testnet. In addition, they are required for gas controlling parameters to limit the maximal gas spent on the operation.

```shell
# Upload a wasm binary:
./babylond tx wasm store ${wasm_directory} --from=${wallet_name} --gas=auto --gas-prices=1ubbn --gas-adjustment=1.3 --chain-id=${chain_id} -b=sync --yes --log_format=json --node ${rpc}

Flag explanation:
    --from: Name or address of private key with which to sign. 
    --gas: Gas limit to set per-transaction; set to "auto" to calculate sufficient gas automatically.
    --gas-prices: Gas prices in decimal format to determine the transaction fee (e.g. 0.1uatom).
    --gas-adjustment: Adjustment factor to be multiplied against the estimate returned by the tx simulation; if the gas limit is set manually this flag is ignored.
    -b, --broadcast-mode: Transaction broadcasting mode (sync|async) (default "sync").
    -y, --yes: Skip tx broadcasting prompt confirmation.
```

After uploading the WASM binary, a contact needs to be instantiated from the binary:

```bash
# Instatiate a wasm contract:
./babylond tx wasm instantiate ${code_id} ${json_encoded_init_args} --from=${wallet_name} --no-admin --label=${contract_label} --gas=auto --gas-prices=1ubbn --gas-adjustment=1.3 --chain-id=${chain_id} -b=sync --yes --log_format=json --node ${rpc}

Flag explanation:
    --label: A human-readable name for this contract in lists.
```

CosmWasm contracts separate query and execute functions, distinguishing between read-only and mutable operations. Queries are free, while executing a contract requires gas.

```bash
# Execute a command on a wasm contract:
./babylond tx wasm execute ${contract_address} ${json_encoded_init_args} --from=${wallet_name} --gas=auto --gas-prices=1ubbn --gas-adjustment=1.3 --chain-id=${chain_id} -b=sync --yes --log_format=json --node ${rpc}
```

In addition, EVM and contracts on CosmWasm can be upgraded (if `migrate` is enabled)

```bash
# Migrate a wasm contract to a new code version:
./babylond tx wasm migrate ${contract_address} ${new_code_id_int64} '{"migrate":{}}' --from=${wallet_name} --gas-prices=1ubbn --gas=auto --gas-adjustment=1.3 --chain-id=${chain_id} -b=sync --yes --log_format=json --node ${rpc}
```

## Others

The `tx bank send` command sends token from one address (you must own the private key) to another. The same node, chain and gas parameters apply here too.

```shell
# Transfer native tokens:
./babylond tx bank send ${from_address} ${to_address} ${amount} --node ${rpc} --keyring-backend ${keyring_backend} --keyring-dir ${keyring_dir} --chain-id=${chain_id} --fees 2ubbn

Flag explanation:
    --fees: Fees to pay along with transaction; eg: 10uatom.
```

## Reference

You can use `./babylond --help` to get full documentations about how to use babylon command line or through the [official Babylon documentation](https://docs.babylonchain.io/docs/cli/babylond/cli).


# Wallet Guide

### Overview

SatLayer recommends having the below wallets and tools for development. &#x20;

* Babylon CLI is the primary low level developer tool used to interact with the Babylon Chain, everything from creating, exporting, and recovering wallets, to querying on-chain data and signing transactions.&#x20;
* Leap Wallet is one of the most flexible and developer friendly browser extension wallets compatible with Cosmos chains.  The GUI is simple, and is supported by our [Devnet Explorer](https://devnet.satlayer.xyz).
* SatLayer CLI is command line tool to interact with SatLayer core contracts. With this tool, users can register BVS,/Operators, stake tokens, claim rewards, perform queries and some other operation.

### Babylon CLI

#### Creating a New Address

To create a new address, use the `babylond` command and run:&#x20;

```bash
babylond keys add my-operator
```

In this example, we’ve named the wallet **my-operator**. After creating the wallet, `babylond` will display the BIP39 mnemonic phrase in the console. **Save this phrase in a secure place**; it is essential for wallet recovery and for accessing the same key from other devices. The default keyring-backend is `os`.

#### Importing Address From BIP39

If you already have a wallet and want to use it for your operator account, you can import it by entering your BIP39 mnemonic. To do so, run:

```bash
babylond keys add my-operator --recover
```

`babylond` will prompt you for your BIP39 mnemonic. Enter the phrase exactly as it is, press **Enter**, and your key should be successfully imported.

#### Importing Address From Hex

If you exported and saved your keys as a hex, you can import it by entering the below command.

```bash
babylond keys import-hex
```

### SatLayer CLI

You can directly use SatLayer CLI, it will create default config file in your computer `"{$HOME}/.config/satlayer/config.toml"`. It can read the babylon default directory to access your private keys. It's safe to use and won't upload to anywhere. View the [doc](/bvs-developers-1/developer-toolbox/satlayer-cli#configuration) to config SatLayer CLI.

**NOTICE**: if you want to use other config file, please set `SATLAYER_CONFIG` environment variable.

### Leap Wallet

#### Adding SatLayer Devnet

Follow the below steps to add SatLayer's Devnet to Leap Wallet, allowing you to see Devnet native tokens (**BBN**) and submit Devnet transactions to the SatLayer Devnet. &#x20;

1. Install Leap Wallet in browser through this website: [**leap wallet**](https://www.leapwallet.io/)
2. Click the button circled in red in the upper right corner

<figure><img src="/files/pnVOEyzZ7GnzeNTa6pdL" alt="" width="375"><figcaption></figcaption></figure>

3. Next, the wallet will pop up a new page. You can search some blockchains or add a custom blockchain through the `+` button:

<figure><img src="/files/xdb1fGQCC3iHIMIFbbQn" alt="" width="375"><figcaption><p>Add Custom Blockchain</p></figcaption></figure>

4. Finally, add the SatLayer Devnet using the [Devnet details on this page](/bvs-developers-1/devnet-and-explorer#sat-bbn-testnet1).  Once you've saved the config you'll be able to use the SatLayer Babylon Devnet from your Leap wallet!

```
Chain Id: sat-bbn-testnet1
Chain Name: SatLayer Babylon Testnet
New RPC URL: https://rpc.sat-bbn-testnet1.satlayer.net
New REST URL: https://lcd1.sat-bbn-testnet1.satlayer.net
Address Prefix: bbn
Native Denom: ubbn
Coin Type: 118
Decimals: 6
Explorer URL: https://devnet.satlayer.xyz/satlayer-babylon-testnet
```

#### Adding CW20 Token

Add CW20 Token by clicking on the Gears button:&#x20;

<figure><img src="/files/wQVb2wmOXiqf5GJnZout" alt="" width="375"><figcaption></figcaption></figure>

Afterwards, you will enter into a new page, click this `+` button:

<figure><img src="/files/soOU1VAZmtBwfn8qtvNW" alt="" width="375"><figcaption></figcaption></figure>

6. Configure the new CW20 token:

Simply in the contract address of the CW20 token and details like denomination, decimals and it's name will be filled automatically. For example, a test token on our devent:

```shell
bbn1qg5ega6dykkxc307y25pecuufrjkxkaggkkxh7nad0vhyhtuhw3sp4gequ
```

#### Exporting Private Keys as Hex-Encoded

* Inside Leap Wallet Click the setting button as follows:

<figure><img src="/files/Mia397SJ1UyHu45UgBfc" alt="" width="375"><figcaption></figcaption></figure>

* Click `Export Private Key` button to export private key

<figure><img src="/files/O8snknjPg9ohD6voWOIN" alt="" width="375"><figcaption></figcaption></figure>

#### **Importing Keys From Babylon CLI**

If you’ve created keys with `babylond` and want to use them in Leap Wallet, follow these steps:

<figure><img src="/files/Xyjq7zqbHHLLHrC9GiSc" alt="" width="375"><figcaption><p>Import Keys</p></figcaption></figure>

1. Open Leap Wallet.
2. Go to the wallet section and click **"Import using recovery phrases."**
3. Paste in your saved BIP39 mnemonic phrase.
4. You can also import using private key by `babylond keys export --unarmored-hex --unsafe <keyName>` , you'll get hex-encoded private key, and import it into Leap Wallet.

Your keys will now be accessible in Leap Wallet, allowing for convenient, GUI-based management.


# ChainIO Module

The BVS SDK consists of several components, with ChainIO being the primary one—and likely the only one you’ll interact with. ChainIO acts as an abstraction layer over the base CosmWasm API used for communicating with a CosmWasm node. It simplifies tasks like data querying, contract execution, and event indexing/sequencing. ChainIO is the main interface for interacting with a BVS contract.

### Creating a context

The BVS SDK makes heavy use of Golang's goroutines, channels and thus the `context` package. We recommend using `context.Background` as it fits most usage scenarios.

```go
import "context"
ctx := context.Background()
```

### ChainIO

To use ChainIO against the SatLayer testnet, initialize a CosmWasm client pointing at our network with your keys.

```go
import "github.com/satlayer/satlayer-api/signer"
client, err := signer.NewCosmosClient(
	"sat-bbn-testnet1",		// Chain-id. For SatLayer testnet it's sat-bbn-testnet1
	"https://rpc.satlayer.net",	// URL to an RPC node
	".",				// Directory that stores the key. Only used if the keyring needs it
	"your-key-name-here",		// name of the key
	"test",				// Keyring backend. Valid values includes test, os, kwallet or file
	"bbn" 				// Address prefix of the network
)
```

#### Querying contract state

The  `QueryContract` method allows you to query contract states (equivalent to the command `babylond query wasm contract-state smart <contract-address> <query-data>` .&#x20;

```go
QueryContract(cosmosClient *signer.CosmosClient, opts types.QueryOptions) (*wasmtypes.QuerySmartContractStateResponse, error)
```

In which  the `QueryOptions` struct is defined as follows.

```go
type QueryOptions struct {
    ContractAddr string // Address of the smart contract
    QueryMsg     []byte // JSON query converted to bytes
}
```

#### Executing contract&#x20;

The `ExecuteContract` method runs a contract. It works exactly like `QueryContract` but with options to configure gas, fees and more. It is equivalent to the `babylond tx wasm execute` command

```go
ExecuteContract(cosmosClient *signer.CosmosClient, opts types.ExecuteOptions) (*sdktypes.TxResponse, error)
```

The `ExecuteOptions` is defined as follow:

```go
type ExecuteOptions struct {
	ContractAddr  string  // Address of the smart contract
	ExecuteMsg    []byte  // Message to be executed, represented as a struct
	Funds         string  // Amount of funds to send to the contract, represented as a string
	GasAdjustment float64 // Gas adjustment factor for adjusting the estimated gas amount
	GasPrice      string  // Gas price, represented as a string (ex. "1bbn")
	Gas           uint64  // Amount of gas reserved for transaction execution
	Memo          string  // Transaction memo (if any, could be empty)
	Simulate      bool    // Whether to dry-run the transaction. Useful to get an estimate of the needed gas amount
}
```

Alternative to `ExecuteContract`, the `SendTranscation` function does the same thing but it provides automatic retry and observation. Depending on the use case, the `SendTransaction` function could be a better option.&#x20;

```go
SendTransaction(ctx context.Context, opts types.ExecuteOptions) (*coretypes.ResultTx, error)
```

#### Querying node status

The `QueryNodeStatus` method helps you check if a node is online and healthy.&#x20;

```go
QueryNodeStatus(cosmosClient *signer.CosmosClient) (*coretypes.ResultStatus, error)
```

#### Query a historical transaction

The `QueryTransaction` method queries a past transaction and returns the transaction result.

{% hint style="info" %}
Not all nodes are so called "archiver" nodes, which stores and indexes all past transactions. By default, nodes will forget transactions beyond a predefined time in order to save disk space. \
\
Within the official SatLayer testnet nodes, only `rpc.satlayer.net` is an archiver. Expect querying of old transactions to fail against a non archiver.
{% endhint %}

```go
QueryTransaction(cosmosClient *signer.CosmosClient, txHash string) (*coretypes.ResultTx, error)
```

#### Listening for events

A key function of ChainIO is listening for events generated by a given contract, which is essential for tracking task generations and submissions within a BVS. Setting up an event listener is a bit more complicated but remains straightforward. Let’s assume the `cosmosClient` from previous examples is still accessible.

```go
res, err := cosmosClient.ClientCtx.Client.Status(ctx)
if err != nil {
    panic(err)
}

latestBlock := res.SyncInfo.LatestBlockHeight
evtIndexer := indexer.NewEventIndexer(
    cosmosClient.ClientCtx,                // client context
    avsDriverContract,                     // Address of your AVS driver contact
    latestBlock,                           // We start listening from the last known blokc
    []string{"wasm-ExecuteBVSOffchain"},   // List of events to listen to (usually prefixed w/ wasm-)
    1,                                     // Rate-lmiting, max events per second
    10                                     // How many retries (aginst the node) is allowed
)

evtChain, err := evtIndexer.Run(ctx)
if err != nil {
    panic(err)
}

// Now read from the channel 
for evt := range evtChain {
    switch evt.EventType {
    case "wasm-ExecuteBVSOffchain":
        do_processing_for_bvs_task()
        // taskId := evt.AttrMap["taskId"] // ..for example
        // fmt.Println("taskId: ", taskId)
    default:
        fmt.Println("unhandled event: ", evt.EventType)
    }
}

```

### Contract API wrappers

ChainIO also provides abstractions of SatLayer core contacts by allowing programmatic execution and query of the core contracts. These are simple, strongly-typed wrappers for ease of use.&#x20;

Wrappers are available for:

* BVS Directory
* Delegation Manager
* Rewards Coordinator
* Slash Manager
* State Bank
* Strategy Base/TVL Limits/Factory/Manager

To access them, run:&#x20;

```go
import "github.com/satlayer/satlayer-sdk/chainio/api"
```

Please refer to the [SatLayer Core Contracts](/bvs-developers-1/satlayer-core-contracts) section for what each contract does.

### Logger

The BVS SDK includes a generic logger that is integrated into components of the SDK.&#x20;

The following snippet shows how the logger can be used.

```go
package main

import "github.com/satlayer/satlayer-sdk/logger"

func main() {
    l := logging.NewELKLogger("bvs1")
    l.SetLogLevel("debug")
    // info demo
    l.INFO("this is a info log test")
    // warn demo
    l.WARN("this is a warn log test")
    // error demo
    l.ERROR("this is a error log test",
        logging.WithFiled("age", 100),
        logging.WithFiled("gender", "man"),
    )
    // debug demo
    l.DEBUG("this is a debug log test")
    // fatal demo
    l.FATAL("this is a fatal log test")
}
```


# Hello World Details


# Annotation of the Monitor

This section provides a very well-annotated version of the monitor program of the Hello World BVS. It aims to help developers get familiar with the programming environment. The monitor program simply listens to events on a BVS and prints it to the console.

In pseudo (and Python-like) code, the monitor program acts as the following:&#x20;

```python
chainio = init_chainio()
indexer = init_indexer(
    starting_block=chainio.latest_block,
    event_filter=["wasm-NewTaskCreated", "wasm-TaskResponded"])

while True:
    event = await indexer.wait_for_new_event()
    print(event)
```

Here's the annotated version taken from commit `c5764b62732516f634c08251258474cb8f4a97db`

```go
// The Monitor structure
type Monitor struct {
    bvsContract string       // The address of the BVS contract
    chainIO     io.ChainIO   // ChainIO to enable communication with the BVS
}

// RunMonitor runs the monitor. This is the entery point of the monitor
func RunMonitor() {
    m := NewMonitor()
    m.Run()
}

// NewMonitor creates a new instance of the Monitor struct.
func NewMonitor() *Monitor {
    // Create a new ChainIO instance
    // ChainIO is our main interfaace from a off-chain program to any on-chain contract
    chainIO, err := io.NewChainIO(core.C.Chain.Id, core.C.Chain.Rpc, core.C.Owner.KeyDir, core.C.Owner.Bech32Prefix, elkLogger, metricsIndicators, types.TxManagerParams{
        MaxRetries:             3,
        RetryInterval:          1 * time.Second,
        ConfirmationTimeout:    60 * time.Second,
        GasPriceAdjustmentRate: "1.1",
    })
    if err != nil {
        panic(err)
    }
    // Setup the keyring so we have access to private keys
    client, err := chainIO.SetupKeyring(core.C.Owner.KeyName, core.C.Owner.KeyringBackend)
    if err != nil {
        panic(err)
    }
    
    // Query the BVS directory and find the BVS we are monitoring
    txResp, err := api.NewBVSDirectoryImpl(client, core.C.Chain.BvsDirectory).GetBVSInfo(core.C.Chain.BvsHash)
    if err != nil {
        panic(err)
    }
    
    // Construct and returnthe Monitor structure
    return &Monitor{
        bvsContract: txResp.BVSContract,
        chainIO:     client,
    }
}

// Run runs the event indexer and monitors for new task created and task responded events.
func (m *Monitor) Run() {
    // Create a context (see https://pkg.go.dev/context for detail) that ChainIO and
    // other components will run in.
    ctx := context.Background()
    // Queries the RPC node to reterve the current latest block. The information
    // is later on passed to the EvenIndexer to listen to newly created event
    res, err := m.chainIO.QueryNodeStatus(ctx)
    if err != nil {
        panic(err)
    }
    latestBlock := res.SyncInfo.LatestBlockHeight
    fmt.Println("latestBlock: ", latestBlock)
    // Create the EventIndexer with listening to the BVS for new events
    // of type "wasm-NewTaskCreated" and "wasm-TaskResponded". And with a very 
    // small rate limiter. The last 2 parameters 1, 5 denotes 1 event (in a bucket
    // rate limiter) and 5 events per second.
    evtIndexer := indexer.NewEventIndexer(
        m.chainIO.GetClientCtx(),
        m.bvsContract,
        latestBlock,
        []string{"wasm-NewTaskCreated", "wasm-TaskResponded"},
        1,
        5)
    // start the event indexer
    evtChain, err := evtIndexer.Run(ctx)
    if err != nil {
        panic(err)
    }
    fmt.Println("chain: ", evtChain)
    
    // Now wait for events and print their respective information. Event data
    // is stored in evt.AttrMap while the type can be determined by checking 
    // evt.EventType
    for evt := range evtChain {
        switch evt.EventType {
        // For a NewTaskCreated event, we print the block height, transaction hash
        // the TaskId and it's input value 
        case "wasm-NewTaskCreated":
            blockHeight := evt.BlockHeight
            txnHash := evt.TxHash
            taskId := evt.AttrMap["taskId"]
            taskInput := evt.AttrMap["input"]
            fmt.Printf("[NewTaskCreated] blockHeight: %d, txnHash: %s, taskId: %s, taskInput: %s\n", blockHeight, txnHash, taskId, taskInput)
        // For a TaskResponded event, print block height, transaction hash taskId, result
        // and the operators whom performed the calculations.
        case "wasm-TaskResponded":
            blockHeight := evt.BlockHeight
            txnHash := evt.TxHash
            taskId := evt.AttrMap["taskId"]
            taskResult := evt.AttrMap["result"]
            taskOperators := evt.AttrMap["operators"]
            fmt.Printf("[TaskResponded] blockHeight: %d, txnHash: %s, taskId: %s, taskResult: %s, taskOperators: %s\n", blockHeight, txnHash, taskId, taskResult, taskOperators)
        default:
            // Should not reach here as we covered all event types specsifed to the EventIndexer
            fmt.Printf("Unknown event type. evt: %+v\n", evt)
        }
    }
}
```


# Annotation of the Task Caller

The task caller program acts as a consumer of the Hello World BVS. Think of the task caller as your user during demo.

Like the task monitor, the task caller is a simple program.&#x20;

This section takes the program from commit `c5764b62732516f634c08251258474cb8f4a97db` and provides a well annotated version of it.

To aid in understanding, here’s pseudo-code (Python-like) that illustrates how the caller program functions:

```python
chainio = init_chainio()

bvs_client = BVSSquaringClient(chainio)
while True:
    resp = await bvs_client.CreateNewTask(random.randint(0, 100))
    print(resp)
```

Here’s the program, fully annotated for clarity:

```go
// The caller structure
// Fun fact: this structure is the exact same as the Monitor!
type Caller struct {
    bvsContract string       // The address of the BVS contract
    chainIO     io.ChainIO   // ChainIO to enable communication with the BVS
}

// RunCaller runs the caller by creating a new caller and executing its Run method.
func RunCaller() {
    c := NewCaller()
    c.Run()
}

// NewCaller creates a new Caller instance.
// The function is nearly the same one as the monitor program
// which is unsuperising since the structure is the same 
func NewMonitor() *Monitor {
    // Create a new ChainIO instance
    // ChainIO is our main interfaace from a off-chain program to any on-chain contract
    chainIO, err := io.NewChainIO(core.C.Chain.Id, core.C.Chain.Rpc, core.C.Owner.KeyDir, core.C.Owner.Bech32Prefix, elkLogger, metricsIndicators, types.TxManagerParams{
        MaxRetries:             3,
        RetryInterval:          1 * time.Second,
        ConfirmationTimeout:    60 * time.Second,
        GasPriceAdjustmentRate: "1.1",
    })
    if err != nil {
        panic(err)
    }
    // Setup the keyring so we have access to private keys
    client, err := chainIO.SetupKeyring(core.C.Owner.KeyName, core.C.Owner.KeyringBackend)
    if err != nil {
        panic(err)
    }
    
    // Query the BVS directory and find the BVS we are monitoring
    txResp, err := api.NewBVSDirectoryImpl(client, core.C.Chain.BvsDirectory).GetBVSInfo(core.C.Chain.BvsHash)
    if err != nil {
        panic(err)
    }
    
    // Construct and returnthe Caller structure
    return &Caller{
        bvsContract: txResp.BVSContract,
        chainIO:     client,
    }
}

// Run runs the caller in an infinite loop, creating a new task with a random number every second.
func (c *Caller) Run() {
    bvsSquaring := BvsSquaringApi.NewBVSSquaring(c.chainIO)
    for {
        // Create a client of the BVS
        bvsSquaring.BindClient(c.bvsContract)
        
        // Create a new number, submits it to the BVS as a task
        randomNumber := rand.Int63n(100)
        resp, err := bvsSquaring.CreateNewTask(context.Background(), randomNumber)
        if err != nil {
            panic(err)
        }
        // print the transaction result
        fmt.Printf("resp: %+v\n", resp)
    }
}
```

You might notice a new library `BvsSquaringApi` and wonder what it does.&#x20;

`BvsSquaringApi` is a Golang module specific to the Hello World BVS. See the next section for details!


# The BVSSquaring library

One of the main reasons for the library’s existence is to centralize code that would otherwise be dispersed across various locations. This is true for the `BVSSquaring` library, an abstraction library designed to streamline interactions with the specific BVS contract used in the Hello World BVS demo. Multiple programs (such as the aggregator, monitor, caller, etc.) can share its functionalities, enhancing reusability and testability.

We recommend each BVS to have it's own BVS abstraction library. However, know that the abstraction library may look quite different from the `BVSSquaring` example as the needs could be vastly different,

```go
// Interface declerations. The BindClient contains methods to create a new task,
// respond to task, read the input of a task, read the result of task and finishing
// initliaztion of a BVSSquaring instance
type BVSSquaring interface {
    BindClient(string)
    CreateNewTask(context.Context, int64) (*coretypes.ResultTx, error)
    RespondToTask(ctx context.Context, taskId int64, result int64, operators string) (*coretypes.ResultTx, error)
    GetTaskInput(int64) (*wasmtypes.QuerySmartContractStateResponse, error)
    GetTaskResult(int64) (*wasmtypes.QuerySmartContractStateResponse, error)
}

// The implementation of BVSSquaring.
type bvsSquaringImpl struct {
    io             io.ChainIO
    executeOptions *types.ExecuteOptions
    queryOptions   *types.QueryOptions
}

// BindClient finishes initlization first made by NewBVSSquaring()
// it setups contract execution and query options to be used later. 
func (a *bvsSquaringImpl) BindClient(contractAddress string) {
    // Setup contract execution options
    a.executeOptions = &types.ExecuteOptions{
        ContractAddr:  contractAddress,
        ExecuteMsg:    []byte{},
        Funds:         "",
        GasAdjustment: 1.2,
        GasPrice:      sdktypes.NewInt64DecCoin("uosmo", 1),
        Gas:           200000,
        Memo:          "test tx",
        Simulate:      true,
    }

    // Setup query options
    a.queryOptions = &types.QueryOptions{
        ContractAddr: contractAddress,
        QueryMsg:     []byte{},
    }
}

// Under the hood, CreateNewTask() invokes the cotract with the CreateNewTaskReq type
// this triggers the CosmWasm contract's execute() method
func (a *bvsSquaringImpl) CreateNewTask(ctx context.Context, input int64) (*coretypes.ResultTx, error) {
    // Prepare the message to be sent to the contract. Here we instenshate a variable
    // of type CreateNewTaskReq and containing our input variable
    msg := types.CreateNewTaskReq{
        CreateNewTask: types.CreateNewTask{
            Input: input,
        },
    }

    // Serialze the message and assign it into executeOptions
    msgBytes, err := json.Marshal(msg)
    (*a.executeOptions).ExecuteMsg = msgBytes
    if err != nil {
        return nil, err
    }

    // SendTransaction invokes the contract's execut() method on-chain
    return a.io.SendTransaction(ctx, *a.executeOptions)
}

// RespondToTask() is used by aggregator to send results back to the BVS contract
func (a *bvsSquaringImpl) RespondToTask(ctx context.Context, taskId int64, result int64, operators string) (*coretypes.ResultTx, error) {
    // Like CreateNewTask(). It constructs the message to be sent to the contract
    msg := types.RespondToTaskReq{
        RespondToTask: types.RespondToTask{
            TaskId:    taskId,
            Result:    result,
            Operators: operators,
        },
    }

    // Serialze the message and assign it into executeOptions
    msgBytes, err := json.Marshal(msg)
    (*a.executeOptions).ExecuteMsg = msgBytes
    if err != nil {
        return nil, err
    }

    // SendTransaction invokes the contract's execut() method on-chain 
    return a.io.SendTransaction(ctx, *a.executeOptions)
}

// GetTaskInput() queries the BVS contract about the input of a past task
func (a *bvsSquaringImpl) GetTaskInput(taskId int64) (*wasmtypes.QuerySmartContractStateResponse, error) {
    // You'd be very familare with this now. Construt a message of the same type
    // as the ones accepts on-chain.
    msg := types.GetTaskInputReq{
        GetTaskInput: types.GetTaskInput{
            TaskId: taskId,
        },
    }

    // Serialize the message. Unlike above examples we don't need to execute
    // anything (there's nothing to write, we only want to read), thus Query()
    // will be the method we use
    msgBytes, err := json.Marshal(msg)
    (*a.queryOptions).QueryMsg = msgBytes

    if err != nil {
        return nil, err
    }

    // Queries the contract and return result
    return a.io.QueryContract(*a.queryOptions)
}

func (a *bvsSquaringImpl) GetTaskResult(taskId int64) (*wasmtypes.QuerySmartContractStateResponse, error) {
    // DITTO. Construt a message to be sent to the contact
    msg := types.GetTaskResultReq{
        GetTaskResult: types.GetTaskResult{
            TaskId: taskId,
        },
    }

    // Serialize the message and prepare to qeury the contract
    msgBytes, err := json.Marshal(msg)
    (*a.queryOptions).QueryMsg = msgBytes

    if err != nil {
        return nil, err
    }

    // Queries the contract and return result
    return a.io.QueryContract(*a.queryOptions)
}

// Create a new instance of BVSSquaring
func NewBVSSquaring(chainIO io.ChainIO) BVSSquaring {
    return &bvsSquaringImpl{
        io: chainIO,
    }
}
```


# Annotation of the off-chain compute program

> NOTE FOR SELF: Need much better introduction. Trying power through the actual code annotation first RN.

The code used in this annotation is taken from commit `c5764b62732516f634c08251258474cb8f4a97db`

```go
type Node struct {
    bvsContract       string
    stateBankContract string
    bvsDriverContract string
    pubKeyStr         string
    chainIO           io.ChainIO
    stateBank         api.StateBank
}

type Payload struct {
    TaskId    int64  `json:"taskID"`
    Result    int64  `json:"result"`
    Timestamp int64  `json:"timestamp"`
    Signature string `json:"signature"`
    PubKey    string `json:"pubKey"`
}

// The NewNode function basically is the same as NewMonitor in the previous section. But with a bit more
// initalization for keys and state
func NewNode() *Node {
    elkLogger := logger.NewELKLogger("bvs_demo")
    reg := prometheus.NewRegistry()
    metricsIndicators := transactionprocess.NewPromIndicators(reg, "bvs_demo")
    // Create a new ChainIO instance
    // ChainIO is our main interfaace from a off-chain program to any on-chain contract
    chainIO, err := io.NewChainIO(core.C.Chain.Id, core.C.Chain.Rpc, core.C.Owner.KeyDir, core.C.Owner.Bech32Prefix, elkLogger, metricsIndicators, types.TxManagerParams{
        MaxRetries:             3,
        RetryInterval:          1 * time.Second,
        ConfirmationTimeout:    60 * time.Second,
        GasPriceAdjustmentRate: "1.1",
    })
    if err != nil {
        panic(err)
    }
    // Setup the keyring so we have access to private keys
    chainIO, err = chainIO.SetupKeyring(core.C.Owner.KeyName, core.C.Owner.KeyringBackend)
    if err != nil {
        panic(err)
    }
    account, err := chainIO.GetCurrentAccount()
    if err != nil {
        panic(err)
    }
    pubKeyStr := base64.StdEncoding.EncodeToString(account.GetPubKey().Bytes())
    // Reterve the information about the BVS
    txResp, err := api.NewBVSDirectoryImpl(chainIO, core.C.Chain.BvsDirectory).GetBVSInfo(core.C.Chain.BvsHash)
    if err != nil {
        panic(err)
    }
    // Initalize the StateBank
    // A StateBank is used to store BVS state on-chain. Off-chain processes are responsible
    // to keep track of events from the StateBank and update it's local view accordingly
    // (in order to react differently depending on the BVS state)
    stateBank := api.NewStateBankImpl(chainIO)

    // construce the Node struct and return it
    return &Node{
        bvsContract:       txResp.BVSContract,
        stateBankContract: txResp.StateBank,
        bvsDriverContract: txResp.BVSDriver,
        stateBank:         stateBank,
        chainIO:           chainIO,
        pubKeyStr:         pubKeyStr,
    }
}

// Run starts the node's main execution loop.
func (n *Node) Run(ctx context.Context) {
    go func() {
        // Synchronize StateBank. Note that even though it is a plain function call,
        // internally, syncStateBank() runs forever and thus StateBack will not desync
        if err := n.syncStateBank(ctx); err != nil {
            panic(err)
        }
    }()
    // Listens to events and run the computation 
    if err := n.monitorDriver(ctx); err != nil {
        panic(err)
    }
}

// Initialize and synchronize the StateBank. Even though this function returns very
// soon, it starts a goruntine that is long-lived and this StateBank will not loose
// it's synchronization
func (n *Node) syncStateBank(ctx context.Context) (err error) {
    // Query the RPC node to reterve the current block height then initializes an
    // Indexer to listen to the "wasm-UpdateState" event. This event then is fed into
    // the StateBank to update it's view of the BVS state
    // Queries current block height 
    res, err := n.chainIO.QueryNodeStatus(ctx)
    if err != nil {
        panic(err)
    }
    latestBlock := res.SyncInfo.LatestBlockHeight
    // Create an indexer and listens for the "wasm-UpdateState" event
    idx := n.stateBank.Indexer(n.chainIO.GetClientCtx(), n.stateBankContract, latestBlock, []string{"wasm-UpdateState"}, 1, 10)
    processingQueue, err := idx.Run(ctx)
    if err != nil {
        panic(err)
    }
    
    // EventHandler() accepts a channel, listens for update and loops. It keeps the
    // StateBank in sync with the BVS until channel ends. Potentially EventHandler()
    // can run forever as long as the process is running
    go func() {
        n.stateBank.EventHandler(processingQueue)
    }()
    return
}

// monitorDriver monitors the driver contract for events and performs computation
func (n *Node) monitorDriver(ctx context.Context) (err error) {
    // DITTO. Query the RPC node to reterve the current block height then initializes
    // an indexer. This time for the "wasm-ExecuteBVSOffchain" event.
    // Queries current block height
    res, err := n.chainIO.QueryNodeStatus(ctx)
    if err != nil {
        panic(err)
    }
    latestBlock := res.SyncInfo.LatestBlockHeight
    fmt.Println("latestBlock: ", latestBlock)
    // Create an indexer and listens for the "wasm-ExecuteBVSOffchain" event
    evtIndexer := indexer.NewEventIndexer(
        n.chainIO.GetClientCtx(),
        n.bvsDriverContract,
        latestBlock,
        []string{"wasm-ExecuteBVSOffchain"},
        1,
        10)
    evtChain, err := evtIndexer.Run(ctx)
    if err != nil {
        panic(err)
    }
    fmt.Println("chain: ", evtChain)
    // Listen for the "wasm-ExecuteBVSOffchain" event and call calcTask() to
    // perform the computation as well as forwarding the computed result to 
    // the aggregator
    for evt := range evtChain {
        switch evt.EventType {
        case "wasm-ExecuteBVSOffchain":
            taskId := evt.AttrMap["taskId"]  // Data is stored in evt.AttrMap
            fmt.Println("taskId: ", taskId)
            if err := n.calcTask(taskId); err != nil {
                fmt.Println("ExecuteBVSOffchain error: ", err)
            }
        default:
            // Should not reach here what so ever since we handled the only event
            // type passed to the indexer above
            fmt.Println("unhandled event: ", evt.EventType)
        }
    }
    return
}

// calcTask calculates the task result and sends it to the aggregator.
func (n *Node) calcTask(taskId string) (err error) {
    stateKey := fmt.Sprintf("taskId.%s", taskId)
    // Reterve the associated value from the StateBank
    value, err := n.stateBank.GetWasmUpdateState(stateKey)
    if err != nil {
        return
    }
    // Convert both taskId and value to string
    input, err := strconv.Atoi(value)
    task, err := strconv.Atoi(taskId)
    if err != nil {
        fmt.Println("format err:", err)
        return
    }
    // Compute the square of the input.
    // NOTE: The entire SatLayer library, contracts and programs is to make
    // this computation verifiable and the off-chain process have no way to
    // fake this result.
    result := n.square(int64(input))
    
    // send the resut to the aggregator
    err = n.sendAggregator(int64(task), result)
    if err != nil {
        panic(err)
    }
    return
}

// square calculates the square of a given integer.
func (n *Node) square(input int64) int64 {
    return input * input
}

// sendAggregator sends the task result to the aggregator.
func (n *Node) sendAggregator(taskId int64, result int64) (err error) {
    // nowTs is the UNIX timestamp of the current time (without timezone offset)
    // this is effectively the time when the task is finished. 
    nowTs := time.Now().Unix()
    msgPayload := fmt.Sprintf("%s-%d-%d-%d", core.C.Chain.BvsHash, nowTs, taskId, result)
    // Log the infomation
    core.L.Info(fmt.Sprintf("msgPayload: %s\n", msgPayload))
    // Sign the message we just created
    signature, err := n.chainIO.GetSigner().Sign([]byte(msgPayload))

    // Prepare the payload to be sent to the aggregator. The aggregator will then
    // reconstruct it's expected msgPayload and verify the signature to validate
    // the message
    payload := Payload{
        TaskId:    taskId,
        Result:    result,
        Timestamp: nowTs,
        Signature: signature,
        PubKey:    n.pubKeyStr,
    }
    fmt.Printf("task result send aggregator payload: %+v\n", payload)
    if err != nil {
        return
    }
    // Serialize the data
    jsonData, err := json.Marshal(payload)
    if err != nil {
        fmt.Printf("Error marshaling JSON: %s", err)
        return
    }

    // Send the result to an aggregator. We use HTTP in the demo as it is a very popular
    // protocol and is quite fast. But using HTTP is not a hard requirment. Feel free to
    // use gRPC, WebSockets or other protocols
    resp, err := http.Post(core.C.Aggregator.Url, "application/json", bytes.NewBuffer(jsonData))
    if err != nil || resp.StatusCode != 200 {
        fmt.Printf("Error sending aggregator : %s\n", err)
        return
    }

    // Now we are done sending the result back to the aggregator. The off-chain process
    // will continue on to listen to and process new tasks
    return
}
```


# Annotation of the Aggregator

```go
// This is the structure that holds the Aggregator
type Monitor struct {
    bvsContract     string             // Address of the BVS contract
    bvsDirectoryApi api.BVSDirectory   // BVS Directory API wrapper
    chainIO         io.ChainIO         // ChainIO allows easy interaction to contracts
}

// NewMonitor creates a new Monitor instance with a Cosmos client and BVS contract.
func NewMonitor() *Monitor {
    // Figure our the path of the current executable. This is used later on to
    // figure out where the Babylon keys and home is (just a fixed structure happend
    // to be used in the project)
    _, currentFile, _, ok := runtime.Caller(0)
    if !ok {
        panic("cannot get current file")
    }
    // Figure out the parent directory of the executable. The babylon home directory
    // should be $EXE_DIR/../../$KEY_DIR
    configDir := filepath.Dir(currentFile)
    homeDir := configDir + "/../../" + core.C.Owner.KeyDir
    fmt.Printf("homeDir: %s\n", homeDir)

    // Initialize a logger and prometheus for monitoring
    elkLogger := logger.NewELKLogger("bvs_demo")
    reg := prometheus.NewRegistry()
    metricsIndicators := transactionprocess.NewPromIndicators(reg, "bvs_demo")
    // Initialize ChainIO, this should be very familare by now
    chainIO, err := io.NewChainIO(core.C.Chain.Id, core.C.Chain.Rpc, homeDir, core.C.Owner.Bech32Prefix, elkLogger, metricsIndicators, types.TxManagerParams{
        MaxRetries:             3,
        RetryInterval:          1 * time.Second,
        ConfirmationTimeout:    60 * time.Second,
        GasPriceAdjustmentRate: "1.1",
    })
    if err != nil {
        panic(err)
    }
    // Setup key ring to access private keys
    chainIO, err = chainIO.SetupKeyring(core.C.Owner.KeyName, core.C.Owner.KeyringBackend)
    if err != nil {
        panic(err)
    }
    // Grab the current account for use later
    account, err := chainIO.GetCurrentAccount()
    if err != nil {
        panic(err)
    }
    address := account.GetAddress().String()
    fmt.Printf("address: %s\n", address)
    
    // Query the BVS directory and find the BVS we are monitoring
    txResp, err := api.NewBVSDirectoryImpl(chainIO, core.C.Chain.BvsDirectory).GetBVSInfo(core.C.Chain.BvsHash)
    if err != nil {
        panic(err)
    }
    
    // Construct the Aggregator and return it to the caller
    bvsDirectoryApi := api.NewBVSDirectoryImpl(chainIO, core.C.Chain.BvsDirectory)
    return &Monitor{
        bvsContract:     txResp.BVSContract,
        bvsDirectoryApi: bvsDirectoryApi,
        chainIO:         chainIO,
    }
}

// Starts monitoring of the task queue
func (m *Monitor) Run(ctx context.Context) {
    core.L.Info("Start to monitor task queue")
    for {
        // The HTTP endpoint (see below) pushes finished task to Redis. Here we 
        // anticipate results from Redis and forward it to the BVS contract
        results, err := core.S.RedisConn.BLPop(context.Background(), 0, core.PkTaskQueue).Result()
        fmt.Printf("results: %+v\n", results)
        if err != nil {
            core.L.Error(fmt.Sprintf("Failed to read task queue, due to {%s}", err))
            continue
        }
        fmt.Printf("result--->: %s\n", results[1])
        task := core.Task{}
        if err := json.Unmarshal([]byte(results[1]), &task); err != nil {
            core.L.Error(fmt.Sprintf("Failed to parse task queue, due to {%s}", err))
            continue
        }
        fmt.Printf("task: %+v\n", task)
        pkTaskResult := fmt.Sprintf("%s%d", core.PkTaskResult, task.TaskId)
        taskResultStr, err := json.Marshal(task.TaskResult)
        if err != nil {
            core.L.Error(fmt.Sprintf("Failed to marshal task result, due to {%s}", err))
            return
        }
        // Put the data onto Redis. Later on verifyTask() pulls data from Redis
        if err := core.S.RedisConn.LPush(ctx, pkTaskResult, taskResultStr).Err(); err != nil {
            core.L.Error(fmt.Sprintf("Failed to save task result, due to {%s}", err))
            return
        }
        // calls verifyTask() to check if enough results have been sent to the aggregator
        // and if the result should be forwarded to the contract
        m.verifyTask(ctx, task.TaskId)
    }
}

// verifyTask checks if a result has been submitted by enough off-chain processes,
// then submit back to the BVS contract.
func (m *Monitor) verifyTask(ctx context.Context, taskId uint64) {
    pkTaskResult := fmt.Sprintf("%s%d", core.PkTaskResult, taskId)
    // Grab the task info from Redis
    results, err := core.S.RedisConn.LRange(ctx, pkTaskResult, 0, -1).Result()
    fmt.Printf("verify results: %s\n", results)
    if err != nil {
        core.L.Error(fmt.Sprintf("Failed to read task result, due to {%s}", err))
        return
    }

    resultCntMap := make(map[int64]uint)
    resultOperatorMap := make(map[int64][]string)
    var taskResult core.TaskResult
    for _, result := range results {
        fmt.Printf("verify result: %s\n", result)
        if err := json.Unmarshal([]byte(result), &taskResult); err != nil {
            core.L.Error(fmt.Sprintf("Failed to parse task result, due to {%s}", err))
            return
        }
        // Sum up the number of results submitted and how manu operator has submitted
        resultCntMap[taskResult.Result]++
        resultOperatorMap[taskResult.Result] = append(resultOperatorMap[taskResult.Result], taskResult.Operator)
        // If the number of results submitted is larger then a predefined threshold. 
        // Mark it as done on Redis (avoid duplicated send), submit to BVS contract
        // and remove the processing record from Redis
        if resultCntMap[taskResult.Result] >= core.C.App.Threshold {
            pkTaskFinished := fmt.Sprintf("%s%d", core.PkTaskFinished, taskId)
            // Set as finished
            if err := core.S.RedisConn.Set(ctx, pkTaskFinished, taskResult.Result, 0).Err(); err != nil {
                core.L.Error(fmt.Sprintf("Failed to set task finished, due to {%s}", err))
                return
            }
            // Submit to BVS contract
            operators := strings.Join(resultOperatorMap[taskResult.Result], "&")
            core.L.Info(fmt.Sprintf("Task {%d} is finished. The result is {%d}. The operators are {%s}", taskId, taskResult.Result, operators))
            if err := m.sendTaskResult(taskId, taskResult.Result, operators); err != nil {
                core.L.Error(fmt.Sprintf("Failed to send task result, due to {%s}", err))
            }
            // Remove processing recordes from Redis
            pkTaskOperator := fmt.Sprintf("%s%d", core.PkTaskOperator, taskId)
            core.S.RedisConn.Del(ctx, pkTaskResult)
            core.S.RedisConn.Del(ctx, pkTaskOperator)
            break
        }
    }
}

// sendTaskResult sends the task result to BVS contract via the BVSSquaring API
func (m *Monitor) sendTaskResult(taskId uint64, result int64, operators string) error {
    fmt.Println("sendTaskResult", taskId, result, operators)

    // Create a new BvsSquaring interface
    bvsSquaring := BvsSquaringApi.NewBVSSquaring(m.chainIO)
    bvsSquaring.BindClient(m.bvsContract)
    // Send result to BVS Contract
    _, err := bvsSquaring.RespondToTask(context.Background(), int64(taskId), result, operators)
    if err != nil {
        return err
    }

    return nil

}

// Check if the operator is registered with BVS contract
func (m *Monitor) VerifyOperator(operator string) (bool, error) {
    rsp, err := m.bvsDirectoryApi.QueryOperator(operator, operator)
    if err != nil {
        core.L.Error(fmt.Sprintf("Failed to query operator, due to {%s}", err))
        return false, err
    }
    fmt.Printf("txnRsp: %+v\n", rsp)
    if rsp.Status == "registered" {
        return true, nil
    }

    return false, nil
}
```

That concludes most of the aggregator flow. If you are paying attention, you SHOULD (and I mean RFC 2119 SHOULD) be questioning "where is the code that accepts input from the off-chain compute process? It is in another file.<br>

```go
type Payload struct {
    TaskId    uint64 `json:"taskID" binding:"required"`
    Result    int64  `json:"result" binding:"required"`
    Timestamp int64  `json:"timestamp" binding:"required"`
    Signature string `json:"signature" binding:"required"`
    PubKey    string `json:"pubKey" binding:"required"`
}

// Aggregator handles the aggregator endpoint for the API.
//
// It parses the payload from the request body and verifies the signature.
// It checks if the timestamp is within the allowed range.
// It verifies if the task is finished and if the operator has already sent the task.
// If all checks pass, it saves the task to the queue.
// It returns an HTTP response with the status of the operation.
func Aggregator(c *gin.Context) {
    // parse payload
    var payload Payload
    if err := c.ShouldBindJSON(&payload); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }
    fmt.Printf("payload: %+v\n", payload)

    // get current timestamp, make sure it is within a defined limit
    nowTs := time.Now().Unix()
    if payload.Timestamp > nowTs || payload.Timestamp < nowTs-60*2 {
        c.JSON(http.StatusBadRequest, gin.H{"error": "timestamp out of range"})
        return
    }

    // verify signature
    pubKey, address, err := util.PubKeyToAddress(payload.PubKey)
    if err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }
    fmt.Printf("pubKey: %s\n", pubKey)
    fmt.Printf("address: %s\n", address)
    fmt.Printf("payload.PubKey: %s\n", payload.PubKey)

    // The Aggregator reconstructs the payload and validaes both that
    // 1. The same msgPayload is created by the off-chain process
    // 2. The off-chain process indeed signed the message and it is not altered
    msgPayload := fmt.Sprintf("%s-%d-%d-%d", core.C.Chain.BvsHash, payload.Timestamp, payload.TaskId, payload.Result)
    msgBytes := []byte(msgPayload)
    if isValid, err := signer.VerifySignature(pubKey, msgBytes, payload.Signature); err != nil || !isValid {
        c.JSON(http.StatusBadRequest, gin.H{"error": "invalid signature"})
        return
    }

    // verify task hasn't already been finished
    pkTaskFinished := fmt.Sprintf("%s%d", core.PkTaskFinished, payload.TaskId)
    if isExist, err := core.S.RedisConn.Exists(c, pkTaskFinished).Result(); err != nil || isExist == 1 {
        c.JSON(http.StatusBadRequest, gin.H{"error": "task already finished"})
        return
    }

    // Check the operator is valid (see annotaion above)
    if ok, err := svc.MONITOR.VerifyOperator(address); err != nil || !ok {
        c.JSON(http.StatusBadRequest, gin.H{"error": "invalid operator"})
        return
    }

    // verify we haven't sent the result yet
    taskOperatorKey := fmt.Sprintf("%s%d", core.PkTaskOperator, payload.TaskId)
    if result, err := core.S.RedisConn.Eval(c, core.LuaScript, []string{taskOperatorKey}, address).Result(); err != nil || result.(int64) == 1 {
        c.JSON(http.StatusBadRequest, gin.H{"error": "task already send"})
        return
    }

    // save task to queue to be sent to the BVS contract
    task := core.Task{TaskId: payload.TaskId, TaskResult: core.TaskResult{Operator: address, Result: payload.Result}}
    taskStr, err := json.Marshal(task)
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }
    if _, err := core.S.RedisConn.LPush(c, core.PkTaskQueue, taskStr).Result(); err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }

    c.JSON(http.StatusOK, gin.H{"status": "success"})
}
```


# Annotation of the Reward Uploader

```go
type Uploader struct {
    bvsContract        string
    delegation         api.Delegation
    chainIO            io.ChainIO
    rewardsCoordinator api.RewardsCoordinator
}

func NewUploader() *Uploader {
    // Initializes the loggr and ChainIO. I'm not explaining this part the 5th time.
    // Please refer to other partos of the demo program regarding how this section
    // works.
    elkLogger := logger.NewELKLogger("bvs_demo")
    reg := prometheus.NewRegistry()
    metricsIndicators := transactionprocess.NewPromIndicators(reg, "bvs_demo")
    chainIO, err := io.NewChainIO(core.C.Chain.Id, core.C.Chain.Rpc, core.C.Owner.KeyDir, core.C.Owner.Bech32Prefix, elkLogger, metricsIndicators, types.TxManagerParams{
        MaxRetries:             3,
        RetryInterval:          1 * time.Second,
        ConfirmationTimeout:    60 * time.Second,
        GasPriceAdjustmentRate: "1.1",
    })
    if err != nil {
        panic(err)
    }
    client, err := chainIO.SetupKeyring(core.C.Owner.KeyName, core.C.Owner.KeyringBackend)
    if err != nil {
        panic(err)
    }
    txResp, err := api.NewBVSDirectoryImpl(client, core.C.Chain.BvsDirectory).GetBVSInfo(core.C.Chain.BvsHash)
    if err != nil {
        panic(err)
    }
    delegation := api.NewDelegationImpl(client, core.C.Chain.DelegationManager)
    rewardsCoordinator := api.NewRewardsCoordinator(client)
    rewardsCoordinator.BindClient(core.C.Chain.RewardCoordinator)
    return &Uploader{
        chainIO:            client,
        delegation:         delegation,
        bvsContract:        txResp.BVSContract,
        rewardsCoordinator: rewardsCoordinator,
    }
}

// The Reward Uploader listens to the TaskResponded event then calculates how much each
// operator and staker earns.
func (u *Uploader) Run() {
    // Create an indexer to listen on new events. This part is quite standard thus
    // detailed descriptions would be skipped
    ctx := context.Background()
    blockNum := u.getBlock(ctx)
    fmt.Println("latestBlock: ", blockNum)
    evtIndexer := indexer.NewEventIndexer(
        u.chainIO.GetClientCtx(),
        u.bvsContract,
        blockNum,
        []string{"wasm-TaskResponded"},
        1,
        5)
    evtChain, err := evtIndexer.Run(ctx)
    if err != nil {
        panic(err)
    }
    fmt.Println("chain: ", evtChain)
    for evt := range evtChain {
        switch evt.EventType {
        case "wasm-TaskResponded":
            blockHeight := evt.BlockHeight
            txnHash := evt.TxHash
            taskId := evt.AttrMap["taskId"]
            taskResult := evt.AttrMap["result"]
            taskOperators := evt.AttrMap["operators"]
            fmt.Printf("[TaskResponded] blockHeight: %d, txnHash: %s, taskId: %s, taskResult: %s, taskOperators: %s\n", blockHeight, txnHash, taskId, taskResult, taskOperators)
            // Calculate the reward
            u.calcReward(ctx, blockHeight, taskId, taskOperators)
        default:
            fmt.Printf("Unknown event type. evt: %+v\n", evt)
        }
    }
}

// Queries an RPC node about the latest block height
func (u *Uploader) getBlock(ctx context.Context) int64 {
    res, err := u.chainIO.QueryNodeStatus(ctx)
    if err != nil {
        panic(err)
    }
    latestBlock := res.SyncInfo.LatestBlockHeight
    return latestBlock
}

// This is where is real "magic" happens. calcReward() calculates rewards for each
// operator and staker.
func (u *Uploader) calcReward(ctx context.Context, blockHeight int64, taskId string, operators string) {
    // Set on redis to make sure we don't process the same event twice
    if core.S.RedisConn.SIsMember(ctx, core.PkSaveTask, taskId).Val() {
        fmt.Println("task already processed: ", taskId)
        return
    }
    core.S.RedisConn.SAdd(ctx, core.PkSaveTask, taskId)
    
    // Grab the number of operators, then calculate the portion of rewards each operator
    // should get.
    operatorList := strings.Split(operators, "&")
    operatorCnt := len(operatorList)
    operatorAmount := core.C.Reward.Amount / float64(operatorCnt)
    fmt.Println("operatorAmount: ", operatorAmount)

    submissionMap := make(map[string]*Submission)
    totalEarners := make([]Earner, 0)
    // core.C.Reward.OperatorRatio is the amount of reward for operators
    // (therefor 1 - core.C.Reward.OperatorRatio is the amount for stakers)
    sAmount := operatorAmount * core.C.Reward.OperatorRatio / 100
    oAmount := operatorAmount - sAmount
    fmt.Println("sAmount: ", sAmount)
    fmt.Println("oAmount: ", oAmount)
    // Loop through the operators and calculate how much each staker earns
    // propotional to their stake
    for _, operator := range operatorList {
        // Query the stakers staked to the operators
        txnRsp, err := u.delegation.GetOperatorStakers(operator)
        if err != nil {
            fmt.Println("get operator stakers err: ", err)
        }
        fmt.Println("GetOperatorStakers txnRsp: ", txnRsp)
        totalStakerAmount := 0.0
        earners := make([]Earner, 0)
        // Sum up the amount each staker staked. For each staker:
        for _, staker := range txnRsp.StakersAndShares {
            stakerAmount := 0.0
            earnerTokens := make([]*TokenAmount, 0)
            // Loop through all it's staked strategy, collect the staked amount
            // and tokens in stake
            for _, strategy := range staker.SharesPerStrategy {
                amount, err := strconv.ParseUint(strategy[1], 10, 0)
                if err != nil {
                    fmt.Println("parse float err: ", err)
                    continue
                }
                strategyAmount := float64(amount)
                stakerAmount += strategyAmount
                strategyToken, err := u.rpcUnderlyingToken(strategy[0])
                if err != nil {
                    fmt.Println("get strategy token err: ", err)
                    continue
                }
                earnerTokens = append(earnerTokens, &TokenAmount{
                    Strategy:     strategy[0],
                    Token:        strategyToken,
                    RewardAmount: "",
                    StakeAmount:  strategyAmount,
                })
            }
            // save the staker into a earners list
            earners = append(earners, Earner{
                Earner:           staker.Staker,
                TotalStakeAmount: stakerAmount,
                Tokens:           earnerTokens,
            })
            totalStakerAmount += stakerAmount
        }

        fmt.Println("totalStakerAmount: ", totalStakerAmount)
        // Given we have collected who and how much each staker has. Now calculate
        // the amount to be rewarded to each of them.
        for _, s := range earners {
            if totalStakerAmount == 0.0 || s.TotalStakeAmount == 0.0 {
                continue
            }
            stakerReward := sAmount * (s.TotalStakeAmount / totalStakerAmount)
            for _, t := range s.Tokens {
                rewardAmount := stakerReward * t.StakeAmount / s.TotalStakeAmount
                if rewardAmount == 0.0 {
                    continue
                }
                fmt.Println("rewardAmount: ", rewardAmount)
                t.RewardAmount = strconv.FormatFloat(math.Floor(rewardAmount), 'f', -1, 64)
                if a, ok := submissionMap[t.Strategy]; !ok {
                    submissionMap[t.Strategy] = &Submission{
                        Strategy: t.Strategy,
                        Token:    t.Token,
                        Amount:   rewardAmount,
                    }
                } else {
                    a.Amount += rewardAmount
                }
            }
        }
        operatorStrategyToken, err := u.rpcUnderlyingToken(core.C.Reward.OperatorStrategy)
        if err != nil {
            fmt.Println("get strategy token err: ", err)
            continue
        }
        // Also add the reward for the operators
        if a, ok := submissionMap[core.C.Reward.OperatorStrategy]; !ok {
            submissionMap[core.C.Reward.OperatorStrategy] = &Submission{
                Strategy: operatorStrategyToken,
                Token:    operatorStrategyToken,
                Amount:   oAmount,
            }
        } else {
            a.Amount += oAmount
        }
        // append the operators to the list of rewards
        operatorRewardAmount := strconv.FormatFloat(math.Floor(oAmount), 'f', -1, 64)
        earners = append(earners, Earner{
            Earner:           operator,
            TotalStakeAmount: oAmount,
            Tokens: []*TokenAmount{
                {
                    Strategy:     core.C.Reward.OperatorStrategy,
                    Token:        operatorStrategyToken,
                    RewardAmount: operatorRewardAmount,
                    StakeAmount:  oAmount,
                },
            },
        })
        fmt.Printf("earners: %+v\n", earners)
        totalEarners = append(totalEarners, earners...)
    }

    // now we convert the calculated earn for each recepient into reward submissions
    // and put them into an array
    submissions := make([]Submission, 0)
    for _, submission := range submissionMap {
        submissions = append(submissions, *submission)
        fmt.Printf("strategy: %s, token: %s, amount: %f\n", submission.Strategy, submission.Token, submission.Amount)
    }
    fmt.Printf("earners: %+v\n", totalEarners)

    // Submit the reward submissions.
    if err := u.rpcSubmission(submissions); err != nil {
        fmt.Println("rpc submission err: ", err)
        return
    }
    // Append the new submission result into the reward merkle tree. This structure makes
    // colleting rewards easy for receipents
    rootHash, err := u.merkleTree(totalEarners)
    if err != nil {
        fmt.Println("merkle tree err: ", err)
        return
    }
    fmt.Printf("root Hash: %s\n", rootHash)
    // Submit the merkel tree root to Rewards Corrdinator
    if err := u.rpcSubmitHashRoot(rootHash); err != nil {
        fmt.Println("rpc root hash err: ", err)
        return
    }
}

// Given a list of rewards. merkleTree() makes a merkle tree and return the
// starting node hash
func (u *Uploader) merkleTree(earners []Earner) (string, error) {
    // calc earner token merkle tree
    earnerNodes := make([]*MerkleNode, 0)
    for _, earner := range earners {
        tokenHash := u.calcTokenLeafs(earner.Tokens)
        earnerHash, err := u.rpcEarnerLeafHash(earner.Earner, tokenHash)
        if err != nil {
            fmt.Println("calc earner hash err: ", err)
            return "", err
        }
        earnerNodes = append(earnerNodes, &MerkleNode{Hash: earnerHash})
    }

    root := u.calcMerkleTree(earnerNodes)
    return root.Hash, nil
}

// Computes the hash of ceah node and turn it into a tree
func (u *Uploader) calcTokenLeafs(tokens []*TokenAmount) string {
    tokenNodes := make([]*MerkleNode, 0)
    for _, token := range tokens {
        hash, err := u.rpcTokenHash(token)
        if err != nil {
            fmt.Println("calc token hash err: ", err)
            continue
        }
        tokenNodes = append(tokenNodes, &MerkleNode{Hash: hash})
    }
    fmt.Println("tokenHashs: ", tokenNodes)
    root := u.calcMerkleTree(tokenNodes)
    return root.Hash
}

func (u *Uploader) calcMerkleTree(nodes []*MerkleNode) *MerkleNode {
    // calc merkle tree into a balanced binary tree
    for len(nodes) > 1 {
        if len(nodes)%2 != 0 {
            nodes = append(nodes, nodes[len(nodes)-1])
        }
        var newLevel []*MerkleNode
        for i := 0; i < len(nodes); i += 2 {
            var left, right *MerkleNode
            left = nodes[i]
            right = nodes[i+1]
            leaves := []string{left.Hash, right.Hash}
            rootHash, err := u.rpcMerkleizeLeaves(leaves)
            if err != nil {
                fmt.Println("merkleizeLeaves err: ", err)
                continue
            }
            newNode := &MerkleNode{
                Left:  left,
                Right: right,
                Hash:  rootHash,
            }
            newLevel = append(newLevel, newNode)
        }
        nodes = newLevel
    }
    return nodes[0]
}
```


# Introduction

Welcome to Cube, the official liquid staking token (LST) for BABY on Babylon Genesis.

## Cube by SatLayer

Built on Babylon Genesis, Cube by SatLayer enables users to stake BABY and receive cBABY, our liquid staking token for BABY, that can be used across DeFi, restaking, and other applications — all while continuing to earn staking rewards.

With Cube, you can unlock capital efficiency and composability, as you can participate in securing Babylon Genesis while putting your staked BABY to work elsewhere in the ecosystem.

Cube is fully integrated with SatLayer’s restaking layer, enabling cBABY holders to opt in to restaking and help secure Bitcoin Validated Services (BVS) from day one.

## Why Cube

When you stake your BABY with Cube, it is

* Native to Babylon Genesis — Built specifically on the Babylon Genesis mainnet without requiring bridging to another Cosmos chain
* Liquid and flexible — Maintain staking rewards while using cBABY in DeFi
* Restaking-ready — cBABY holders can restake and earn additional yield from SatLayer's restaking layer
* Secure and audited — Backed by SatLayer’s infrastructure and audited smart contracts


# Understanding the LST

Learn more about Cube by SatLayer's liquid staking architecture

## Overview

In native staking, you delegate your BABY tokens to validators to help secure Babylon Genesis and earn staking rewards. However, tokens natively staked are locked and illiquid — meaning you cannot use or transfer them until you request to unstake, and wait till the unbonding process is completed.

In contrast, Cube allows you to stake BABY and immediately receive cBABY, a liquid representation of your staked BABY position. This is what we refer to as a liquid staking token (LST). The LST can be used in DeFi or restaked via SatLayer, while continuing to accrue rewards from the underlying BABY staking.

| Feature                                         | Natively staked BABY                          | cBABY           |
| ----------------------------------------------- | --------------------------------------------- | --------------- |
| Reward accrual                                  | Yes                                           | Yes             |
| Asset liquidity                                 | Not at any point, until unbonding is complete | Yes, with cBABY |
| Usable in DeFi                                  | No                                            | Yes             |
| Usable as restaking collateral through SatLayer | No                                            | Yes             |
| Transferrable                                   | No because it's staked natively               | Yes             |

## Staking and unstaking

We use staking as bonding, and unstaking as unbonding. These terms can be used interchangeably throughout the whole Cube by SatLayer docs.

* **Staking** is when you stake BABY through Cube, you mint cBABY tokens at the current exchange rate. BABY is bonded behind-the-scenes to Babylon validators, and this process is managed by Cube's staking contracts automatically.
* **Unstaking** is when you initiate the withdrawal of the underlying BABY by burning your cBABY. Once the unbonding period ends (as defined in [Babylon's epoching module design](https://docs.babylonlabs.io/guides/architecture/babylon_genesis_modules/epoching/#babylons-epoching-module-design)), you will then be able to claim your BABY through our app.

cBABY is also looking to support instant liquidity through secondary markets or LP pools such as on [Tower](https://app.tower.fi/pools), offering faster access than traditional unbonding, although there may be a slight discount priced in by the market.

## Exchange rate calculations

Cube by SatLayer uses the non-rebasing approach to accrue yield. This means that the value of cBABY increases over time to reflect accrued staking rewards. The exchange rate between cBABY and BABY is calculated as:

$$
R=BABY/cBABY
$$

Where:

* $$R$$ is the exchange rate used when staking or unstaking
* $$BABY$$ is the [total amount of bonded BABY](https://www.mintscan.io/babylon/address/bbn1tng5u7fls4lyg356zkh2g32e80a286m8p2n0hqugc5467n9y6nksamehyj) that exists in Cube's contract, which includes the staked BABY tokens and rewards that are claimed, less a small fee that goes to maintain the LST protocol and infrastructure, and will not included unbonded BABY
* $$cBABY$$ is the [total amount of cBABY](https://www.mintscan.io/babylon/wasm/contract/bbn17y5zvse30629t7r37xsdj73xsqp7qsdr7gpnh966wf5aslpn66rq5ekwsz?sector=queries) issued by Cube's contract in exchange for BABY stakes by users

When BABY rewards are claimed and added to Cube's main LST contract, the value of each cBABY token increases, rather than the number of cBABY tokens held. In other words, your cBABY will not change, but you will receive more BABY tokens when you request to unstake.

Using this non-rebasing approach allows us to ensure rewards are not diluted because of new stakers, and to ensure that long-term holders of cBABY are rewarded with the staking yield proportionately.

An example of this can be illustrated as follows:

* Bling, the Babyloong, deposits 1,000 BABY → receives 1,000 cBABY (at a 1:1 exchange rate at the start of the protocol's inception)
* Over time, 50 BABY as staking rewards accumulate and are added to the LST hub contract. The new exchange rate is now 1.05 BABY per cBABY because there are now 1,050 BABY for 1,000 cBABY issued
* Bling's 1,000 cBABY is now redeemable for 1,050 BABY

We use APY as a measure of yield because the BABY rewards will be claimed automatically by Cube's contracts . We also have a small fee charged so that we can maintain and to ensure continuous development on the LST protocol itself.


# How to Stake

Learn how to liquid stake your BABY on Cube by SatLayer

This guide covers how to:&#x20;

* Stake BABY to mint cBABY
* Automatically restake cBABY to earn [additional restaking yield](/#how-satlayer-generates-yield) on top of staking rewards

## Staking BABY

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdelPruvWEsIC0R_AZCGqxAxwqt1BbnHWo_X2dxVsD2YdPUzoBGed4t2ErwxdGDSxqwzjX7RtPFENQ0AegIxAVyHizKi9P8tj4zUUy8ptXp2Qg041MKtUNTjHvBUimCSNVphTGiqQ?key=JkNfYo-bJB9Eky3KL74oVBOi" alt=""><figcaption></figcaption></figure>

{% stepper %}
{% step %}

### **Connect your wallet**

* Make sure you're using a supported wallet: Keplr, Leap or OKX Wallet.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXe8LlasrveTIs5fcfyjuG9XRu2DFfq94FxX2OKVASshTvKmRgwSa4nas4dIZMkx6tw2NoW0jqnaETPmJGKfGBcKUy_SkL0te7N_1z9O_IpjhERFA3-Z4JQfwNtrchxM0dz5xmIy?key=JkNfYo-bJB9Eky3KL74oVBOi" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdUIElw495bos3hT129BxBznja1f7nyivkBCpLAdsGg2gdwVGopUR_jQaDBM7ksawNZOwXlbjIgBrkxnegNO9mFqpWrAgEycVIVIBKW5QGF6rXP-Cl0uqXlqe4eclEVc209LDOQNg?key=JkNfYo-bJB9Eky3KL74oVBOi" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### **Enter staking amount**&#x20;

* Input how much BABY you want to stake.
* You'll see a preview of how much cBABY you'll receive (initially approx. 1:1, but the exchange rate will change as staking rewards are accrued).

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfsaDO39kXyhkMIWBZYZMSY9nas3zXO910fd7xUw9xgpv_eilmLxu6LG53cCr1SuHFVDuiX9qt_ZeaFivYls_JPfF34o7sKzY7JC7Afb-Rs5sSghmhPWNVEd98aJON0hMga1U0UfQ?key=JkNfYo-bJB9Eky3KL74oVBOi" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### **Confirm your stake**

* Click the Stake button.
* Approve the transaction in your wallet and pay the required network fees.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfDYhoP1BQlG_btE9BXt_tP2ijkdmIzoZy0zOwB1AemHvWRwu2m0QBDbSWRqQ1G9ObetogVe5gw_OqIstqi-8wnmV6WmHRl0OmE3ybJm2XANRJ4RZ6NctqrOxb1LSn98zBD1n9JwA?key=JkNfYo-bJB9Eky3KL74oVBOi" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Success! Your BABY is now staked and restaked, earning both staking rewards and BVS yield.
{% endhint %}
{% endstep %}
{% endstepper %}

***

## Auto-restaking

<figure><img src="/files/VqumwcscXbZyrze3EpWc" alt=""><figcaption></figcaption></figure>

* By default, the “Automatically restake your cBABY on SatLayer” checkbox is **enabled**, allowing you to earn additional restaking yield on top of staking rewards.
* When selected, your cBABY is securely deposited into [SatLayer's restaking vault](https://app.satlayer.xyz/vaults/babylon) for cBABY, where it begins generating extra rewards. You can monitor your restaked balance directly in the dashboard above.

{% hint style="info" %}
**Prefer not to restake?** Simply uncheck the box before confirming your transaction.

**Changed your mind later?** No worries — you can manually restake anytime by visiting [this page](https://app.satlayer.xyz/vaults/babylon) or clicking the “Restake and earn more now!” banner on the right-hand side of the page.&#x20;

**Need help restaking BABY?** Check out the guide [here](/depositors/how-to-restake#restaking-on-babylon-genesis).
{% endhint %}

<figure><img src="/files/xSoqXVnafPXe71EaO3Eq" alt=""><figcaption></figcaption></figure>

***

## Unstaking cBABY

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfDzM1zRQ2_5KmsXis09V0f7RM_iLN00W1UBgCEC2EgikYMwUJatAXcBws-FZFg91QJajKfutJ3DwiQke-0hzjALGt09NptaWhjDpmHhL02yVo1DSO0DR3NpqaYEE53ZONxAtXCGg?key=JkNfYo-bJB9Eky3KL74oVBOi" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Note: If you've restaked your cBABY, you’ll need to first withdraw your restaked shares to retrieve your cBABY. Only then can you unstake cBABY to receive BABY. &#x20;

Follow the steps [here](/depositors/how-to-restake#withdrawing-restaked-shares) to withdraw your restaked shares.
{% endhint %}

{% stepper %}
{% step %}

### Select unstake method

* Standard: 4–21 day withdrawal period, no fees
* Instant (coming soon): \~1–5 minutes, with variable price impact

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXf4HliI8Y0FeNrGdN-faC5F04utYgU1vLp0AdFOnRI2B7UZ5ectd280PKZP8_QNTA3eTQVYzQDYYDWAMDWtHPQa_iCGnl0mGevhhAJiOIPGZxMn8NpNVOSlb8QobeK6X_5riszY8g?key=JkNfYo-bJB9Eky3KL74oVBOi" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Enter unstake amount

* Input the amount of cBABY you'd like to unstake.
* You'll see an estimated amount of BABY you'll receive based on the current exchange rate.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdfNvK_Iv8UTxOsOdxhF0jqrAT_fdmzvzljBDMg6byfBbmmzIFOShk5OEEKgeftZInMaMycDAlXfQBmR30EsWRxIfibA5uSZhpRbItFiXOdXjGqSYeBgoMtv-Nu1Ffad0UkA_Pc?key=JkNfYo-bJB9Eky3KL74oVBOi" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Confirm unstake

* Click the Unstake button.
* Approve the transaction in your wallet and pay the required network fees.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdppfhD52opbPzgQMqIA9JbiTzcLu9ukkEHHyiSU4nZRbW6-XbDYzBC-FZhxLAdRgFZfw-U0irw6gQ0g3Eb_SAGpqdYsbdhqxaoY5FZjVJyVZWIt4KB7mGlHRoFrHwcP9VqCwSJ?key=JkNfYo-bJB9Eky3KL74oVBOi" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Success! You've successfully unstaked your cBABY.
{% endhint %}
{% endstep %}
{% endstepper %}

***

## Claiming your rewards

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXf8wTGuFl0aFj2wEj-W0NVSaXsJdafwUkE5Qrr1kdChaoekypdONOXO-mYLJ4pL81iv6Xxk7wJ6rKHMIUCGjlGRAt26fc165TDeEtfUJEiZHXGxFjUo3Agdsb7UdLc9dpBwsFr2?key=JkNfYo-bJB9Eky3KL74oVBOi" alt=""><figcaption></figcaption></figure>

Once the unstaking process is complete:

* Head to the **Claim** tab.
* You'll be able to claim:
  * Your original staked BABY
  * Any staking rewards you've earned

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdDUxyP89CZMP4-6J3Rrs_GOzSyuKNg_id0cVOU_G_xQUkha3BtAbAc9Tv6s3mtLGwtBcJLrm-sdQ5N2rw1XBofUFNS6G4hWdaL6858hcJgrClG-GhaI7Udrh9R8a08sjwnFGz5?key=JkNfYo-bJB9Eky3KL74oVBOi" alt=""><figcaption></figcaption></figure>

* Click the Claim button.
* Approve the transaction in your wallet and pay the required network fees.

{% hint style="info" %}
Note: A 10% fee applies only to rewards — your principal is untouched.
{% endhint %}

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfMc2D5GPaUF0sEogEej1rOsadQVyYU_lyJ_2EcPR6SQ-xQkegNhgIqny7BzoeCn8YM-1rfEGwIi-ssIoEfBZSQgf1cXBrIWN7AaafY-4JnauT-ogPTitCE0H7OTqhgwuAZRsyw?key=JkNfYo-bJB9Eky3KL74oVBOi" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
All set! You’ve successfully claimed your BABY rewards.
{% endhint %}


# Cube and cBABY FAQ

<details>

<summary>What staking rewards do I get from staking BABY?</summary>

You'll earn Sats² rewards for staking BABY on Cube.

Live points will be available soon, but all rewards will be applied retroactively—so you won't miss out.

</details>

<details>

<summary>Is CUBE on EVM?</summary>

No, Cube is not on EVM.

Cube is a liquid staking protocol built natively on the Babylon Genesis blockchain, a Cosmos SDK-based chain.

</details>

<details>

<summary>Will Sats² rewards be retroactively applied to early LPs in the cBABY/BABY pool on Tower DEX?</summary>

Yes, your Sats² rewards  will be retroactively added once we integrate support for $cBABY on our app.satlayer.xyz dashboard.SatLayer adds another layer of yield on Tower through our Sats² rewards system.<br>

* LPing into the cBABY/BABY pool earns a 2x multiplier on Sats²
* Both tokens (cBABY and BABY) are included in the calculation
* All rewards are retroactive, so early LPs are not left behind<br>

This means you’re accumulating Sats² the moment you enter the cBABY/BABY pool—boosting your long-term upside across SatLayer’s ecosystem.

</details>

<details>

<summary>Will Tower support more SatLayer cBABY's liquidity pools such as .... ?</summary>

Tower will soon also support satUniBTC.e / uniBTC pool, providing boosted Sats² rewards, Union rewards, Bedrock Diamond points, and more!

</details>


# SatLayer Brand Guidelines

Brand guidelines and media kit for using the SatLayer brand

Welcome to the SatLayer Brand Guidelines. You can find information here on the proper usage of SatLayer's brand assets to ensure consistent representation across all platforms and communications.

## Using SatLayer as a name

You can refer to us as **SatLayer**, stylized with a capital 'L', and not as Satlayer with a lowercase 'l'.

## Boilerplate for press releases

You may use the following boilerplate.

<details>

<summary>About SatLayer</summary>

The new financial system, built on Bitcoin: SatLayer is the economic layer for Bitcoin, making the best asset now fully programmable.

Bitcoin isn’t idle gold anymore. SatLayer leverages restaking primitives to evolve Bitcoin into an active reserve asset, anchoring secure, capital-efficient DeFi and RWA systems. As the Bitcoin restaking partner for Sui and Berachain — and the exclusive restaking partner of Babylon Labs—SatLayer collaborates with top revenue-generating projects to develop use cases like on-chain insurance and liquidity float, driving real and sustainable yield.

</details>

## Media kit

You can access our full media kit [at this link](https://drive.google.com/drive/folders/1TftkNS5Cdy-DO5kshX6DFNYIOiNz3mly), which includes our logos, token logos used within the SatLayer ecosystem, and more.

<figure><img src="/files/wq5rFX8W8bkjZ3lbzwS4" alt=""><figcaption><p>Preview of the SatLayer media kit</p></figcaption></figure>

## Logo

We have a few logos in the media kit for use in various backgrounds and in various formats.

<figure><img src="/files/YhYfeufif5doX8yxhnx5" alt="" width="180"><figcaption><p>The SatLayer logo</p></figcaption></figure>

## Colors

Our primary and secondary colours are shown below.

<figure><img src="/files/4kuqMMfyDLqO67PgmlRx" alt="" width="375"><figcaption></figcaption></figure>

## Fonts

Our logotype font is Handel Gothic by Donald J. Handel.

<figure><img src="/files/UBZ1fLVK6T4RZGbDlEDl" alt="" width="155"><figcaption></figcaption></figure>

Our primary headline font is [Aeonik](https://cotypefoundry.com/font-family/aeonik) by CoType Foundry.

<figure><img src="/files/4v5f89OLuLeMF1tuLIrS" alt="" width="563"><figcaption></figcaption></figure>

Our body and interface font is [Inter](https://fonts.google.com/specimen/Inter), which is a free and open-source font available on Google Fonts.

<figure><img src="/files/yz8fyPdVtylM3UuGmYvr" alt="" width="563"><figcaption></figcaption></figure>


# How to Yap

Learn how to maximize your Yaps prior to SatLayer's TGE.

From now until our TGE (Token Generation Event), SatLayer is allocating up to **0.75%** **of the upcoming token supply** to reward SatLayer yappers:

* 0.5% to SatLayer Yappers
* 0.25% to broader Kaito ecosystem

### Reward Breakdown

* **Total Rewards:** 0.75% of the total token supply&#x20;
* **Distribution Period:** until TGE
* **Snapshot Duration:** 30 days each&#x20;
* **Eligibility:** Top Yappers per snapshot period, based on SatLayer Yapper Leaderboard mindshare.

{% hint style="info" %}
Your eligibility will be determined by a monthly snapshot based on leaderboard rankings and your share of total mindshare during each **30-day snapshot period.**
{% endhint %}

***

## Yapper Tasks

Compete, yap, and earn every month by completing the following tasks before the end of each snapshot period:

### **1. Become an Ace of the Week**&#x20;

The SatLayer team will select yappers on the leaderboard for the week based on the quality, accuracy and but not limited to the creativity of the content they post. Attaining the Ace role might come with added perks when snapshots are tallied.

{% hint style="info" %}
[Learn more](https://blog.satlayer.xyz/introducing-kaito-yapper-aces/) about our Ace of the Week program.
{% endhint %}

### **2. Rank on SatLayer's Kaito Yapper Leaderboard**&#x20;

<figure><img src="/files/47LgobqnR1umb7ct8hdU" alt=""><figcaption></figcaption></figure>

Every **Wednesday at 10 AM UTC**, the SatLayer team checks who is ranking on the leaderboard.&#x20;

If you're on the list, expect a DM from us on Twitter with an invite to our private Telegram group — reserved for Yappers and Aces only.

Being part of this group may come with added perks and early access to announcements and alpha.

### **3. Wildcard Bounties**

Boost your upcoming token allocation by completing Wildcard Bounties before the end of the 30 day snapshot period. Random tasks will be announced every 2 weeks.&#x20;

Want a shot at boosting your token allocation? Complete wildcard missions before the 30-day snapshot period ends.

Current wildcard bounties:

{% embed url="<https://x.com/satlayer/status/1938549896417878023>" %}

### **4. Earn Sats² by restaking BTC and referring new friends**&#x20;

Restake your BTC on [SatLayer App](https://app.satlayer.xyz/) and start climbing the leaderboard to earn Sats².\
In addition, add your unique referral link to your Yapping content to earn additional Sats².

{% hint style="info" %}
Read our [SatLayer Referral Guide](https://docs.satlayer.xyz/restakers/sats-staker-rewards/referral-guide?ref=blog.satlayer.xyz) to learn more.
{% endhint %}

Track your position on the leaderboard via connecting your wallet on the [SatLayer Dashboard](https://app.satlayer.xyz/dashboard).&#x20;

{% hint style="info" %}
Sats² is designed to provide additional incentives and rewards to our early users for their contributions to SatLayer. [Learn more](/depositors/earning-sats) on our Sats² Rewards program.&#x20;
{% endhint %}

### **5.** Be first to access our new ██████ (launching soon!)&#x20;

{% embed url="<https://x.com/satlayer/status/1930233148572610675>" %}

Take the wheel in building SatLayer and the next evolution of the Bitcoin economy. More information leaking soon.  :eyes:


# Yapper Wildcard Bounties

Boost your Yapper rewards by completing these biweekly bounties!

Complete our Wildcard Bounties to boost your Yapper rewards! New bounties will be dropped every 2 weeks to test your creativity, knowledge, and passion about SatLayer.

## Wildcard Bounty #1: Mecha Comic Explainer

Create a panel comic strip that explains how SatLayer works (i.e. SatLayer ecosystem, how Bitcoin is restaked and how it fuels the new economy).<br>

<figure><img src="/files/ACY4br6bYHtD1xS6ROPJ" alt=""><figcaption></figcaption></figure>

### **Here are some tips for your comic:**

1. **Make it yours and get creative**\
   Don’t be afraid to give your comic personality whatever fits your vibe. Blend crypto culture with anime, memes, sci-fi, comedy, action — anything goes!
2. **Use SatLayer blog to add depth**\
   Ground your comic in real concepts from the [SatLayer Blog](https://blog.satlayer.xyz/) or [SatLayer Gitbook](https://docs.satlayer.xyz/). Whether it’s Bitcoin Restaking, BTCfi, or Bitcoin Validated Services, this helps make the story more informative and also easier for new readers to understand the tech behind SatLayer.
3. **Draw inspiration from SatLayer Lore and technical comic explainers**
   1. Check out our BTCity comic series as a reference point for your own story:
      1. Chapter 1: <https://x.com/satlayer/status/1925159701240782936?s=46>
      2. Chapter 2: <https://x.com/satlayer/status/1927696410163749165>
      3. Chapter 3: <https://x.com/satlayer/status/1930927717794697511>&#x20;
      4. Chapter 4: <https://x.com/satlayer/status/1933132229397696630>&#x20;
   2. Technical comic explainers from SatLayer and community:
      1. What is Bitcoin Restaking: <https://x.com/satlayer/status/1879498829940310238>
      2. Bringing Proof of Stake to Bitcoin: <https://x.com/satlayer/status/1845664348007796966><br>

### **How to Submit**

1. Post your thread on X (Twitter).
2. Tag @satlayer in your comic tweet.
3. Include the hashtag #SatLayerWildcard so we can track your submission.<br>

### **Submission Due Date**

Wednesday, July 9, 2025, 6PM (UTC+8)

## Wildcard Bounty #2: SatLayer Shorts

Create a short video (90 seconds or under) that spotlights any aspect of SatLayer — whether you’re explaining Bitcoin Restaking, showcasing the SatLayer ecosystem, or breaking down a recent announcement with your own commentary.

<figure><img src="/files/PgzKYIvmvNXTMVr8zYCE" alt=""><figcaption></figcaption></figure>

### **Here are some tips for your video:**

1. **Direct It Your Way**\
   Your short can be anything you want — an animated explainer, a VTuber commentary, a vlog, a skit, or something totally offbeat. No need to dox yourself (unless you want to), just bring the energy in whatever format fits your style.
2. **Use SatLayer blog to add depth** \
   Ground your video in real concepts from the [SatLayer Blog](https://blog.satlayer.xyz/) or [SatLayer Docs](https://docs.satlayer.xyz/). Whether it's Bitcoin Restaking, BTCfi, or Bitcoin-Validated Services (BVSs), including these in your video makes it more informative and helps new viewers better understand the tech behind SatLayer.
3. **Draw inspiration from the** [**SatLayer Tiktok**](https://www.tiktok.com/@satlayer)
   1. Vtuber style video: <https://www.tiktok.com/@satlayer/video/7517307931914784018>
   2. Luke animated: <https://www.tiktok.com/@satlayer/video/7515248974576520456>
   3. Capcut style video: <https://www.tiktok.com/@satlayer/video/7496478113107283208>
   4. SatLayer Explained: <https://www.tiktok.com/@satlayer/video/7448971557801692434>

### **How to Submit**

1. Post your video on X (Twitter).
2. Tag @satlayer in your post.
3. Include the hashtag #SatLayerShorts so we can track your submission.

### **Submission Due Date**

Wednesday, July 27, 2025, 6PM (UTC+8)

## Wildcard Bounty #3: Restake BTC & Chill

Create a Twitter thread or article that guides new users on how to Restake BTC & Chill on SatLayer.

<p align="center"><br><img src="/files/4qwFa0g2Dq65wOkNsHqE" alt="" data-size="original"></p>

### **Here are some tips for your guide:**

1. **Choose any L1/L2 network and BTC asset**\
   The choice is yours! Whether you like to restake LBTC on EVM, uniBTC on BOB, or xBTC on Sui, any network or BTC LST assets currently available on <https://app.satlayer.xyz/> are eligible for your guide.
2. **Use screenshots or video** \
   Make it easy for users to follow your guide by providing screenshots and video of your entire restaking process. Make sure to cover everything from your initial bridge to your completed restake.
3. Draw inspiration from the guides on the [SatLayer Blog](https://blog.satlayer.xyz/)
   1. [Guide: Restaking SolvBTC on EVM with SatLayer](https://blog.satlayer.xyz/guide-staking-solvbtc-on-satlayer/)
   2. [Guide: Restaking SolvBTC on EVM with SatLayer](https://blog.satlayer.xyz/guide-staking-solvbtc-on-satlayer/)
   3. [Guide: Restaking xBTC on Sui with SatLayer](https://blog.satlayer.xyz/guide-restaking-xbtc-okx-sui-satlayer/)

### **How to Submit**

1. Post your Twitter thread or Twitter Article on X (Twitter).
2. Tag @satlayer in your post.
3. Include the hashtag #SatLayerRestakeChill so we can track your submission.

### **Submission Due Date**

&#x20;Friday, August 8, 2025, 6PM (UTC+8)

## Submission Criteria

**Your submission is assessed by the SatLayer team based on these criterias:**

* **Creativity:** Your submission is original and imaginative, with execution that stands out from the rest.
* **Quality:** Content is well written and has no errors with technical accuracy, grammar, or punctuation.
* **Depth:** Substantive content (e.g. deep dive, explainer, tutorials) helping users understand SatLayer.
* **Engagement:** Content has high engagement and impressions throughout the entire snapshot.
* **Relevance:** Your content should follow the Wildcard bounty prompt and avoid going off-topic.<br>

## Terms and Conditions

* Only Yappers who rank in the top 200 on the leaderboard by the end of the snapshot period are eligible for that month's Wildcard Bounty rewards.
* Yappers may submit multiple entries, but the SatLayer team will evaluate based on quality of content instead of quantity. Your submission must be posted publicly on X (Twitter) and submitted before the deadline to be considered. Private, deleted, or late posts will not be eligible for review.
* Plagiarized content will be disqualified. All submissions must reflect your own original work and voice.
* The SatLayer team reserves the right to adjust rules, deadlines, or rewards based on campaign needs or abuse prevention.


