Skip to content

Commit

Permalink
Option to remove delegate
Browse files Browse the repository at this point in the history
  • Loading branch information
sunbreak1211 committed Nov 24, 2023
1 parent d852143 commit 5701a66
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
8 changes: 5 additions & 3 deletions src/LockstakeEngine.sol
Original file line number Diff line number Diff line change
Expand Up @@ -199,16 +199,18 @@ contract LockstakeEngine {
}

function delegate(address urn, address delegate_) external urnOwner(urn) {
require(delegateFactory.isDelegate(delegate_) == 1, "LockstakeEngine/not-valid-delegate");
require(delegate_ == address(0) || delegateFactory.isDelegate(delegate_) == 1, "LockstakeEngine/not-valid-delegate");
address prevDelegate = urnDelegates[urn];
require(prevDelegate != delegate_, "LockstakeEngine/same-delegate");
(uint256 wad,) = vat.urns(ilk, urn);
if (wad > 0) {
if (prevDelegate != address(0)) {
DelegateLike(prevDelegate).free(wad);
}
gov.approve(address(delegate_), wad);
DelegateLike(delegate_).lock(wad);
if (delegate_ != address(0)) {
gov.approve(address(delegate_), wad);
DelegateLike(delegate_).lock(wad);
}
}
urnDelegates[urn] = delegate_;
emit Delegate(urn, delegate_);
Expand Down
11 changes: 11 additions & 0 deletions test/LockstakeEngine.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -240,18 +240,29 @@ contract AllocatorVaultTest is DssTest {
function testDelegate() public {
address urn = engine.open();
engine.delegate(urn, voterDelegate);
assertEq(engine.urnDelegates(urn), voterDelegate);
vm.prank(address(888)); address voterDelegate2 = delFactory.create();
gov.approve(address(engine), 100_000 * 10**18);
engine.lock(urn, 100_000 * 10**18);
assertEq(DelegateMock(voterDelegate).stake(address(engine)), 100_000 * 10**18);
assertEq(DelegateMock(voterDelegate2).stake(address(engine)), 0);
assertEq(gov.balanceOf(voterDelegate), 100_000 * 10**18);
assertEq(gov.balanceOf(voterDelegate2), 0);
assertEq(gov.balanceOf(address(engine)), 0);
engine.delegate(urn, voterDelegate2);
assertEq(engine.urnDelegates(urn), voterDelegate2);
assertEq(DelegateMock(voterDelegate).stake(address(engine)), 0);
assertEq(DelegateMock(voterDelegate2).stake(address(engine)), 100_000 * 10**18);
assertEq(gov.balanceOf(voterDelegate), 0);
assertEq(gov.balanceOf(voterDelegate2), 100_000 * 10**18);
assertEq(gov.balanceOf(address(engine)), 0);
engine.delegate(urn, address(0));
assertEq(engine.urnDelegates(urn), address(0));
assertEq(DelegateMock(voterDelegate).stake(address(engine)), 0);
assertEq(DelegateMock(voterDelegate2).stake(address(engine)), 0);
assertEq(gov.balanceOf(voterDelegate), 0);
assertEq(gov.balanceOf(voterDelegate2), 0);
assertEq(gov.balanceOf(address(engine)), 100_000 * 10**18);
}

function testDrawWipe() public {
Expand Down

0 comments on commit 5701a66

Please sign in to comment.