Skip to content

Commit ef139ab

Browse files
authored
Merge pull request #79 from bancorprotocol/access-control
Ensure that every proxy contract implements AccessControl + cleanups
2 parents ca03b7a + 4616494 commit ef139ab

31 files changed

+234
-196
lines changed

packages/v3/components/Contracts.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@ import {
1515
TestERC20Token__factory,
1616
TestMathEx__factory,
1717
TestNetworkTokenPool__factory,
18-
TestOwnedUpgradeable__factory,
18+
TestOwned__factory,
1919
TestPendingWithdrawals__factory,
2020
TestPoolAverageRate__factory,
2121
TestPoolCollection__factory,
2222
TestReserveToken__factory,
2323
TestSafeERC20Ex__factory,
2424
TestSystemToken__factory,
2525
TestTokenGovernance__factory,
26-
TokenHolderUpgradeable__factory,
26+
TestUpgradeable__factory,
27+
TokenHolder__factory,
2728
TransparentUpgradeableProxy__factory
2829
} from '../typechain';
2930

@@ -90,13 +91,14 @@ const getContracts = (signer?: Signer) => ({
9091
TestPoolCollection: deployOrAttach<TestPoolCollection__factory>('TestPoolCollection', signer),
9192
TestNetworkTokenPool: deployOrAttach<TestNetworkTokenPool__factory>('TestNetworkTokenPool', signer),
9293
TestMathEx: deployOrAttach<TestMathEx__factory>('TestMathEx', signer),
93-
TestOwnedUpgradeable: deployOrAttach<TestOwnedUpgradeable__factory>('TestOwnedUpgradeable', signer),
94+
TestOwned: deployOrAttach<TestOwned__factory>('TestOwned', signer),
9495
TestPendingWithdrawals: deployOrAttach<TestPendingWithdrawals__factory>('TestPendingWithdrawals', signer),
9596
TestReserveToken: deployOrAttach<TestReserveToken__factory>('TestReserveToken', signer),
9697
TestSafeERC20Ex: deployOrAttach<TestSafeERC20Ex__factory>('TestSafeERC20Ex', signer),
9798
TestSystemToken: deployOrAttach<TestSystemToken__factory>('TestSystemToken', signer),
9899
TestTokenGovernance: deployOrAttach<TestTokenGovernance__factory>('TestTokenGovernance', signer),
99-
TokenHolderUpgradeable: deployOrAttach<TokenHolderUpgradeable__factory>('TokenHolderUpgradeable', signer),
100+
TestUpgradeable: deployOrAttach<TestUpgradeable__factory>('TestUpgradeable', signer),
101+
TokenHolder: deployOrAttach<TokenHolder__factory>('TokenHolder', signer),
100102
TransparentUpgradeableProxy: deployOrAttach<TransparentUpgradeableProxy__factory>(
101103
'TransparentUpgradeableProxy',
102104
signer
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// SPDX-License-Identifier: SEE LICENSE IN LICENSE
2+
pragma solidity 0.7.6;
3+
4+
import { Owned } from "../utility/Owned.sol";
5+
6+
contract TestOwned is Owned {}

packages/v3/contracts/helpers/TestOwnedUpgradeable.sol

Lines changed: 0 additions & 17 deletions
This file was deleted.

packages/v3/contracts/helpers/TestSystemToken.sol

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,16 @@ pragma solidity 0.7.6;
44
import { IMintableToken } from "@bancor/token-governance/0.7.6/contracts/IMintableToken.sol";
55
import { IClaimable } from "@bancor/token-governance/0.7.6/contracts/IClaimable.sol";
66

7-
import { OwnedUpgradeable } from "../utility/OwnedUpgradeable.sol";
7+
import { Owned } from "../utility/Owned.sol";
88

99
import { TestERC20Token } from "./TestERC20Token.sol";
1010

11-
contract TestSystemToken is IMintableToken, OwnedUpgradeable, TestERC20Token {
11+
contract TestSystemToken is IMintableToken, Owned, TestERC20Token {
1212
constructor(
1313
string memory name,
1414
string memory symbol,
1515
uint256 totalSupply
16-
) TestERC20Token(name, symbol, totalSupply) {
17-
__Owned_init();
18-
}
19-
20-
function version() external pure override returns (uint16) {
21-
return 1;
22-
}
16+
) TestERC20Token(name, symbol, totalSupply) {}
2317

2418
function issue(address to, uint256 amount) external override {
2519
_mint(to, amount);
@@ -29,15 +23,15 @@ contract TestSystemToken is IMintableToken, OwnedUpgradeable, TestERC20Token {
2923
_burn(from, amount);
3024
}
3125

32-
function owner() public view override(IClaimable, OwnedUpgradeable) returns (address) {
26+
function owner() public view override(IClaimable, Owned) returns (address) {
3327
return super.owner();
3428
}
3529

36-
function transferOwnership(address newOwner) public override(IClaimable, OwnedUpgradeable) {
30+
function transferOwnership(address newOwner) public override(IClaimable, Owned) {
3731
super.transferOwnership(newOwner);
3832
}
3933

40-
function acceptOwnership() public override(IClaimable, OwnedUpgradeable) {
34+
function acceptOwnership() public override(IClaimable, Owned) {
4135
super.acceptOwnership();
4236
}
4337
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// SPDX-License-Identifier: SEE LICENSE IN LICENSE
2+
pragma solidity 0.7.6;
3+
4+
import { Upgradeable } from "../utility/Upgradeable.sol";
5+
6+
contract TestUpgradeable is Upgradeable {
7+
function initialize() external initializer {
8+
__TestUpgradeable_init();
9+
}
10+
11+
// solhint-disable func-name-mixedcase
12+
13+
function __TestUpgradeable_init() internal initializer {
14+
__Upgradeable_init();
15+
16+
__TestUpgradeable_init_unchained();
17+
}
18+
19+
function __TestUpgradeable_init_unchained() internal initializer {}
20+
21+
function version() external pure override returns (uint16) {
22+
return 1;
23+
}
24+
25+
function restricted() external view onlyOwner {}
26+
}

packages/v3/contracts/network/BancorNetwork.sol

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import { EnumerableSetUpgradeable } from "@openzeppelin/contracts-upgradeable/ut
1212
import { ITokenGovernance } from "@bancor/token-governance/0.7.6/contracts/TokenGovernance.sol";
1313

1414
import { ITokenHolder } from "../utility/interfaces/ITokenHolder.sol";
15-
import { OwnedUpgradeable } from "../utility/OwnedUpgradeable.sol";
1615
import { Upgradeable } from "../utility/Upgradeable.sol";
1716
import { Time } from "../utility/Time.sol";
1817
import { Utils } from "../utility/Utils.sol";
@@ -32,7 +31,7 @@ import { IBancorVault } from "./interfaces/IBancorVault.sol";
3231
/**
3332
* @dev Bancor Network contract
3433
*/
35-
contract BancorNetwork is IBancorNetwork, Upgradeable, OwnedUpgradeable, ReentrancyGuardUpgradeable, Time, Utils {
34+
contract BancorNetwork is IBancorNetwork, Upgradeable, ReentrancyGuardUpgradeable, Time, Utils {
3635
using Address for address payable;
3736
using SafeMath for uint256;
3837
using EnumerableSetUpgradeable for EnumerableSetUpgradeable.AddressSet;
@@ -276,7 +275,7 @@ contract BancorNetwork is IBancorNetwork, Upgradeable, OwnedUpgradeable, Reentra
276275
internal
277276
initializer
278277
{
279-
__Owned_init();
278+
__Upgradeable_init();
280279
__ReentrancyGuard_init();
281280

282281
__BancorNetwork_init_unchained(initNetworkTokenPool, initPendingWithdrawals);

packages/v3/contracts/network/BancorVault.sol

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ pragma solidity 0.7.6;
44
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
55
import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
66

7-
import { AccessControlUpgradeable } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";
87
import { ReentrancyGuardUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
98
import { PausableUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol";
109

@@ -19,14 +18,7 @@ import { IBancorVault } from "./interfaces/IBancorVault.sol";
1918
/**
2019
* @dev Bancor Vault contract
2120
*/
22-
contract BancorVault is
23-
IBancorVault,
24-
Upgradeable,
25-
AccessControlUpgradeable,
26-
PausableUpgradeable,
27-
ReentrancyGuardUpgradeable,
28-
Utils
29-
{
21+
contract BancorVault is IBancorVault, Upgradeable, PausableUpgradeable, ReentrancyGuardUpgradeable, Utils {
3022
using SafeERC20 for IERC20;
3123
using ReserveToken for IReserveToken;
3224

@@ -70,7 +62,7 @@ contract BancorVault is
7062
* @dev initializes the contract and its parents
7163
*/
7264
function __BancorVault_init() internal initializer {
73-
__AccessControl_init();
65+
__Upgradeable_init();
7466
__Pausable_init();
7567
__ReentrancyGuard_init();
7668

@@ -99,10 +91,6 @@ contract BancorVault is
9991
_;
10092
}
10193

102-
function _hasRole(bytes32 role, address account) internal view {
103-
require(hasRole(role, account), "ERR_ACCESS_DENIED");
104-
}
105-
10694
receive() external payable override {}
10795

10896
/**

packages/v3/contracts/network/NetworkSettings.sol

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ pragma solidity 0.7.6;
44
import { EnumerableSetUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol";
55

66
import { ITokenHolder } from "../utility/interfaces/ITokenHolder.sol";
7-
import { OwnedUpgradeable } from "../utility/OwnedUpgradeable.sol";
87
import { Upgradeable } from "../utility/Upgradeable.sol";
98
import { Utils } from "../utility/Utils.sol";
109

@@ -15,7 +14,7 @@ import { INetworkSettings } from "./interfaces/INetworkSettings.sol";
1514
/**
1615
* @dev Network Settings contract
1716
*/
18-
contract NetworkSettings is INetworkSettings, Upgradeable, OwnedUpgradeable, Utils {
17+
contract NetworkSettings is INetworkSettings, Upgradeable, Utils {
1918
using EnumerableSetUpgradeable for EnumerableSetUpgradeable.AddressSet;
2019

2120
// a set of tokens which are eligeble for protection
@@ -101,7 +100,7 @@ contract NetworkSettings is INetworkSettings, Upgradeable, OwnedUpgradeable, Uti
101100
* @dev initializes the contract and its parents
102101
*/
103102
function __NetworkSettings_init() internal initializer {
104-
__Owned_init();
103+
__Upgradeable_init();
105104

106105
__NetworkSettings_init_unchained();
107106
}

packages/v3/contracts/network/PendingWithdrawals.sol

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import { SafeMath } from "@openzeppelin/contracts/math/SafeMath.sol";
1010

1111
import { IReserveToken } from "../token/interfaces/IReserveToken.sol";
1212

13-
import { OwnedUpgradeable } from "../utility/OwnedUpgradeable.sol";
1413
import { Upgradeable } from "../utility/Upgradeable.sol";
1514
import { Utils } from "../utility/Utils.sol";
1615
import { Time } from "../utility/Time.sol";
@@ -23,14 +22,7 @@ import { IPendingWithdrawals, WithdrawalRequest, CompletedWithdrawal } from "./i
2322
/**
2423
* @dev Pending Withdrawals contract
2524
*/
26-
contract PendingWithdrawals is
27-
IPendingWithdrawals,
28-
Upgradeable,
29-
OwnedUpgradeable,
30-
ReentrancyGuardUpgradeable,
31-
Time,
32-
Utils
33-
{
25+
contract PendingWithdrawals is IPendingWithdrawals, Upgradeable, ReentrancyGuardUpgradeable, Time, Utils {
3426
using SafeMath for uint32;
3527
using SafeMath for uint256;
3628
using SafeERC20 for IPoolToken;
@@ -134,8 +126,8 @@ contract PendingWithdrawals is
134126
* @dev initializes the contract and its parents
135127
*/
136128
function __PendingWithdrawals_init() internal initializer {
129+
__Upgradeable_init();
137130
__ReentrancyGuard_init();
138-
__Owned_init();
139131

140132
__PendingWithdrawals_init_unchained();
141133
}

packages/v3/contracts/pools/PoolCollection.sol

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { ReserveToken } from "../token/ReserveToken.sol";
1414

1515
import { Fraction } from "../utility/Types.sol";
1616
import { MAX_UINT128, PPM_RESOLUTION } from "../utility/Constants.sol";
17-
import { OwnedUpgradeable } from "../utility/OwnedUpgradeable.sol";
17+
import { Owned } from "../utility/Owned.sol";
1818
import { Utils } from "../utility/Utils.sol";
1919
import { MathEx } from "../utility/MathEx.sol";
2020

@@ -34,7 +34,7 @@ import { PoolAverageRate, AverageRate } from "./PoolAverageRate.sol";
3434
*
3535
* - in Bancor V3, the address of reserve token serves as the pool unique ID in both contract functions and events
3636
*/
37-
contract PoolCollection is IPoolCollection, OwnedUpgradeable, ReentrancyGuardUpgradeable, Utils {
37+
contract PoolCollection is IPoolCollection, Owned, ReentrancyGuardUpgradeable, Utils {
3838
using SafeMath for uint256;
3939
using SafeCast for uint256;
4040
using ReserveToken for IReserveToken;
@@ -132,7 +132,6 @@ contract PoolCollection is IPoolCollection, OwnedUpgradeable, ReentrancyGuardUpg
132132
validAddress(address(initNetwork))
133133
validAddress(address(initPoolTokenFactory))
134134
{
135-
__Owned_init();
136135
__ReentrancyGuard_init();
137136

138137
_network = initNetwork;

packages/v3/contracts/pools/PoolToken.sol

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ import { ERC20Permit } from "@openzeppelin/contracts/drafts/ERC20Permit.sol";
77
import { IReserveToken } from "../token/interfaces/IReserveToken.sol";
88
import { ERC20Burnable } from "../token/ERC20Burnable.sol";
99

10-
import { OwnedUpgradeable } from "../utility/OwnedUpgradeable.sol";
10+
import { Owned } from "../utility/Owned.sol";
1111
import { Utils } from "../utility/Utils.sol";
1212

1313
import { IPoolToken } from "./interfaces/IPoolToken.sol";
1414

1515
/**
1616
* @dev Pool Token contract
1717
*/
18-
contract PoolToken is IPoolToken, ERC20Permit, ERC20Burnable, OwnedUpgradeable, Utils {
18+
contract PoolToken is IPoolToken, ERC20Permit, ERC20Burnable, Owned, Utils {
1919
IReserveToken private immutable _reserveToken;
2020

2121
/**
@@ -30,8 +30,6 @@ contract PoolToken is IPoolToken, ERC20Permit, ERC20Burnable, OwnedUpgradeable,
3030
_setupDecimals(decimals);
3131

3232
_reserveToken = initReserveToken;
33-
34-
__Owned_init();
3533
}
3634

3735
/**

packages/v3/contracts/pools/PoolTokenFactory.sol

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { ReserveToken } from "../token/ReserveToken.sol";
66

77
import { Upgradeable } from "../utility/Upgradeable.sol";
88
import { Utils } from "../utility/Utils.sol";
9-
import { OwnedUpgradeable } from "../utility/OwnedUpgradeable.sol";
109

1110
import { IPoolTokenFactory } from "./interfaces/IPoolTokenFactory.sol";
1211
import { IPoolToken } from "./interfaces/IPoolToken.sol";
@@ -15,7 +14,7 @@ import { PoolToken } from "./PoolToken.sol";
1514
/**
1615
* @dev Pool Token Factory contract
1716
*/
18-
contract PoolTokenFactory is IPoolTokenFactory, Upgradeable, OwnedUpgradeable, Utils {
17+
contract PoolTokenFactory is IPoolTokenFactory, Upgradeable, Utils {
1918
using ReserveToken for IReserveToken;
2019

2120
string private constant POOL_TOKEN_SYMBOL_PREFIX = "bn";
@@ -49,7 +48,7 @@ contract PoolTokenFactory is IPoolTokenFactory, Upgradeable, OwnedUpgradeable, U
4948
* @dev initializes the contract and its parents
5049
*/
5150
function __PoolTokenFactory_init() internal initializer {
52-
__Owned_init();
51+
__Upgradeable_init();
5352

5453
__PoolTokenFactory_init_unchained();
5554
}

packages/v3/contracts/pools/interfaces/IPoolToken.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@ import { IERC20Permit } from "@openzeppelin/contracts/drafts/IERC20Permit.sol";
77
import { IReserveToken } from "../../token/interfaces/IReserveToken.sol";
88
import { IERC20Burnable } from "../../token/interfaces/IERC20Burnable.sol";
99

10+
import { IVersioned } from "../../utility/interfaces/IVersioned.sol";
1011
import { IOwned } from "../../utility/interfaces/IOwned.sol";
1112

1213
/**
1314
* @dev Pool Token interface
1415
*/
15-
interface IPoolToken is IOwned, IERC20, IERC20Permit, IERC20Burnable {
16+
interface IPoolToken is IVersioned, IOwned, IERC20, IERC20Permit, IERC20Burnable {
1617
/**
1718
* @dev returns the address of the reserve token
1819
*/

packages/v3/contracts/utility/OwnedUpgradeable.sol renamed to packages/v3/contracts/utility/Owned.sol

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,13 @@ pragma solidity 0.7.6;
33

44
import { IOwned } from "./interfaces/IOwned.sol";
55

6-
import { Upgradeable } from "./Upgradeable.sol";
7-
86
/**
97
* @dev this contract provides support and utilities for contract ownership
108
*/
11-
abstract contract OwnedUpgradeable is IOwned, Upgradeable {
9+
abstract contract Owned is IOwned {
1210
address private _owner;
1311
address private _newOwner;
1412

15-
// upgrade forward-compatibility storage gap
16-
uint256[MAX_GAP - 2] private __gap;
17-
1813
/**
1914
* @dev triggered when the owner is updated
2015
*/
@@ -23,16 +18,9 @@ abstract contract OwnedUpgradeable is IOwned, Upgradeable {
2318
// solhint-disable func-name-mixedcase
2419

2520
/**
26-
* @dev initializes the contract and its parents
27-
*/
28-
function __Owned_init() internal initializer {
29-
__Owned_init_unchained();
30-
}
31-
32-
/**
33-
* @dev performs contract-specific initialization
21+
* @dev initializes the contract
3422
*/
35-
function __Owned_init_unchained() internal initializer {
23+
constructor() {
3624
_setOwner(msg.sender);
3725
}
3826

0 commit comments

Comments
 (0)