Contracts for the stake.link Liquid Staking Protocol
Find a file
BkChoy b835094ca5
Some checks failed
CI / Lint & Test (push) Has been cancelled
Merge pull request #163 from stakedotlink/develop
Develop -> Main
2025-08-19 10:01:08 -04:00
.github/workflows removed foundry 2024-05-09 12:16:18 -04:00
.openzeppelin allow empty deposit/withdrawal data in staking pool 2025-08-05 17:14:33 -04:00
audits polygon staking audit reports 2025-08-06 09:59:25 -04:00
contracts allow empty deposit/withdrawal data in staking pool 2025-08-05 17:14:33 -04:00
deployments deploy stPOL lst rewards splitter 2025-08-05 17:14:33 -04:00
scripts return signers[0] if no ledger signer present 2025-08-14 11:03:23 -04:00
test allow empty deposit/withdrawal data in staking pool 2025-08-05 17:14:33 -04:00
.gitignore updated config 2024-07-12 19:03:27 -04:00
.prettierrc.json fixed prettier 2024-07-15 13:52:24 -04:00
.solhint.json StakingPool contracts 2022-02-02 20:11:59 -05:00
hardhat.config.ts add ledger support 2025-08-05 17:14:33 -04:00
LICENSE.md Create LICENSE.md 2023-01-11 10:59:54 +00:00
package.json update @chainlink/contracts 2025-07-28 17:55:36 -04:00
README.md removed outdated readme docs 2023-01-11 10:45:41 -05:00
tsconfig.json updated config 2024-07-12 19:03:27 -04:00
yarn.lock update @chainlink/contracts 2025-07-28 17:55:36 -04:00

stake.link Liquid Staking Protocol

stake.link is a Liquid Staking protocol, built initially for the Chainlink Network with upcoming support for Ethereum 2.0's beacon chain. stake.link consists of the highest-quality node operators and validators to ensure a seamless and secure way to put tokens to stake.

By building on top of Chainlink Staking stake.link offers a way for users to stake their LINK across Chainlink Node Operators and in-future the wider community pool, receiving stLINK, the liquid staking receipt token that rebases rewards. stLINK is always backed by the amount of LINK staked 1:1.

Ethereum 2.0

stake.link proposes a unique way of liquid staking within the Ethereum ecosystem, by allowing both reputable and self-hosted validators to participate in the same pool. By the way of governance, any self-hosted validator has the opportunity to raise a proposal to become a whitelisted reputable validator removing the need for the validator to provide collateral by being performant.

Users who stake their ETH within the stake.link protocol will in return receive sdlETH, the liquid staking receipt token that is backed by staked ETH on the beacon chain 1:1. Users who stake ETH will see their tokens buffered, being distributed between validators who are either whitelisted or non-whitelisted, with all users receiving a blended reward rate between the two.

Technical Documentation

For more detailed technical documentation:

https://docs.stake.link/


I. Setup Locally

Requirements

Use node v14.17.4

$ nvm install 14.17.4
$ nvm use 14.17.4

Install dependencies

$ yarn

Hardhat configuration

  1. Inside hardhat.config.ts, add a provider url to the networks object for each network you would like to connect to
  2. Also replace accounts[0] with the private key of the address you will be using for contract deployments and running scripts
  3. Set env var HARDHAT_NETWORK to the network you want to deploy to and/or interact with (default is localhost)

II. Running Locally

To run hardhat and deploy all contracts, run:

$ yarn start

To run hardhat, deploy all contracts, and send a series of transactions that mock user behaviour, run:

$ yarn start-mock-data

III. Deploying Contracts

The following commands can be used both on local and non-local networks.

To deploy all contracts to the currently selected network, run:

$ yarn deploy

IV. Testing

To run all contract tests, run:

$ yarn test

To generate events for metrics testing, run:

$ yarn luv-deyta