178 lines
5.5 KiB
Solidity
178 lines
5.5 KiB
Solidity
// SPDX-License-Identifier: Apache 2
|
|
|
|
pragma solidity ^0.8.0;
|
|
|
|
import "./utils/EntropyTestUtils.t.sol";
|
|
import "../contracts/entropy/EntropyUpgradable.sol";
|
|
import "./utils/InvalidMagic.t.sol";
|
|
import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
|
|
import "@pythnetwork/entropy-sdk-solidity/EntropyErrors.sol";
|
|
|
|
contract EntropyAuthorized is Test, EntropyTestUtils {
|
|
ERC1967Proxy public proxy;
|
|
EntropyUpgradable public random;
|
|
EntropyUpgradable public random2;
|
|
InvalidMagic public randomDifferentMagic;
|
|
|
|
address public owner = address(1);
|
|
address public admin = address(2);
|
|
address public admin2 = address(3);
|
|
|
|
// We don't need to register providers for these tests
|
|
// We are just checking for the default provider, which
|
|
// only required an address.
|
|
address public provider1 = address(4);
|
|
address public provider2 = address(5);
|
|
|
|
address public owner2 = address(6);
|
|
|
|
uint128 pythFeeInWei = 7;
|
|
|
|
function setUp() public {
|
|
EntropyUpgradable _random = new EntropyUpgradable();
|
|
// deploy proxy contract and point it to implementation
|
|
proxy = new ERC1967Proxy(address(_random), "");
|
|
// wrap in ABI to support easier calls
|
|
random = EntropyUpgradable(address(proxy));
|
|
// to test for upgrade
|
|
random2 = new EntropyUpgradable();
|
|
randomDifferentMagic = new InvalidMagic();
|
|
|
|
random.initialize(owner, admin, pythFeeInWei, provider1, false);
|
|
}
|
|
|
|
function testSetPythFeeByAdmin() public {
|
|
vm.prank(admin);
|
|
random.setPythFee(10);
|
|
assertEq(random.getPythFee(), 10);
|
|
}
|
|
|
|
function testSetPythFeeByOwner() public {
|
|
vm.prank(owner);
|
|
random.setPythFee(10);
|
|
assertEq(random.getPythFee(), 10);
|
|
}
|
|
|
|
function testExpectRevertSetPythFeeByUnauthorized() public {
|
|
vm.expectRevert(EntropyErrors.Unauthorized.selector);
|
|
vm.prank(admin2);
|
|
random.setPythFee(10);
|
|
}
|
|
|
|
function testSetDefaultProviderByOwner() public {
|
|
vm.prank(owner);
|
|
random.setDefaultProvider(provider2);
|
|
assertEq(random.getDefaultProvider(), provider2);
|
|
}
|
|
|
|
function testSetDefaultProviderByAdmin() public {
|
|
vm.prank(admin);
|
|
random.setDefaultProvider(provider2);
|
|
assertEq(random.getDefaultProvider(), provider2);
|
|
}
|
|
|
|
function testExpectRevertSetDefaultProviderByUnauthorized() public {
|
|
vm.expectRevert(EntropyErrors.Unauthorized.selector);
|
|
vm.prank(admin2);
|
|
random.setDefaultProvider(provider2);
|
|
}
|
|
|
|
function testUpgradeByOwner() public {
|
|
vm.prank(owner);
|
|
random.upgradeTo(address(random2));
|
|
}
|
|
|
|
function testExpectRevertUpgradeByAdmin() public {
|
|
// The message is returned by openzepplin upgrade contracts
|
|
vm.expectRevert("Ownable: caller is not the owner");
|
|
vm.prank(admin);
|
|
random.upgradeTo(address(random2));
|
|
}
|
|
|
|
function testExpectRevertUpgradeByUnauthorized() public {
|
|
// The message is returned by openzepplin upgrade contracts
|
|
vm.expectRevert("Ownable: caller is not the owner");
|
|
vm.prank(provider1);
|
|
random.upgradeTo(address(random2));
|
|
}
|
|
|
|
// There can be another case that the magic function doesn't
|
|
// exist but it's fine. (It will revert with no reason)
|
|
// The randomDifferentMagic contract do have a magic in this case
|
|
function testExpectRevertDifferentMagicContractUpgrade() public {
|
|
vm.expectRevert(EntropyErrors.InvalidUpgradeMagic.selector);
|
|
vm.prank(owner);
|
|
random.upgradeTo(address(randomDifferentMagic));
|
|
}
|
|
|
|
function testExpectRevertRequestOwnershipTransferByUnauthorized() public {
|
|
vm.expectRevert("Ownable: caller is not the owner");
|
|
vm.prank(provider1);
|
|
random.transferOwnership(owner2);
|
|
}
|
|
|
|
function testExpectRevertRequestOwnershipTransferByAdmin() public {
|
|
vm.expectRevert("Ownable: caller is not the owner");
|
|
vm.prank(admin);
|
|
random.transferOwnership(owner2);
|
|
}
|
|
|
|
function testRequestAndAcceptOwnershipTransfer() public {
|
|
vm.prank(owner);
|
|
random.transferOwnership(owner2);
|
|
assertEq(random.pendingOwner(), owner2);
|
|
|
|
vm.prank(owner2);
|
|
random.acceptOwnership();
|
|
assertEq(random.owner(), owner2);
|
|
}
|
|
|
|
function testRequestAndAcceptOwnershipTransferUnauthorizedAccept() public {
|
|
vm.prank(owner);
|
|
random.transferOwnership(owner2);
|
|
assertEq(random.pendingOwner(), owner2);
|
|
|
|
vm.prank(admin);
|
|
vm.expectRevert("Ownable2Step: caller is not the new owner");
|
|
random.acceptOwnership();
|
|
}
|
|
|
|
function testProposeAdminByOwner() public {
|
|
vm.prank(owner);
|
|
random.proposeAdmin(admin2);
|
|
|
|
assertEq(random.proposedAdmin(), admin2);
|
|
}
|
|
|
|
function testProposeAdminByAdmin() public {
|
|
vm.prank(admin);
|
|
random.proposeAdmin(admin2);
|
|
|
|
assertEq(random.proposedAdmin(), admin2);
|
|
}
|
|
|
|
function testProposeAdminByUnauthorized() public {
|
|
vm.expectRevert(EntropyErrors.Unauthorized.selector);
|
|
random.proposeAdmin(admin2);
|
|
}
|
|
|
|
function testAcceptAdminByPropsed() public {
|
|
vm.prank(owner);
|
|
random.proposeAdmin(admin2);
|
|
|
|
vm.prank(admin2);
|
|
random.acceptAdmin();
|
|
|
|
assertEq(random.getAdmin(), admin2);
|
|
}
|
|
|
|
function testAcceptAdminByUnauthorized() public {
|
|
vm.prank(owner);
|
|
random.proposeAdmin(admin2);
|
|
|
|
vm.prank(provider1);
|
|
vm.expectRevert(EntropyErrors.Unauthorized.selector);
|
|
random.acceptAdmin();
|
|
}
|
|
}
|