Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
161 commits
Select commit Hold shift + click to select a range
f9e6a73
Using legacy claim functions pre-Saturn
0xfornax Sep 15, 2025
df7b233
Merge branch 'master' into v11-claim-rewards
0xfornax Sep 18, 2025
38aa23e
Adjust v11 interval for devnet
0xfornax Sep 19, 2025
351dfc4
UserETH -> SmoothingPoolETH
0xfornax Sep 19, 2025
806f2de
Fix rewards tree dir
0xfornax Sep 19, 2025
b2cb245
Add GetTotalProtocolDaoEth
0xfornax Sep 19, 2025
95665b6
smoothingPoolEthRewards -> nodeOperatorSmoothingPoolEthRewardsAndVote…
0xfornax Sep 19, 2025
307ef2f
Add GetTotalSmoothingPoolBalance() as the SmoothingPoolETH
0xfornax Sep 19, 2025
67c804a
Merge remote-tracking branch 'origin/master' into v11-claim-rewards
0xfornax Sep 20, 2025
078bc7b
Fix adding voter share to SmoothingPoolEth
0xfornax Sep 22, 2025
16807fa
Removing CID as it's not present on 1.4 contracts
0xfornax Sep 22, 2025
c98d309
Subtract oDAO rewards only in case node operators had rewards, otherw…
0xfornax Sep 22, 2025
c4b509c
Fallback when fetching rewards events
0xfornax Sep 23, 2025
b2386d3
Fix tests
0xfornax Sep 23, 2025
146e746
Embed git metadata into docker images
thomaspanf Sep 23, 2025
32ea377
Add devnet houston RocketRewardsPool address to config
thomaspanf Sep 24, 2025
b326eef
Adjust the Validator proof format
0xfornax Sep 25, 2025
603eb8b
Adjust the WithdrawalProof format
0xfornax Sep 25, 2025
192dff2
Match cli flag to enable saturn
thomaspanf Sep 25, 2025
9ada5a8
Add saturn check for Saturn multicalls
0xfornax Sep 25, 2025
4734c6e
Update megapoolV1EncodedAbi
thomaspanf Sep 25, 2025
83728fb
Add megapool validators to the total validator count when calculating…
thomaspanf Sep 28, 2025
4dd8c79
Fix maxAmount calc in withdraw-rpl cli
thomaspanf Sep 28, 2025
5714726
Check if bond reductions are enabled
0xfornax Sep 29, 2025
aef06e2
Add saturn check to bond reductions
0xfornax Sep 29, 2025
9bccf8d
Merge branch 'master' into v11-claim-rewards
0xfornax Sep 30, 2025
e96cda2
Add validatorProof to notifyFinalBalance
thomaspanf Sep 30, 2025
9d21060
Pretty print days and hours for UnstakingPeriodDuration in withdraw-r…
thomaspanf Sep 30, 2025
ab4d76d
Add SlotProof
0xfornax Sep 30, 2025
dbce6f4
Merge remote-tracking branch 'origin/devnet5' into devnet-5
thomaspanf Sep 30, 2025
6255219
Fix the maxAmount calc for megapool staked RPL
thomaspanf Sep 30, 2025
461f63d
Rename field RplStake to TotalRplStake
thomaspanf Sep 30, 2025
b400e7e
Pretty print days and hours for UnstakingPeriodDuration in node status
thomaspanf Sep 30, 2025
a73857a
Merge branch 'master' into v11-claim-rewards
0xfornax Oct 1, 2025
4b0251c
Add helper to get the timestamp of the next non-skipped slot
thomaspanf Oct 2, 2025
59f1eaa
Add slotTimestamp to proof bindings
thomaspanf Oct 2, 2025
6f31a34
Refactor GetValidatorProof to return the slotTimestamp
thomaspanf Oct 2, 2025
ab87aef
Rename proof to validatorProof
thomaspanf Oct 2, 2025
cc35162
Add provision express tickets node task
thomaspanf Oct 7, 2025
8308de1
Add provision express tickets message to node status
thomaspanf Oct 7, 2025
5b466c2
Use the same slot for both proofs
0xfornax Oct 8, 2025
96ff11d
Add SlotProof
0xfornax Oct 8, 2025
b52d86f
Remove 'Slot' from the ValidatorProof type
thomaspanf Oct 8, 2025
08ae8cb
Update storage and rpl address for devnet-5
thomaspanf Oct 8, 2025
b9ef69a
Update megapoolV1EncodedAbi for scratchnet and fix error messages
thomaspanf Oct 8, 2025
3d7947b
Remove WithdrawableEpoch from ValidatorInfo
thomaspanf Oct 9, 2025
56d9bad
Fix typo
0xfornax Oct 9, 2025
462735f
Prompt users about unprovisioned tickets before closing minipools
thomaspanf Oct 12, 2025
f5d00d2
Using different rewards struct for Houston and Saturn
0xfornax Oct 13, 2025
fe4e497
Merge branch 'v11-claim-rewards' of github.com:rocket-pool/smartnode …
0xfornax Oct 13, 2025
5b8ee4f
Add MinimumLegacyRPLStake bindings and pdao commands, move MinimumPer…
thomaspanf Oct 14, 2025
30cff7a
Merge branch 'master' into v11-claim-rewards
0xfornax Oct 16, 2025
f6da8c9
Version bump
0xfornax Oct 16, 2025
12e5a63
Update NetworkDetails struct and multicall getters for MinimumLegacyR…
thomaspanf Oct 16, 2025
0dc84a5
Remove unused calls to GetNodeMinimumRPLStake and getMinimumPerMinipo…
thomaspanf Oct 16, 2025
20a1d11
Remove an unused GetMaximumPerMinipoolStake call
thomaspanf Oct 16, 2025
783df4b
Renaming MaximumRplStake to RplStakeThreshold, MaximumStakeFraction t…
thomaspanf Oct 16, 2025
bdef5a5
Add getter for GetNodeMinimumLegacyRPLStake, use it in node status ap…
thomaspanf Oct 16, 2025
4cf32b4
Delete misplaced getter
thomaspanf Oct 16, 2025
544dbd5
Add custom genesis files and update scripts
0xfornax Oct 19, 2025
0364820
Add legacy rpl withdrawal threshold message to node status cli
thomaspanf Oct 19, 2025
b5342a1
Fixed binding and variable name in withdraw-legacy-rpl api
thomaspanf Oct 19, 2025
32e9207
New genesis files
0xfornax Oct 21, 2025
f7c2f69
Merge remote-tracking branch 'origin/devnet-5-minimum-legacy-rpl' int…
0xfornax Oct 22, 2025
1c81a9f
Merge origin/devnet-5-minimum-legacy-rpl
0xfornax Oct 22, 2025
a255f78
Merge remote-tracking branch 'origin/devnet-5-minimum-legacy-rpl' int…
0xfornax Oct 22, 2025
23079c3
new megapool ABI
0xfornax Oct 22, 2025
8cf3ef5
Add withdrawableEpoch
0xfornax Oct 22, 2025
e8ec9c6
New genesis files
0xfornax Oct 23, 2025
abdcfe1
Get megapool validator info when creating network state for a node, l…
thomaspanf Oct 23, 2025
23ec57f
Get megapool validator info when creating network state for a node, l…
thomaspanf Oct 23, 2025
4730d0b
Remove duplicate
0xfornax Oct 23, 2025
31ad3a7
New deployment
0xfornax Oct 24, 2025
e060661
new bootnode/config files
0xfornax Oct 27, 2025
2e10df7
Added BalanceChecker.sol and Multicall2 deployments addresses for Pri…
thomaspanf Oct 27, 2025
01dba69
Add WithdrawableEpoch field for unpacking the GetValidatorInfo response
thomaspanf Oct 27, 2025
9fdacce
Merge branch 'master' into v11-claim-rewards
0xfornax Oct 27, 2025
4eac94f
Addresses for v1.4-new-proofs
0xfornax Oct 28, 2025
b4510f1
Interface updates to support rocketpool:v1.4-new-proofs
thomaspanf Oct 28, 2025
f6e466b
Interface updates to support rocketpool:v1.4-new-proofs
thomaspanf Oct 29, 2025
20a2154
New deploy addresses
0xfornax Oct 29, 2025
a3d7b44
New megapoolV1EncodedAbi, using lastDistributionTime instead of lastD…
thomaspanf Oct 30, 2025
5771cf2
New params
0xfornax Oct 30, 2025
ccc4ae8
New deployment
0xfornax Oct 30, 2025
4918a80
Fix enode
0xfornax Oct 31, 2025
041791a
Fix GetChildBlockTimestampForSlot was returning the same slot
0xfornax Nov 2, 2025
c82821a
New genesis params
thomaspanf Nov 4, 2025
b7ca66b
Remove UserDistributeWindowLength from megapool settings
thomaspanf Nov 4, 2025
d796634
Add DissolvePenalty to megapool settings
thomaspanf Nov 4, 2025
ea3b54c
Add UserDistributeDelay/UserDistributeDelayShortfall, fixed a some mi…
thomaspanf Nov 4, 2025
8615c5a
Add config.toml to devnet geth
0xfornax Nov 5, 2025
b216c53
Merge branch 'custom-devnet' of github.com:rocket-pool/smartnode into…
0xfornax Nov 5, 2025
77a33a6
Add PenaltyThreshold to megapool settings
thomaspanf Nov 5, 2025
6770ebb
New addreses
0xfornax Nov 5, 2025
38a8edd
rplTwap dummy
0xfornax Nov 5, 2025
6f8a8f5
Latest contract addresses
0xfornax Nov 7, 2025
3ed12c2
Merge branch 'custom-devnet' of github.com:rocket-pool/smartnode into…
0xfornax Nov 7, 2025
21eb8c0
Improved cli text in megapool distribute command
thomaspanf Nov 11, 2025
f849ef6
Don't allow users to select validators that are too young to exit. Ad…
thomaspanf Nov 11, 2025
bc703d3
Add the latest config files
0xfornax Nov 12, 2025
bdd3f0f
New devnet addresses
0xfornax Nov 12, 2025
08f3596
Option to pass the beaconState when creating validator proofs
0xfornax Nov 18, 2025
2955bc4
Merge remote-tracking branch 'origin/master' into custom-devnet
0xfornax Nov 18, 2025
041f602
Bump dockerAPIVersion to 1.44
0xfornax Nov 18, 2025
188cda0
Moving devnet to ephemery
0xfornax Nov 21, 2025
e7a8c17
Add Nethermind ephemery support
0xfornax Nov 24, 2025
2586110
Add nimbus, teku support
0xfornax Nov 24, 2025
a1b5012
Update multicall2 contract address for ephemery
thomaspanf Nov 24, 2025
5e83e42
Update explorer url
0xfornax Nov 26, 2025
76da8d1
Remove flag to enable Saturn cmds
0xfornax Nov 26, 2025
ca3d853
Add prysm support to Ephemery
0xfornax Nov 26, 2025
6904e4d
Improve error logging and fixed some comments in the task loop
thomaspanf Nov 26, 2025
f07a55d
Fix testnet-dir
0xfornax Nov 27, 2025
b7b1e94
Fix nethermind config file
0xfornax Nov 27, 2025
c77f126
New twap address
0xfornax Nov 30, 2025
4d7d95d
Merge branch 'v11-claim-rewards' into ephemery
thomaspanf Dec 1, 2025
0d8eb00
Fix target slot for balances submission
0xfornax Dec 1, 2025
5746bb3
Add missing IsSaturnDeployed check
0xfornax Dec 1, 2025
298b0df
Fix json struct tag in NodeStatusResponse
thomaspanf Dec 2, 2025
3f21c0b
Merge remote-tracking branch 'origin/master' into ephemery
0xfornax Dec 2, 2025
a20baf3
Add fulu state
0xfornax Dec 2, 2025
7cdc307
Dissolve invalid validator info
0xfornax Dec 4, 2025
5f75b16
Disable reduce bonds
0xfornax Dec 4, 2025
5cabf63
The Effective balance from the state uses 9 decimals
0xfornax Dec 4, 2025
4a30cfa
Add refund value to the claim process
0xfornax Dec 4, 2025
520551f
Check the finalized beacon state before creating proofs
0xfornax Dec 4, 2025
828d46e
Fix typos
thomaspanf Dec 4, 2025
4fc2eab
Remove unused field from dissolveMegapoolValidator function sig
thomaspanf Dec 4, 2025
9dbdcd2
Fix adding refund to pending rewards
0xfornax Dec 5, 2025
5a61c65
Use megapool address as fee recipient if NO doesnt have minipools
0xfornax Dec 5, 2025
5f9b610
Fix VerifyWithdrawal and NotifyNotExit params
0xfornax Dec 9, 2025
07ce3c9
Use megapool address as fee recipient if NO doesnt have minipools
0xfornax Dec 5, 2025
0a137c5
exporter-v1.10.2
0xfornax Dec 8, 2025
2d5050b
Add decimals to reflect lower gas prices
0xfornax Dec 5, 2025
ff3d09f
prysm-v7.0.1
0xfornax Dec 9, 2025
05f387b
Lower batch sizes to avoid out of gas errors after Fusaka
0xfornax Dec 9, 2025
afd9360
Update dependencies
0xfornax Dec 9, 2025
b9963b4
Add keymanager port
0xfornax Dec 9, 2025
6b98cf1
Merge branch 'saturn-fee-recipient-changes' of github.com:rocket-pool…
0xfornax Dec 9, 2025
fbf36e7
wip
0xfornax Dec 10, 2025
f9d24f1
Remove extra pointer reference
0xfornax Dec 10, 2025
15ab131
Move Nimbus keymanager from bn->vc
0xfornax Dec 11, 2025
c98c01e
Add token path to LH keymanager
0xfornax Dec 11, 2025
663a506
Fix echoing token
0xfornax Dec 11, 2025
124aed9
Enable keymanager for Lodestar
0xfornax Dec 11, 2025
d0fc5db
Add keymanager for Prysm and edit token-file to support Prysm
thomaspanf Dec 11, 2025
3316d30
Add keymanager api calls
0xfornax Dec 11, 2025
9234c9f
Add Teku keymanager config
0xfornax Dec 12, 2025
ab54a67
Fix missing spacing in start-vc.sh
thomaspanf Dec 12, 2025
091bb82
Update fee recipient logic
0xfornax Dec 12, 2025
7abbad8
Make a GET request to check if the key needs to be updated
0xfornax Dec 15, 2025
2c60853
Schedule v11 rewards for devnet-5
0xfornax Dec 15, 2025
fd22050
Fix when open validator ports are empty
0xfornax Dec 15, 2025
1ffc17b
Merge branch 'fix-next-submission-target' into saturn-fee-recipient-c…
0xfornax Dec 16, 2025
aed48c0
Remove shadow foundWithdrawal
0xfornax Dec 16, 2025
db0914d
Reuse the state when creating the validator proof
0xfornax Dec 17, 2025
3ba4f11
Use finalized instead of head as we need to grab the next slot timestamp
0xfornax Dec 17, 2025
f7613b7
Fixed an issue with the node loop failing to automatically submit cre…
thomaspanf Dec 17, 2025
825070a
Reverse the proof order to match the gindices order
0xfornax Dec 17, 2025
37dafda
Fixed struct tags, added saturn check to pre-saturn rplStakeThreshold…
thomaspanf Dec 18, 2025
b2e2039
Remove balances from dissolved megapool validators
0xfornax Dec 18, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 95 additions & 0 deletions bindings/legacy/v1.3.1/protocol/node.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package protocol

import (
"fmt"
"math/big"
"sync"

"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"

"github.com/rocket-pool/smartnode/bindings/dao/protocol"
"github.com/rocket-pool/smartnode/bindings/rocketpool"
"github.com/rocket-pool/smartnode/bindings/types"
"github.com/rocket-pool/smartnode/bindings/utils/eth"
)

// Config
const (
NodeSettingsContractName string = "rocketDAOProtocolSettingsNode"
MinimumPerMinipoolStakeSettingPath string = "node.per.minipool.stake.minimum"
MaximumPerMinipoolStakeSettingPath string = "node.per.minipool.stake.maximum"
)

// The minimum RPL stake per minipool as a fraction of assigned user ETH
func GetMinimumPerMinipoolStake(rp *rocketpool.RocketPool, opts *bind.CallOpts) (float64, error) {
nodeSettingsContract, err := getNodeSettingsContract(rp, opts)
if err != nil {
return 0, err
}
value := new(*big.Int)
if err := nodeSettingsContract.Call(opts, value, "getMinimumPerMinipoolStake"); err != nil {
return 0, fmt.Errorf("error getting minimum RPL stake per minipool: %w", err)
}
return eth.WeiToEth(*value), nil
}
func ProposeMinimumPerMinipoolStake(rp *rocketpool.RocketPool, value *big.Int, blockNumber uint32, treeNodes []types.VotingTreeNode, opts *bind.TransactOpts) (uint64, common.Hash, error) {
return protocol.ProposeSetUint(rp, fmt.Sprintf("set %s", MinimumPerMinipoolStakeSettingPath), NodeSettingsContractName, MinimumPerMinipoolStakeSettingPath, value, blockNumber, treeNodes, opts)
}
func EstimateProposeMinimumPerMinipoolStakeGas(rp *rocketpool.RocketPool, value *big.Int, blockNumber uint32, treeNodes []types.VotingTreeNode, opts *bind.TransactOpts) (rocketpool.GasInfo, error) {
return protocol.EstimateProposeSetUintGas(rp, fmt.Sprintf("set %s", MinimumPerMinipoolStakeSettingPath), NodeSettingsContractName, MinimumPerMinipoolStakeSettingPath, value, blockNumber, treeNodes, opts)
}

// The minimum RPL stake per minipool as a fraction of assigned user ETH
func GetMinimumPerMinipoolStakeRaw(rp *rocketpool.RocketPool, opts *bind.CallOpts) (*big.Int, error) {
nodeSettingsContract, err := getNodeSettingsContract(rp, opts)
if err != nil {
return nil, err
}
value := new(*big.Int)
if err := nodeSettingsContract.Call(opts, value, "getMinimumPerMinipoolStake"); err != nil {
return nil, fmt.Errorf("error getting minimum RPL stake per minipool: %w", err)
}
return *value, nil
}

// The maximum RPL stake per minipool as a fraction of assigned user ETH
func GetMaximumPerMinipoolStake(rp *rocketpool.RocketPool, opts *bind.CallOpts) (float64, error) {
nodeSettingsContract, err := getNodeSettingsContract(rp, opts)
if err != nil {
return 0, err
}
value := new(*big.Int)
if err := nodeSettingsContract.Call(opts, value, "getMaximumPerMinipoolStake"); err != nil {
return 0, fmt.Errorf("error getting maximum RPL stake per minipool: %w", err)
}
return eth.WeiToEth(*value), nil
}
func ProposeMaximumPerMinipoolStake(rp *rocketpool.RocketPool, value *big.Int, blockNumber uint32, treeNodes []types.VotingTreeNode, opts *bind.TransactOpts) (uint64, common.Hash, error) {
return protocol.ProposeSetUint(rp, fmt.Sprintf("set %s", MaximumPerMinipoolStakeSettingPath), NodeSettingsContractName, MaximumPerMinipoolStakeSettingPath, value, blockNumber, treeNodes, opts)
}
func EstimateProposeMaximumPerMinipoolStakeGas(rp *rocketpool.RocketPool, value *big.Int, blockNumber uint32, treeNodes []types.VotingTreeNode, opts *bind.TransactOpts) (rocketpool.GasInfo, error) {
return protocol.EstimateProposeSetUintGas(rp, fmt.Sprintf("set %s", MaximumPerMinipoolStakeSettingPath), NodeSettingsContractName, MaximumPerMinipoolStakeSettingPath, value, blockNumber, treeNodes, opts)
}

