diff --git a/docs/noop-rewards.md b/docs/noop-rewards.md new file mode 100644 index 0000000..6d07a76 --- /dev/null +++ b/docs/noop-rewards.md @@ -0,0 +1,81 @@ +--- +title: Node Operator Rewards +slug: /nodes/rewards +--- +## Withdrawing Consensus Layer Rewards + +Node Operators receive rewards in the same way as any other validator on Ethereum. However, while Execution Layer rewards are earned normally and sent to the fee recipient address configured in the Beacon Node client, Consensus Layer rewards flow through the EigenLayer contracts and normally incur a delay. + +To make the rewards withdrawal process fast and gas-efficient, Puffer has created a way for withdrawing rewards on Base L2. It requires a minimal amount of gas to withdraw rewards, and it allows validators to receive their rewards as quickly as possible and as often as they need. Node Operator Consensus Layer rewards are automatically bridged to [Base L2](https://www.base.org/) using [Everclear](https://bridge.connext.network/), which validators can withdraw in the form of pufETH. + +To withdraw rewards, Node Operators need to sign a transaction on Base by following these steps on the [Puffer Dashboard](https://launchpad.puffer.fi/Dashboard): + +1. Click the "Claim" button + +![Claim Rewards Card](../static/img/noop-rewards-1.png) + +2. Switch your wallet's network to Base. This step is necessary as the claiming process occurs on Base, and you'll need to sign a transaction there. Ensure you have sufficient ETH for gas. + +![Switch to Base](../static/img/noop-rewards-2.png) + +3. Click the "Claim" button again + +![Claim Rewards](../static/img/noop-rewards-3.png) + +4. Review the transaction details carefully, then sign it using your wallet. + +![Sign Transaction](../static/img/noop-rewards-4.png) + +5. Wait for the transaction confirmation. Once confirmed, you'll receive your rewards on Base. + +![Transaction Confirmed](../static/img/noop-rewards-5.png) + +After claiming the rewards, Node Operators can either bridge them back to Ethereum L1 or utilize them on Base L2. + +## Changing Your Rewards Recipient Address + +:::caution +Node Operators who used a smart contract (such as a multisig wallet) to register their validators on Ethereum Mainnet **MUST** set a specific rewards claimer address on Base. This step is crucial; without it, they may be unable to claim their rewards on Base. + +The reason for this requirement is that addresses on Ethereum Mainnet do not automatically correspond to the same addresses on Base. Therefore, to ensure you can access your rewards, you need to explicitly specify which address on Base should be authorized to claim them. +::: + +To change your rewards claimer address on Base, a Node Operator should follow these steps: + +1. Navigate to your [SAFE](https://app.safe.global) account +2. Select `New transaction` +3. Select `Transaction Builder` +![alt text](../static/img/change-address-23.png) +4. Enter the L1RewardManager contract address: [0xbf11b5a0d7adeb5c1f2f3dbb85169594aa90c467](https://etherscan.io/address/0xbf11b5a0d7adeb5c1f2f3dbb85169594aa90c467) +![alt text](../static/img/change-address-4.png) + +5. Select `Use Implementation ABI` + +![alt text](../static/img/change-address-5.png) + +6. Set the `ETH value` amount to a small number, e.g., `0.000042`, this is the relayer fee to pay the bridge who will broadcast the transaction to Base. +7. Set the `Contract Method Selector` to `setL2RewardClaimer` +8. Set the `bridge (address)` to Everclear's bridge address [0x8898B472C54c31894e3B9bb83cEA802a5d0e63C6](https://etherscan.io/address/0x8898b472c54c31894e3b9bb83cea802a5d0e63c6) +9. Enter your new rewards claimer address that you control on Base +10. Click `Add transaction` and then sign the generated SAFE transaction +![alt text](../static/img/change-address-678910.png) +11. Wait for the transaction to be bridged from Ethereum Mainnet to Base Layer 2. This process typically takes between 3 to 6 hours, but may take longer if the relayer fee is insufficient. +12. After the transaction is confirmed on Base, the Node Operator can now claim rewards using the specified rewards claimer address on Base. + +:::note +Externally Owned Accounts (EOAs) do not need to perform this step. For EOAs, rewards will automatically be sent to the same Node Operators address that registered the validators on Ethereum Mainnet. +::: + +# How Rewards Are Calculated + +Rewards are distributed daily, with the exception of the first distribution, which includes all rewards accumulated since Puffer's mainnet launch. + +For each daily interval, Puffer's Guardians perform the following steps: +1. Compute individual rewards for each Node Operator (sum of all of their associated validators) +2. Calculate the total rewards for the previous intervals +3. Create and publish a Merkle tree of rewards, storing it on AWS S3 +4. Mint pufETH tokens and transfer them to the Base Layer 2 network +5. Enforce a mandatory waiting period to revert in case of a security vulnerability +6. Once the waiting period ends, Node Operators can claim their rewards through the L2RewardManager contract on Base using the [Puffer Dashboard](https://launchpad.puffer.fi/Dashboard) + +![Rewards Claiming on Base](../static/img/fwr.png) \ No newline at end of file diff --git a/sidebars.js b/sidebars.js index 989d723..ecbcc88 100644 --- a/sidebars.js +++ b/sidebars.js @@ -43,7 +43,7 @@ const sidebars = { { type: "category", label: "Node Operators", - items: ["requirements", "setup", "registration"], + items: ["requirements", "setup", "registration", "noop-rewards"], }, { type: "category", diff --git a/static/img/change-address-23.png b/static/img/change-address-23.png new file mode 100644 index 0000000..32fe7ac Binary files /dev/null and b/static/img/change-address-23.png differ diff --git a/static/img/change-address-4.png b/static/img/change-address-4.png new file mode 100644 index 0000000..697cd20 Binary files /dev/null and b/static/img/change-address-4.png differ diff --git a/static/img/change-address-5.png b/static/img/change-address-5.png new file mode 100644 index 0000000..374843a Binary files /dev/null and b/static/img/change-address-5.png differ diff --git a/static/img/change-address-678910.png b/static/img/change-address-678910.png new file mode 100644 index 0000000..6ffc45d Binary files /dev/null and b/static/img/change-address-678910.png differ diff --git a/static/img/fwr.png b/static/img/fwr.png new file mode 100644 index 0000000..7f7842f Binary files /dev/null and b/static/img/fwr.png differ diff --git a/static/img/noop-rewards-1.png b/static/img/noop-rewards-1.png new file mode 100644 index 0000000..5522056 Binary files /dev/null and b/static/img/noop-rewards-1.png differ diff --git a/static/img/noop-rewards-2.png b/static/img/noop-rewards-2.png new file mode 100644 index 0000000..e6b3d05 Binary files /dev/null and b/static/img/noop-rewards-2.png differ diff --git a/static/img/noop-rewards-3.png b/static/img/noop-rewards-3.png new file mode 100644 index 0000000..1e6d37f Binary files /dev/null and b/static/img/noop-rewards-3.png differ diff --git a/static/img/noop-rewards-4.png b/static/img/noop-rewards-4.png new file mode 100644 index 0000000..b78252f Binary files /dev/null and b/static/img/noop-rewards-4.png differ diff --git a/static/img/noop-rewards-5.png b/static/img/noop-rewards-5.png new file mode 100644 index 0000000..4b9e981 Binary files /dev/null and b/static/img/noop-rewards-5.png differ