Skip to content

Instantly share code, notes, and snippets.

@Thaddeus19
Last active September 7, 2023 16:20
Show Gist options
  • Save Thaddeus19/8d8d3c1a313eb5fedb801db0816bdcaa to your computer and use it in GitHub Desktop.
Save Thaddeus19/8d8d3c1a313eb5fedb801db0816bdcaa to your computer and use it in GitHub Desktop.
Testing an implementation with a function signature equal to upgradeTo(address) (0x3659cfe6)
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