// The maximum RPL stake per minipool as a fraction of assigned user ETH
func GetMaximumPerMinipoolStakeRaw(rp *rocketpool.RocketPool, opts *bind.CallOpts) (*big.Int, error) {
nodeSettingsContract, err := getNodeSettingsContract(rp, opts)
if err != nil {
return nil, err
}
value := new(*big.Int)
if err := nodeSettingsContract.Call(opts, value, "getMaximumPerMinipoolStake"); err != nil {
return nil, fmt.Errorf("error getting maximum RPL stake per minipool: %w", err)
}
return *value, nil
}

// Get contracts
var nodeSettingsContractLock sync.Mutex

func getNodeSettingsContract(rp *rocketpool.RocketPool, opts *bind.CallOpts) (*rocketpool.Contract, error) {
nodeSettingsContractLock.Lock()
defer nodeSettingsContractLock.Unlock()
return rp.GetContract(NodeSettingsContractName, opts)
}
90 changes: 90 additions & 0 deletions bindings/legacy/v1.3.1/rewards/distributor-mainnet.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package rewards

import (
"fmt"
"math/big"
"sync"

"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/rocket-pool/smartnode/bindings/rocketpool"
)

// Check if the given node has already claimed rewards for the given interval
func IsClaimed(rp *rocketpool.RocketPool, index *big.Int, claimerAddress common.Address, opts *bind.CallOpts) (bool, error) {
rocketDistributorMainnet, err := getRocketDistributorMainnet(rp, opts)
if err != nil {
return false, err
}
isClaimed := new(bool)
if err := rocketDistributorMainnet.Call(opts, isClaimed, "isClaimed", index, claimerAddress); err != nil {
return false, fmt.Errorf("error getting rewards claim status for interval %s, node %s: %w", index.String(), claimerAddress.Hex(), err)
}
return *isClaimed, nil
}

