Last active
September 7, 2023 16:20
-
-
Save Thaddeus19/8d8d3c1a313eb5fedb801db0816bdcaa to your computer and use it in GitHub Desktop.
Testing an implementation with a function signature equal to upgradeTo(address) (0x3659cfe6)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity 0.8.16; | |
import "lib/forge-std/src/Test.sol"; | |
import "contracts/usdy/rUSDY.sol"; | |
import "contracts/usdy/rUSDYFactory.sol"; | |
import "contracts/rwaOracles/RWADynamicOracle.sol"; | |
import "contracts/external/openzeppelin/contracts/proxy/ProxyAdmin.sol"; | |
import "contracts/Proxy.sol"; | |
import "contracts/external/openzeppelin/contracts/token/ERC20.sol"; | |
contract rUSDYV2 is ERC20 { | |
address public user; | |
constructor() ERC20("USDY", "USDY") { | |
_mint(msg.sender, 2**128); | |
} | |
function upgradeTo_790AA3D() public {} | |
} | |
contract DeploymentTest is Test/* , USDY_BasicDeployment */ { | |
address constant guardian = address(0xFEDBAD); | |
// User Addresses | |
address constant alice = address(0x9999991); | |
address constant bob = address(0x9999992); | |
address constant badActor = address(0xBADBAD); | |
using stdStorage for StdStorage; | |
ERC20 public mockUSDY; | |
rUSDY rUSDYToken; // Proxy with abi of implementation | |
TokenProxy rUSDYProxy; | |
ProxyAdmin rUSDYProxyAdmin; | |
rUSDY rUSDYImplementation; | |
rUSDYFactory rUSDYFactoryContract; | |
RWADynamicOracle oracleUSDY; | |
rUSDYV2 rUSDYTokenV2; | |
function setUp() public { | |
mockUSDY = new ERC20("Mock", "USDY"); | |
rUSDYTokenV2 = new rUSDYV2(); | |
vm.prank(guardian); | |
_deployRUSDY(); | |
} | |
function testName() public { | |
console.log(rUSDYToken.name()); | |
console.log(rUSDYToken.symbol()); | |
console2.logAddress(address(rUSDYToken)); | |
} | |
function testRevertUpdateIplemmentation() public { | |
vm.prank(guardian); | |
rUSDYProxyAdmin.upgrade(rUSDYProxy, address(rUSDYTokenV2)); | |
vm.prank(alice); | |
vm.expectRevert(); | |
rUSDYV2(address(rUSDYToken)).upgradeTo_790AA3D(); | |
vm.prank(guardian); | |
vm.expectRevert(); | |
rUSDYV2(address(rUSDYToken)).upgradeTo_790AA3D(); | |
vm.prank(guardian); | |
vm.expectRevert(); | |
bytes memory data = encodeWithSignature(address(rUSDYToken)); | |
(bool ok, ) = address(rUSDYProxyAdmin).call(data); | |
require(ok, "call failed"); | |
} | |
function encodeWithSignature(address newImplementation) internal pure returns (bytes memory) { | |
return abi.encodeWithSignature("upgradeTo(address)", newImplementation); | |
} | |
function _deployRUSDY() internal { | |
uint256 periodStart = 1690833600; // JUL 31 8pm UTC | |
uint256 periodEnd = 1693512000; // AUG 31 8pm UTC | |
uint256 dailyIR = 1.00013368 * 1e27; // (1 + Daily IR, scaled to 1e27), | |
uint256 rangeStartPrice = 1e18; // Initial price | |
rUSDYFactoryContract = new rUSDYFactory(guardian); | |
oracleUSDY = new RWADynamicOracle( | |
address(this), | |
address(this), | |
address(this), | |
periodStart, | |
periodEnd, | |
dailyIR, | |
rangeStartPrice | |
); | |
vm.prank(guardian); | |
( | |
address proxy, | |
address proxyAdmin, | |
address implementation | |
) = rUSDYFactoryContract.deployrUSDY( | |
address(oracleUSDY), | |
address(oracleUSDY), | |
address(oracleUSDY), | |
address(mockUSDY), | |
address(oracleUSDY) | |
); | |
rUSDYToken = rUSDY(proxy); | |
rUSDYProxy = TokenProxy(payable(proxy)); | |
rUSDYProxyAdmin = ProxyAdmin(proxyAdmin); | |
rUSDYImplementation = rUSDY(implementation); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment