From e97d1d32af8736142f671eef00582174d4e001f7 Mon Sep 17 00:00:00 2001 From: MathisGD Date: Thu, 6 Jul 2023 10:43:10 +0200 Subject: [PATCH 1/3] feat: add owner --- src/Blue.sol | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/Blue.sol b/src/Blue.sol index 7f84e570f..e1aaacbf1 100644 --- a/src/Blue.sol +++ b/src/Blue.sol @@ -39,6 +39,8 @@ contract Blue { // Storage. + // Owner. + address public owner; // User' supply balances. mapping(Id => mapping(address => uint)) public supplyShare; // User' borrow balances. @@ -56,6 +58,19 @@ contract Blue { // Interests last update (used to check if a market has been created). mapping(Id => uint) public lastUpdate; + // Constructor. + + constructor(address newOwner) { + owner = newOwner; + } + + // Only owner functions. + + function transferOwnership(address newOwner) external { + require(msg.sender == owner); + owner = newOwner; + } + // Markets management. function createMarket(Market calldata market) external { From ba213c4591fe6ff9c102a5c49c2483dc40c97091 Mon Sep 17 00:00:00 2001 From: MerlinEgalite Date: Wed, 5 Jul 2023 15:27:39 +0200 Subject: [PATCH 2/3] test: add test owner --- test/forge/Blue.t.sol | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/test/forge/Blue.t.sol b/test/forge/Blue.t.sol index 753372473..3624ea74d 100644 --- a/test/forge/Blue.t.sol +++ b/test/forge/Blue.t.sol @@ -91,6 +91,30 @@ contract BlueTest is Test { // Tests + function testOwner(address owner) public { + Blue blue2 = new Blue(owner); + + assertEq(blue2.owner(), owner, "owner"); + } + + function testTransferOwnership(address oldOwner, address newOwner) public { + Blue blue2 = new Blue(oldOwner); + + vm.prank(oldOwner); + blue2.transferOwnership(newOwner); + assertEq(blue2.owner(), newOwner, "owner"); + } + + function testTransferOwnershipWhenNotOwner(address attacker, address newOwner) public { + vm.assume(attacker != address(0xdead)); + + Blue blue2 = new Blue(address(0xdead)); + + vm.prank(attacker); + vm.expectRevert("not owner"); + blue2.transferOwnership(newOwner); + } + function testSupply(uint amount) public { amount = bound(amount, 1, 2 ** 64); From f4e53bfa1b1e252e231ce1cbc04406ef5348edda Mon Sep 17 00:00:00 2001 From: MathisGD Date: Thu, 6 Jul 2023 10:49:14 +0200 Subject: [PATCH 3/3] fix: tests and error message --- src/Blue.sol | 2 +- test/forge/Blue.t.sol | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Blue.sol b/src/Blue.sol index e1aaacbf1..45ca704db 100644 --- a/src/Blue.sol +++ b/src/Blue.sol @@ -67,7 +67,7 @@ contract Blue { // Only owner functions. function transferOwnership(address newOwner) external { - require(msg.sender == owner); + require(msg.sender == owner, "not owner"); owner = newOwner; } diff --git a/test/forge/Blue.t.sol b/test/forge/Blue.t.sol index 3624ea74d..6730a31a1 100644 --- a/test/forge/Blue.t.sol +++ b/test/forge/Blue.t.sol @@ -14,6 +14,7 @@ import {OracleMock as Oracle} from "src/mocks/OracleMock.sol"; contract BlueTest is Test { using MathLib for uint; + address private constant owner = address(0xdeed); address private constant borrower = address(1234); address private constant liquidator = address(5678); uint private constant lLTV = 0.8 ether; @@ -28,7 +29,7 @@ contract BlueTest is Test { function setUp() public { // Create Blue. - blue = new Blue(); + blue = new Blue(owner); // List a market. borrowableAsset = new ERC20("borrowable", "B", 18); @@ -91,10 +92,10 @@ contract BlueTest is Test { // Tests - function testOwner(address owner) public { - Blue blue2 = new Blue(owner); + function testOwner(address newOwner) public { + Blue blue2 = new Blue(newOwner); - assertEq(blue2.owner(), owner, "owner"); + assertEq(blue2.owner(), newOwner, "owner"); } function testTransferOwnership(address oldOwner, address newOwner) public {