Skip to content

Commit

Permalink
Merge pull request #506 from thomaspanf/houston
Browse files Browse the repository at this point in the history
Added "is RPL Locking Allowed" check to every `PDAOCanProposeXYZ` function
  • Loading branch information
0xfornax authored Apr 22, 2024
2 parents de99fdb + c2e8be8 commit 2b2a1fb
Show file tree
Hide file tree
Showing 17 changed files with 303 additions and 45 deletions.
3 changes: 3 additions & 0 deletions rocketpool-cli/pdao/invite-sc.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ func proposeSecurityCouncilInvite(c *cli.Context) error {
if canResponse.MemberAlreadyExists {
fmt.Printf("The node %s is already a member of the security council.\n", address.Hex())
}
if canResponse.IsRplLockingDisallowed {
fmt.Println("Please enable RPL locking using the command 'rocketpool node allow-rpl-locking' to raise proposals.")
}
return nil
}

Expand Down
7 changes: 7 additions & 0 deletions rocketpool-cli/pdao/kick-sc.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,13 @@ func proposeSecurityCouncilKick(c *cli.Context) error {
if err != nil {
return err
}
if !canResponse.CanPropose {
fmt.Println("Cannot propose kicking member:")
if canResponse.IsRplLockingDisallowed {
fmt.Println("Please enable RPL locking using the command 'rocketpool node allow-rpl-locking' to raise proposals.")
}
return nil
}

// Assign max fee
err = gas.AssignMaxFeeAndLimit(canResponse.GasInfo, rp, c.Bool("yes"))
Expand Down
7 changes: 7 additions & 0 deletions rocketpool-cli/pdao/one-time-spend.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,13 @@ func proposeOneTimeSpend(c *cli.Context) error {
if err != nil {
return err
}
if !canResponse.CanPropose {
fmt.Println("Cannot propose one time spend:")
if canResponse.IsRplLockingDisallowed {
fmt.Println("Please enable RPL locking using the command 'rocketpool node allow-rpl-locking' to raise proposals.")
}
return nil
}

// Assign max fee
err = gas.AssignMaxFeeAndLimit(canResponse.GasInfo, rp, c.Bool("yes"))
Expand Down
7 changes: 7 additions & 0 deletions rocketpool-cli/pdao/percentages.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,13 @@ func proposeRewardsPercentages(c *cli.Context) error {
if err != nil {
return err
}
if !canResponse.CanPropose {
fmt.Println("Cannot propose rewards precentages:")
if canResponse.IsRplLockingDisallowed {
fmt.Println("Please enable RPL locking using the command 'rocketpool node allow-rpl-locking' to raise proposals.")
}
return nil
}

// Assign max fee
err = gas.AssignMaxFeeAndLimit(canResponse.GasInfo, rp, c.Bool("yes"))
Expand Down
3 changes: 3 additions & 0 deletions rocketpool-cli/pdao/propose-settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,9 @@ func proposeSetting(c *cli.Context, contract string, setting string, value strin
eth.WeiToEth(big.NewInt(0).Sub(canPropose.StakedRpl, canPropose.LockedRpl)), eth.WeiToEth(canPropose.ProposalBond),
)
}
if canPropose.IsRplLockingDisallowed {
fmt.Println("Please enable RPL locking using the command 'rocketpool node allow-rpl-locking' to raise proposals.")
}
return nil
}

Expand Down
7 changes: 7 additions & 0 deletions rocketpool-cli/pdao/recurring-spend-update.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,13 @@ func proposeRecurringSpendUpdate(c *cli.Context) error {
if err != nil {
return err
}
if !canResponse.CanPropose {
fmt.Println("Cannot propose recurring spend update:")
if canResponse.IsRplLockingDisallowed {
fmt.Println("Please enable RPL locking using the command 'rocketpool node allow-rpl-locking' to raise proposals.")
}
return nil
}

// Assign max fee
err = gas.AssignMaxFeeAndLimit(canResponse.GasInfo, rp, c.Bool("yes"))
Expand Down
7 changes: 7 additions & 0 deletions rocketpool-cli/pdao/recurring-spend.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,13 @@ func proposeRecurringSpend(c *cli.Context) error {
if err != nil {
return err
}
if !canResponse.CanPropose {
fmt.Println("Cannot propose recurring spend contract:")
if canResponse.IsRplLockingDisallowed {
fmt.Println("Please enable RPL locking using the command 'rocketpool node allow-rpl-locking' to raise proposals.")
}
return nil
}

// Assign max fee
err = gas.AssignMaxFeeAndLimit(canResponse.GasInfo, rp, c.Bool("yes"))
Expand Down
7 changes: 7 additions & 0 deletions rocketpool-cli/pdao/replace-sc.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,13 @@ func proposeSecurityCouncilReplace(c *cli.Context) error {
if err != nil {
return err
}
if !canResponse.CanPropose {
fmt.Println("Cannot propose security council replacement:")
if canResponse.IsRplLockingDisallowed {
fmt.Println("Please enable RPL locking using the command 'rocketpool node allow-rpl-locking' to raise proposals.")
}
return nil
}

// Assign max fee
err = gas.AssignMaxFeeAndLimit(canResponse.GasInfo, rp, c.Bool("yes"))
Expand Down
38 changes: 33 additions & 5 deletions rocketpool/api/pdao/invite-security.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/rocket-pool/rocketpool-go/dao/protocol"
"github.com/rocket-pool/rocketpool-go/dao/security"
"github.com/rocket-pool/rocketpool-go/node"
"github.com/rocket-pool/smartnode/shared/services"
"github.com/rocket-pool/smartnode/shared/types/api"
"github.com/rocket-pool/smartnode/shared/utils/eth1"
"github.com/urfave/cli"
"golang.org/x/sync/errgroup"
)

func canProposeInviteToSecurityCouncil(c *cli.Context, id string, address common.Address) (*api.PDAOCanProposeInviteToSecurityCouncilResponse, error) {
Expand All @@ -34,19 +36,45 @@ func canProposeInviteToSecurityCouncil(c *cli.Context, id string, address common
// Response
response := api.PDAOCanProposeInviteToSecurityCouncilResponse{}

// Check if the member exists
response.MemberAlreadyExists, err = security.GetMemberExists(rp, address, nil)
// Get node account
nodeAccount, err := w.GetNodeAccount()
if err != nil {
return nil, err
}

// Check validity
response.CanPropose = !(response.MemberAlreadyExists)
// Sync
var isRplLockingAllowed bool
var wg errgroup.Group

// Get is RPL locking allowed
wg.Go(func() error {
var err error
isRplLockingAllowed, err = node.GetRPLLockedAllowed(rp, nodeAccount.Address, nil)
return err
})

// Check if the member exists
wg.Go(func() error {
var err error
response.MemberAlreadyExists, err = security.GetMemberExists(rp, address, nil)
return err
})

// Wait for data
if err := wg.Wait(); err != nil {
return nil, err
}

// Update & return response
response.IsRplLockingDisallowed = !isRplLockingAllowed

// return if proposing is not possible
response.CanPropose = !(response.MemberAlreadyExists || response.IsRplLockingDisallowed)
if !response.CanPropose {
return &response, nil
}

// Get node account
// Get the account transactor
opts, err := w.GetNodeAccountTransactor()
if err != nil {
return nil, err
Expand Down
25 changes: 25 additions & 0 deletions rocketpool/api/pdao/kick-security.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (

"github.com/ethereum/go-ethereum/common"
"github.com/rocket-pool/rocketpool-go/dao/protocol"
"github.com/rocket-pool/rocketpool-go/node"
"github.com/rocket-pool/smartnode/shared/services"
"github.com/rocket-pool/smartnode/shared/types/api"
"github.com/rocket-pool/smartnode/shared/utils/eth1"
Expand Down Expand Up @@ -34,6 +35,30 @@ func canProposeKickFromSecurityCouncil(c *cli.Context, address common.Address) (
response := api.PDAOCanProposeKickFromSecurityCouncilResponse{}

// Get node account
nodeAccount, err := w.GetNodeAccount()
if err != nil {
return nil, err
}

// Sync
var isRplLockingAllowed bool

// Get is RPL locking allowed
isRplLockingAllowed, err = node.GetRPLLockedAllowed(rp, nodeAccount.Address, nil)
if err != nil {
return nil, err
}

// Update & return response
response.IsRplLockingDisallowed = !isRplLockingAllowed

// return if proposing is not possible
response.CanPropose = !response.IsRplLockingDisallowed
if !response.CanPropose {
return &response, nil
}

// Get the account transactor
opts, err := w.GetNodeAccountTransactor()
if err != nil {
return nil, err
Expand Down
25 changes: 25 additions & 0 deletions rocketpool/api/pdao/one-time-spend.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

"github.com/ethereum/go-ethereum/common"
"github.com/rocket-pool/rocketpool-go/dao/protocol"
"github.com/rocket-pool/rocketpool-go/node"
"github.com/rocket-pool/smartnode/shared/services"
"github.com/rocket-pool/smartnode/shared/types/api"
"github.com/rocket-pool/smartnode/shared/utils/eth1"
Expand Down Expand Up @@ -35,6 +36,30 @@ func canProposeOneTimeSpend(c *cli.Context, invoiceID string, recipient common.A
response := api.PDAOCanProposeOneTimeSpendResponse{}

// Get node account
nodeAccount, err := w.GetNodeAccount()
if err != nil {
return nil, err
}

// Sync
var isRplLockingAllowed bool

// Get is RPL locking allowed
isRplLockingAllowed, err = node.GetRPLLockedAllowed(rp, nodeAccount.Address, nil)
if err != nil {
return nil, err
}

// Update & return response
response.IsRplLockingDisallowed = !isRplLockingAllowed

// return if proposing is not possible
response.CanPropose = !response.IsRplLockingDisallowed
if !response.CanPropose {
return &response, nil
}

// Get the account transactor
opts, err := w.GetNodeAccountTransactor()
if err != nil {
return nil, err
Expand Down
25 changes: 25 additions & 0 deletions rocketpool/api/pdao/percentages.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"math/big"

"github.com/rocket-pool/rocketpool-go/dao/protocol"
rpnode "github.com/rocket-pool/rocketpool-go/node"
psettings "github.com/rocket-pool/rocketpool-go/settings/protocol"
"github.com/rocket-pool/rocketpool-go/utils/eth"
"github.com/rocket-pool/smartnode/shared/services"
Expand Down Expand Up @@ -76,6 +77,30 @@ func canProposeRewardsPercentages(c *cli.Context, node *big.Int, odao *big.Int,
// Response
response := api.PDAOCanProposeRewardsPercentagesResponse{}

// Get node account
nodeAccount, err := w.GetNodeAccount()
if err != nil {
return nil, err
}

// Sync
var isRplLockingAllowed bool

// Get is RPL locking allowed
isRplLockingAllowed, err = rpnode.GetRPLLockedAllowed(rp, nodeAccount.Address, nil)
if err != nil {
return nil, err
}

// Update & return response
response.IsRplLockingDisallowed = !isRplLockingAllowed

// return if proposing is not possible
response.CanPropose = !response.IsRplLockingDisallowed
if !response.CanPropose {
return &response, nil
}

// Get the account transactor
opts, err := w.GetNodeAccountTransactor()
if err != nil {
Expand Down
16 changes: 15 additions & 1 deletion rocketpool/api/pdao/propose-settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ func canProposeSetting(c *cli.Context, contractName string, settingName string,
var stakedRpl *big.Int
var lockedRpl *big.Int
var proposalBond *big.Int
var isRplLockingAllowed bool
var wg errgroup.Group

// Get the node's RPL stake
Expand All @@ -78,6 +79,13 @@ func canProposeSetting(c *cli.Context, contractName string, settingName string,
return err
})

// Get is RPL locking allowed
wg.Go(func() error {
var err error
isRplLockingAllowed, err = node.GetRPLLockedAllowed(rp, nodeAccount.Address, nil)
return err
})

// Wait for data
if err := wg.Wait(); err != nil {
return nil, err
Expand All @@ -86,10 +94,17 @@ func canProposeSetting(c *cli.Context, contractName string, settingName string,
response.StakedRpl = stakedRpl
response.LockedRpl = lockedRpl
response.ProposalBond = proposalBond
response.IsRplLockingDisallowed = !isRplLockingAllowed

freeRpl := big.NewInt(0).Sub(stakedRpl, lockedRpl)
response.InsufficientRpl = (freeRpl.Cmp(proposalBond) < 0)

// return if proposing is not possible
response.CanPropose = !(response.InsufficientRpl || response.IsRplLockingDisallowed)
if !response.CanPropose {
return &response, nil
}

// Get the latest finalized block number and corresponding pollard
blockNumber, pollard, err := createPollard(rp, cfg, bc)
if err != nil {
Expand Down Expand Up @@ -741,7 +756,6 @@ func canProposeSetting(c *cli.Context, contractName string, settingName string,
}

// Update & return response
response.CanPropose = !(response.InsufficientRpl)
return &response, nil

}
Expand Down
25 changes: 25 additions & 0 deletions rocketpool/api/pdao/recurring-spend.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (

"github.com/ethereum/go-ethereum/common"
"github.com/rocket-pool/rocketpool-go/dao/protocol"
"github.com/rocket-pool/rocketpool-go/node"
"github.com/rocket-pool/smartnode/shared/services"
"github.com/rocket-pool/smartnode/shared/types/api"
"github.com/rocket-pool/smartnode/shared/utils/eth1"
Expand Down Expand Up @@ -36,6 +37,30 @@ func canProposeRecurringSpend(c *cli.Context, contractName string, recipient com
response := api.PDAOCanProposeRecurringSpendResponse{}

// Get node account
nodeAccount, err := w.GetNodeAccount()
if err != nil {
return nil, err
}

// Sync
var isRplLockingAllowed bool

// Get is RPL locking allowed
isRplLockingAllowed, err = node.GetRPLLockedAllowed(rp, nodeAccount.Address, nil)
if err != nil {
return nil, err
}

// Update & return response
response.IsRplLockingDisallowed = !isRplLockingAllowed

// return if proposing is not possible
response.CanPropose = !response.IsRplLockingDisallowed
if !response.CanPropose {
return &response, nil
}

// Get the account transactor
opts, err := w.GetNodeAccountTransactor()
if err != nil {
return nil, err
Expand Down
Loading

0 comments on commit 2b2a1fb

Please sign in to comment.