From 5a0a57b3a323d370458c3687adcbd47dacf41a7c Mon Sep 17 00:00:00 2001 From: Ryan Collins Date: Fri, 10 Oct 2025 07:53:54 -0400 Subject: [PATCH 1/2] fix: decimals -> 6 --- .../src/xYield/{xYieldToken.sol => MintableERC20.sol} | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) rename contracts/src/xYield/{xYieldToken.sol => MintableERC20.sol} (88%) diff --git a/contracts/src/xYield/xYieldToken.sol b/contracts/src/xYield/MintableERC20.sol similarity index 88% rename from contracts/src/xYield/xYieldToken.sol rename to contracts/src/xYield/MintableERC20.sol index 407bf159..c6ecd888 100644 --- a/contracts/src/xYield/xYieldToken.sol +++ b/contracts/src/xYield/MintableERC20.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.30; import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -contract XyieldToken is ERC20 { +contract MintableERC20 is ERC20 { address public minter; /// @notice Emitted when the address authorized to mint is updated. @@ -23,6 +23,12 @@ contract XyieldToken is ERC20 { minter = _minter; } + /// @notice Returns the number of decimals used to get its user representation + /// @return The number of decimals + function decimals() public pure override returns (uint8) { + return 6; + } + modifier onlyMinter() { if (msg.sender != minter) revert NotAuthorized(); _; From ed3af497473d289ddd173cd9a554b1b979311656 Mon Sep 17 00:00:00 2001 From: Ryan Collins Date: Fri, 10 Oct 2025 14:30:36 -0400 Subject: [PATCH 2/2] feat: upgrades for 7683 --- .../script/upgrade/UpgradeArbT17683.s.sol | 45 +++++++++++++++++ .../script/upgrade/UpgradeBaseT17683.s.sol | 49 +++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 contracts/script/upgrade/UpgradeArbT17683.s.sol create mode 100644 contracts/script/upgrade/UpgradeBaseT17683.s.sol diff --git a/contracts/script/upgrade/UpgradeArbT17683.s.sol b/contracts/script/upgrade/UpgradeArbT17683.s.sol new file mode 100644 index 00000000..a183ec84 --- /dev/null +++ b/contracts/script/upgrade/UpgradeArbT17683.s.sol @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +import { ProxyAdmin } from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import { ITransparentUpgradeableProxy } from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import { DeploymentUtils } from "../lib/DeploymentUtils.sol"; +import { T1ERC7683 } from "../../src/7683/T1ERC7683.sol"; +import { T1Constants } from "../../src/libraries/constants/T1Constants.sol"; + +contract UpgradeArbT1ERC7683 is DeploymentUtils { + address internal ARB_T1_PROXY_ADMIN_ADDR = vm.envAddress("ARB_T1_PROXY_ADMIN_ADDR"); + address internal AUCTION_WITNESS = vm.envAddress("AUCTION_WITNESS"); + address internal ARB_T1_X_CHAIN_READ_PROXY_ADDR = vm.envOr("ARB_T1_X_CHAIN_READ_PROXY_ADDR", address(0)); + address internal BASE_T1_7683_PROXY_ADDR = vm.envOr("BASE_T1_PULL_BASED_7683_PROXY_ADDR", address(0)); + address internal ARB_T1_7683_PROXY_ADDR = vm.envOr("ARB_T1_PULL_BASED_7683_PROXY_ADDR", address(0)); + uint32 internal immutable ARB = + uint32(IS_MAINNET ? T1Constants.ARBITRUM_MAINNET_CHAIN_ID : T1Constants.ARBITRUM_SEPOLIA_CHAIN_ID); + uint32 internal immutable BASE = + uint32(IS_MAINNET ? T1Constants.BASE_MAINNET_CHAIN_ID : T1Constants.BASE_SEPOLIA_CHAIN_ID); + + ProxyAdmin private proxyAdmin; + + function upgrade() external { + logStart("Upgrade T1ERC7683 on Arbitrum"); + selectMainnetOrSepoliaFork("arbitrum"); + startBroadcastWithDeployerKeyIfItExists(); + + proxyAdmin = ProxyAdmin(ARB_T1_PROXY_ADMIN_ADDR); + + // Deploy new implementation + T1ERC7683 newImpl = new T1ERC7683( + address(0), // No Permit2 for now + ARB_T1_X_CHAIN_READ_PROXY_ADDR, + ARB + ); + + // Upgrade the existing proxy to the new implementation + proxyAdmin.upgrade(ITransparentUpgradeableProxy(ARB_T1_7683_PROXY_ADDR), address(newImpl)); + + vm.stopBroadcast(); + logAddress("ARB_T1_PULL_BASED_7683_IMPLEMENTATION_ADDR", address(newImpl)); + logAddress("ARB_T1_PULL_BASED_7683_PROXY_ADDR", ARB_T1_7683_PROXY_ADDR); + logEnd("Upgrade T1ERC7683 on Arbitrum"); + } +} diff --git a/contracts/script/upgrade/UpgradeBaseT17683.s.sol b/contracts/script/upgrade/UpgradeBaseT17683.s.sol new file mode 100644 index 00000000..a3dd6020 --- /dev/null +++ b/contracts/script/upgrade/UpgradeBaseT17683.s.sol @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +import { ProxyAdmin } from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import { ITransparentUpgradeableProxy } from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; + +import { DeploymentUtils } from "../lib/DeploymentUtils.sol"; + +import { T1ERC7683 } from "../../src/7683/T1ERC7683.sol"; +import { T1Constants } from "../../src/libraries/constants/T1Constants.sol"; + +contract UpgradeBaseT1ERC7683 is DeploymentUtils { + address internal BASE_T1_PROXY_ADMIN_ADDR = vm.envAddress("BASE_T1_PROXY_ADMIN_ADDR"); + address internal AUCTION_WITNESS = vm.envAddress("AUCTION_WITNESS"); + + address internal BASE_T1_X_CHAIN_READ_PROXY_ADDR = vm.envOr("BASE_T1_X_CHAIN_READ_PROXY_ADDR", address(0)); + address internal BASE_T1_7683_PROXY_ADDR = vm.envOr("BASE_T1_PULL_BASED_7683_PROXY_ADDR", address(0)); + address internal ARB_T1_7683_PROXY_ADDR = vm.envOr("ARB_T1_PULL_BASED_7683_PROXY_ADDR", address(0)); + + uint32 internal immutable ARB = + uint32(IS_MAINNET ? T1Constants.ARBITRUM_MAINNET_CHAIN_ID : T1Constants.ARBITRUM_SEPOLIA_CHAIN_ID); + uint32 internal immutable BASE = + uint32(IS_MAINNET ? T1Constants.BASE_MAINNET_CHAIN_ID : T1Constants.BASE_SEPOLIA_CHAIN_ID); + ProxyAdmin private proxyAdmin; + + function upgrade() external { + logStart("Upgrade T1ERC7683 on Base"); + selectMainnetOrSepoliaFork("base"); + + startBroadcastWithDeployerKeyIfItExists(); + + proxyAdmin = ProxyAdmin(BASE_T1_PROXY_ADMIN_ADDR); + + T1ERC7683 newImpl = new T1ERC7683( + address(0), // No Permit2 for now + BASE_T1_X_CHAIN_READ_PROXY_ADDR, + BASE + ); + + // Upgrade the existing proxy to the new implementation + proxyAdmin.upgrade(ITransparentUpgradeableProxy(BASE_T1_7683_PROXY_ADDR), address(newImpl)); + + vm.stopBroadcast(); + + logAddress("BASE_T1_PULL_BASED_7683_IMPLEMENTATION_ADDR", address(newImpl)); + logAddress("BASE_T1_PULL_BASED_7683_PROXY_ADDR", BASE_T1_7683_PROXY_ADDR); + logEnd("Upgrade T1ERC7683 on Base"); + } +}