/ test / governance / ProtocolSettings / TestDelegate.t.sol
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  }