Skip to content

Commit

Permalink
Small inclusion vote changes
Browse files Browse the repository at this point in the history
  • Loading branch information
0xkorin committed Feb 13, 2024
1 parent dfac0b4 commit 5848f17
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 2 deletions.
34 changes: 34 additions & 0 deletions contracts/governance/InclusionRound.vy
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@ management: public(address)
pending_management: public(address)
vote_epoch: public(uint256)

event SetVoteEpoch:
epoch: uint256

event PendingManagement:
management: indexed(address)

event SetManagement:
management: indexed(address)

EPOCH_LENGTH: constant(uint256) = 4 * 7 * 24 * 60 * 60

@external
Expand Down Expand Up @@ -82,3 +91,28 @@ def set_vote_epoch(_epoch: uint256):
assert msg.sender == self.management
assert _epoch >= self._epoch()
self.vote_epoch = _epoch
log SetVoteEpoch(_epoch)

@external
def set_management(_management: address):
"""
@notice
Set the pending management address.
Needs to be accepted by that account separately to transfer management over
@param _management New pending management address
"""
assert msg.sender == self.management
self.pending_management = _management
log PendingManagement(_management)

@external
def accept_management():
"""
@notice
Accept management role.
Can only be called by account previously marked as pending management by current management
"""
assert msg.sender == self.pending_management
self.pending_management = empty(address)
self.management = msg.sender
log SetManagement(msg.sender)
5 changes: 3 additions & 2 deletions contracts/governance/InclusionVote.vy
Original file line number Diff line number Diff line change
Expand Up @@ -205,10 +205,10 @@ def apply(_token: address):
@param _token Token address to apply for
"""
epoch: uint256 = self._epoch()
enabled: bool = self.enabled
assert self.latest_finalized_epoch == epoch - 1
assert not self._vote_open()
assert not self._vote_open() or not enabled

enabled: bool = self.enabled
if enabled:
assert self.num_candidates[epoch] < 32
else:
Expand Down Expand Up @@ -402,6 +402,7 @@ def enable():
@notice Enable the inclusion vote procedure
"""
assert msg.sender == self.management
assert not self._vote_open()
self.enabled = True
log Enable(True)

Expand Down
41 changes: 41 additions & 0 deletions tests/governance/test_inclusion_vote.py
Original file line number Diff line number Diff line change
Expand Up @@ -250,3 +250,44 @@ def test_transfer_management(deployer, alice, bob, voting):
voting.accept_management(sender=alice)
assert voting.management() == alice.address
assert voting.pending_management() == ZERO_ADDRESS

def test_inclusion_round(chain, project, deployer, voting):
proxy = project.OwnershipProxy.deploy(sender=deployer)
executor = project.Executor.deploy(proxy, sender=deployer)
data = proxy.set_management.encode_input(executor)
proxy.execute(proxy, data, sender=deployer)

round = project.InclusionRound.deploy(voting.genesis(), executor, voting, sender=deployer)
round.set_vote_epoch(2, sender=deployer)
executor.set_governor(round, True, sender=deployer)

voting.set_management(proxy, sender=deployer)
data = voting.accept_management.encode_input()
executor.execute_single(voting, data, sender=deployer)

# toggling outside of epoch disables vote
assert voting.enabled()
round.toggle(sender=deployer)
assert not voting.enabled()

# toggling again in same epoch doesnt do anything
round.toggle(sender=deployer)
assert not voting.enabled()

# during vote epoch, toggling enables it
chain.pending_timestamp += EPOCH_LENGTH
round.toggle(sender=deployer)
assert voting.enabled()

# toggling again in same epoch doesnt do anything
round.toggle(sender=deployer)
assert voting.enabled()

# after vote epoch, toggling disables it
chain.pending_timestamp += EPOCH_LENGTH
round.toggle(sender=deployer)
assert not voting.enabled()

# toggling again doesnt do anything
round.toggle(sender=deployer)
assert not voting.enabled()

0 comments on commit 5848f17

Please sign in to comment.