Skip to content

Commit 32cdc6e

Browse files
authored
Merge pull request #740 from rocket-pool/delegate-vote-direction
Show delegate vote direction in pDAO proposal details and voting.
2 parents c1b18c7 + 8a29193 commit 32cdc6e

File tree

4 files changed

+51
-2
lines changed

4 files changed

+51
-2
lines changed

rocketpool-cli/pdao/proposals.go

+16-1
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,12 @@ func getProposal(c *cli.Context, id uint64) error {
116116
return err
117117
}
118118

119+
// Get the voting delegate info
120+
votingDelegateInfo, err := rp.GetCurrentVotingDelegate()
121+
if err != nil {
122+
return err
123+
}
124+
119125
// Find the proposal
120126
var proposal *api.PDAOProposalWithNodeVoteDirection
121127

@@ -170,14 +176,23 @@ func getProposal(c *cli.Context, id uint64) error {
170176
vetoQuorum := utilsMath.RoundUp(eth.WeiToEth(proposal.VetoQuorum), 2)
171177
fmt.Printf("Voting power for: %.2f / %.2f (%.2f%%)\n", votingPowerFor, votingPowerRequired, votingPowerFor/votingPowerRequired*100)
172178
fmt.Printf("Voting power against: %.2f\n", utilsMath.RoundDown(eth.WeiToEth(proposal.VotingPowerAgainst), 2))
173-
fmt.Printf(" Against with veto: %.2f / %2.f (%.2f%%)\n", votingPowerToVeto, vetoQuorum, votingPowerToVeto/vetoQuorum*100)
179+
fmt.Printf("Against with veto: %.2f / %2.f (%.2f%%)\n", votingPowerToVeto, vetoQuorum, votingPowerToVeto/vetoQuorum*100)
174180
fmt.Printf("Voting power abstained: %.2f\n", utilsMath.RoundDown(eth.WeiToEth(proposal.VotingPowerAbstained), 2))
175181
if proposal.NodeVoteDirection != types.VoteDirection_NoVote {
176182
fmt.Printf("Node has voted: %s\n", types.VoteDirections[proposal.NodeVoteDirection])
177183
} else {
178184
fmt.Printf("Node has voted: no\n")
179185
}
180186

187+
if votingDelegateInfo.VotingDelegate != votingDelegateInfo.AccountAddress && proposal.DelegateVoteDirection != types.VoteDirection_NoVote {
188+
fmt.Printf("Delegate has voted: %s\n", types.VoteDirections[proposal.DelegateVoteDirection])
189+
} else if votingDelegateInfo.VotingDelegate != votingDelegateInfo.AccountAddress {
190+
fmt.Printf("Delegate has voted: no\n")
191+
}
192+
if votingDelegateInfo.VotingDelegate != votingDelegateInfo.AccountAddress {
193+
fmt.Printf("Current Delegate: %s", votingDelegateInfo.VotingDelegate.Hex())
194+
}
195+
181196
return nil
182197
}
183198

rocketpool-cli/pdao/vote-proposal.go

+12
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ func voteOnProposal(c *cli.Context) error {
3838
}
3939
}
4040