// Get the Merkle root for an interval
func MerkleRoots(rp *rocketpool.RocketPool, interval *big.Int, opts *bind.CallOpts) ([]byte, error) {
rocketDistributorMainnet, err := getRocketDistributorMainnet(rp, opts)
if err != nil {
return nil, err
}
bytes := new([32]byte)
if err := rocketDistributorMainnet.Call(opts, bytes, "merkleRoots", interval); err != nil {
return nil, fmt.Errorf("error getting Merkle root for interval %s: %w", interval.String(), err)
}
return (*bytes)[:], nil
}

// Estimate claim rewards gas
func EstimateClaimGas(rp *rocketpool.RocketPool, address common.Address, indices []*big.Int, amountRPL []*big.Int, amountETH []*big.Int, merkleProofs [][]common.Hash, opts *bind.TransactOpts) (rocketpool.GasInfo, error) {
rocketDistributorMainnet, err := getRocketDistributorMainnet(rp, nil)
if err != nil {
return rocketpool.GasInfo{}, err
}
return rocketDistributorMainnet.GetTransactionGasInfo(opts, "claim", address, indices, amountRPL, amountETH, merkleProofs)
}

// Claim rewards
func Claim(rp *rocketpool.RocketPool, address common.Address, indices []*big.Int, amountRPL []*big.Int, amountETH []*big.Int, merkleProofs [][]common.Hash, opts *bind.TransactOpts) (common.Hash, error) {
rocketDistributorMainnet, err := getRocketDistributorMainnet(rp, nil)
if err != nil {
return common.Hash{}, err
}
tx, err := rocketDistributorMainnet.Transact(opts, "claim", address, indices, amountRPL, amountETH, merkleProofs)
if err != nil {
return common.Hash{}, fmt.Errorf("error claiming rewards: %w", err)
}
return tx.Hash(), nil
}

// Estimate claim and restake rewards gas
func EstimateClaimAndStakeGas(rp *rocketpool.RocketPool, address common.Address, indices []*big.Int, amountRPL []*big.Int, amountETH []*big.Int, merkleProofs [][]common.Hash, stakeAmount *big.Int, opts *bind.TransactOpts) (rocketpool.GasInfo, error) {
rocketDistributorMainnet, err := getRocketDistributorMainnet(rp, nil)
if err != nil {
return rocketpool.GasInfo{}, err
}
return rocketDistributorMainnet.GetTransactionGasInfo(opts, "claimAndStake", address, indices, amountRPL, amountETH, merkleProofs, stakeAmount)
}

// Claim and restake rewards
func ClaimAndStake(rp *rocketpool.RocketPool, address common.Address, indices []*big.Int, amountRPL []*big.Int, amountETH []*big.Int, merkleProofs [][]common.Hash, stakeAmount *big.Int, opts *bind.TransactOpts) (common.Hash, error) {
rocketDistributorMainnet, err := getRocketDistributorMainnet(rp, nil)
if err != nil {
return common.Hash{}, err
}
tx, err := rocketDistributorMainnet.Transact(opts, "claimAndStake", address, indices, amountRPL, amountETH, merkleProofs, stakeAmount)
if err != nil {
return common.Hash{}, fmt.Errorf("error claiming rewards: %w", err)
}
return tx.Hash(), nil
}

// Get contracts
var rocketDistributorMainnetLock sync.Mutex

func getRocketDistributorMainnet(rp *rocketpool.RocketPool, opts *bind.CallOpts) (*rocketpool.Contract, error) {
rocketDistributorMainnetLock.Lock()
defer rocketDistributorMainnetLock.Unlock()
return rp.GetContract("rocketMerkleDistributorMainnet", opts)
}
Loading
Loading