TestDelegate.t.sol
1 pragma solidity >=0.6.0; 2 3 import "truffle/Assert.sol"; 4 import "./Base.t.sol"; 5 6 contract TestDelegate is Base { 7 8 function testDelegateBalance() public { 9 10 ShareHolder s1 = new ShareHolder(address(settings), address(govToken), address(manager)); 11 ShareHolder s2 = new ShareHolder(address(settings), address(govToken), address(manager)); 12 ShareHolder s3 = new ShareHolder(address(settings), address(govToken), address(manager)); 13 14 govToken.deposit(address(s1), abi.encode(1 ether)); 15 s1.delegateTo(address(s3)); 16 17 govToken.deposit(address(s2), abi.encode(1 ether)); 18 s2.delegateTo(address(s3)); 19 20 s3.delegateTo(address(s1)); 21 22 Assert.equal(0, govToken.delegateBalanceOf(address(s1)), "s1 delegate balance t0"); 23 Assert.equal(0, govToken.delegateBalanceOf(address(s2)), "s2 delegate balance t0"); 24 Assert.equal(2 ether, govToken.delegateBalanceOf(address(s3)), "s3 delegate balance t0"); 25 26 Assert.equal(1 ether, govToken.balanceOf(address(s1)), "s1 balance t0"); 27 Assert.equal(1 ether, govToken.balanceOf(address(s2)), "s2 balance t0"); 28 Assert.equal(0, govToken.balanceOf(address(s3)), "s3 balance t0"); 29 30 s2.transfer(address(s3), 1 ether / 2); 31 32 Assert.equal(1 ether / 2, govToken.delegateBalanceOf(address(s1)), "s1 delegate balance t1"); 33 Assert.equal(0, govToken.delegateBalanceOf(address(s2)), "s2 delegate balance t1"); 34 Assert.equal(3 ether / 2, govToken.delegateBalanceOf(address(s3)), "s3 delegate balance t1"); 35 36 Assert.equal(1 ether, govToken.balanceOf(address(s1)), "s1 balance t1"); 37 Assert.equal(1 ether / 2, govToken.balanceOf(address(s2)), "s2 balance t1"); 38 Assert.equal(1 ether / 2, govToken.balanceOf(address(s3)), "s3 balance t1"); 39 } 40 41 function testDelegateSupressingHotVoting() public { 42 43 ShareHolder s1 = new ShareHolder(address(settings), address(govToken), address(manager)); 44 ShareHolder s2 = new ShareHolder(address(settings), address(govToken), address(manager)); 45 46 govToken.deposit(address(s1), abi.encode(1 ether)); 47 48 (bool r1,) = address(s1).call( 49 abi.encodePacked( 50 s1.delegateTo.selector, 51 abi.encode(address(s2)) 52 ) 53 ); 54 55 Assert.isTrue(r1, "delegateTo not supressing hot voting should succeed"); 56 57 settings.suppressHotVoting(); 58 59 (bool r2,) = address(s1).call( 60 abi.encodePacked( 61 s1.delegateTo.selector, 62 abi.encode(address(s2)) 63 ) 64 ); 65 66 Assert.isFalse(r2, "delegateTo supressing hot voting should fail"); 67 } 68 }