41+
// Get the voting delegate
42+
votingDelegateInfo, err := rp.GetCurrentVotingDelegate()
43+
if err != nil {
44+
return err
45+
}
46+
4147
// Check for votable proposals
4248
if len(votableProposals) == 0 {
4349
fmt.Println("No proposals can be voted on.")
@@ -96,6 +102,12 @@ func voteOnProposal(c *cli.Context) error {
96102

97103
}
98104

105+
// Check if delegate has voted
106+
if selectedProposal.DelegateVoteDirection != types.VoteDirection_NoVote && votingDelegateInfo.VotingDelegate != votingDelegateInfo.AccountAddress {
107+
fmt.Printf("Your Delegate: %s has voted: %s\n", votingDelegateInfo.VotingDelegate.Hex(), types.VoteDirections[selectedProposal.DelegateVoteDirection])
108+
fmt.Println()
109+
}
110+
99111
// Get support status
100112
var voteDirection types.VoteDirection
101113
var voteDirectionLabel string

rocketpool/api/pdao/proposals.go

+21
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package pdao
33
import (
44
"github.com/ethereum/go-ethereum/common"
55
"github.com/rocket-pool/rocketpool-go/dao/protocol"
6+
"github.com/rocket-pool/rocketpool-go/network"
67
"github.com/rocket-pool/rocketpool-go/rocketpool"
78
"github.com/rocket-pool/smartnode/shared/services"
89
"github.com/rocket-pool/smartnode/shared/types/api"
@@ -60,6 +61,11 @@ func getProposals(c *cli.Context) (*api.PDAOProposalsResponse, error) {
6061
}
6162

6263
func getProposalsWithNodeVoteDirection(rp *rocketpool.RocketPool, nodeAddress common.Address, props []protocol.ProtocolDaoProposalDetails) ([]api.PDAOProposalWithNodeVoteDirection, error) {
64+
delegateAddress, err := network.GetCurrentVotingDelegate(rp, nodeAddress, nil)
65+
if err != nil {
66+
return nil, err
67+
}
68+
6369
// Load node votes in batches
6470
proposalCount := uint64(len(props))
6571
details := make([]api.PDAOProposalWithNodeVoteDirection, proposalCount)
@@ -79,8 +85,10 @@ func getProposalsWithNodeVoteDirection(rp *rocketpool.RocketPool, nodeAddress co
7985
prop := props[pi]
8086
details[pi].ProtocolDaoProposalDetails = prop
8187
voteDir, err := protocol.GetAddressVoteDirection(rp, prop.ID, nodeAddress, nil)
88+
delegateVoteDir, err := protocol.GetAddressVoteDirection(rp, prop.ID, delegateAddress, nil)
8289
if err == nil {
8390
details[pi].NodeVoteDirection = voteDir
91+
details[pi].DelegateVoteDirection = delegateVoteDir
8492
}
8593
return err
8694
})
@@ -120,6 +128,12 @@ func getProposal(c *cli.Context, id uint64) (*api.PDAOProposalResponse, error) {
120128
return nil, err
121129
}
122130

131+
// Get the voting delegate address
132+
delegateAddress, err := network.GetCurrentVotingDelegate(rp, nodeAccount.Address, nil)
133+
if err != nil {
134+
return nil, err
135+
}
136+
123137
// Get proposal
124138
proposal, err := protocol.GetProposalDetails(rp, id, nil)
125139
if err != nil {
@@ -132,10 +146,17 @@ func getProposal(c *cli.Context, id uint64) (*api.PDAOProposalResponse, error) {
132146
return nil, err
133147
}
134148

149+
// Get the delegate vote direction
150+
delegateVoteDir, err := protocol.GetAddressVoteDirection(rp, id, delegateAddress, nil)
151+
if err != nil {
152+
return nil, err
153+
}
154+
135155
// Make the augmented proposal
136156
augmentedProp := api.PDAOProposalWithNodeVoteDirection{
137157
ProtocolDaoProposalDetails: proposal,
138158
NodeVoteDirection: voteDir,
159+
DelegateVoteDirection: delegateVoteDir,
139160
}
140161
response.Proposal = augmentedProp
141162

shared/types/api/pdao.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import (
1212

1313
type PDAOProposalWithNodeVoteDirection struct {
1414
protocol.ProtocolDaoProposalDetails
15-
NodeVoteDirection types.VoteDirection `json:"nodeVoteDirection"`
15+
NodeVoteDirection types.VoteDirection `json:"nodeVoteDirection"`
16+
DelegateVoteDirection types.VoteDirection `json:"delegateVoteDirection"`
1617
}
1718

1819
type PDAOProposalsResponse struct {

0 commit comments

Comments
 (0)