Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 4 additions & 7 deletions packages/contracts-bedrock/src/L2/RSS3Token.sol
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

import {OptimismMintableERC20 as ERC20} from "src/universal/OptimismMintableERC20.sol";
import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
import { OptimismMintableERC20 as ERC20 } from "src/universal/OptimismMintableERC20.sol";
import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol";

/// @custom:proxied
/// @custom:predeploy 0x4200000000000000000000000000000000000042
/// @title RSS3Token
contract RSS3Token is ERC20, Initializable {
/// @param _l2Bridge Address of the L2 standard bridge.
/// @param _l1Token Address of the L1 RSS3 token.
constructor(
address _l2Bridge,
address _l1Token
) ERC20(_l2Bridge, _l1Token, "RSS3", "RSS3", 18) {}
constructor(address _l2Bridge, address _l1Token) ERC20(_l2Bridge, _l1Token, "RSS3", "RSS3", 18) { }

/// @dev Can only be called once through initializer modifier
function initialize() external initializer {
function initialize() external reinitializer(2) {
uint256 amount = 30_000_000 * 10 ** 18; // annual issuance rate of 3%
_mint(0x0cE3159BF19F3C55B648D04E8f0Ae1Ae118D2A0B, amount);
}
Expand Down
24 changes: 8 additions & 16 deletions packages/contracts-bedrock/test/L2/RSS3Token.t.sol
Original file line number Diff line number Diff line change
@@ -1,43 +1,35 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

import {Test} from "forge-std/Test.sol";
import {RSS3Token} from "src/L2/RSS3Token.sol";
import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
import { Test } from "forge-std/Test.sol";
import { RSS3Token } from "src/L2/RSS3Token.sol";
import { TransparentUpgradeableProxy } from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";

contract RSS3Token_Test is Test {
RSS3Token public token;

address constant L2_BRIDGE = address(0x1234);
address constant L1_TOKEN = address(0x5678);
address constant SETTLEMENT_ADDRESS =
0x0cE3159BF19F3C55B648D04E8f0Ae1Ae118D2A0B;
address constant SETTLEMENT_ADDRESS = 0x0cE3159BF19F3C55B648D04E8f0Ae1Ae118D2A0B;
uint256 constant INITIAL_MINT_AMOUNT = 30_000_000 * 10 ** 18;
uint256 settlementBalance;

function setUp() public {
// Create and select the fork
vm.createSelectFork("https://rpc.rss3.io", 15956709);
vm.createSelectFork("https://rpc.rss3.io", 31726799);

// Deploy the token contract
RSS3Token tokenV2 = new RSS3Token(L2_BRIDGE, L1_TOKEN);

address payable tokenProxy = payable(
0x4200000000000000000000000000000000000042
);
address payable tokenProxy = payable(0x4200000000000000000000000000000000000042);
token = RSS3Token(tokenProxy);

settlementBalance = token.balanceOf(SETTLEMENT_ADDRESS);

TransparentUpgradeableProxy proxy = TransparentUpgradeableProxy(
tokenProxy
);
TransparentUpgradeableProxy proxy = TransparentUpgradeableProxy(tokenProxy);

vm.startPrank(0x4200000000000000000000000000000000000018);
proxy.upgradeToAndCall(
address(tokenV2),
abi.encodeWithSelector(tokenV2.initialize.selector)
);
proxy.upgradeToAndCall(address(tokenV2), abi.encodeWithSelector(tokenV2.initialize.selector));
vm.stopPrank();
}

Expand Down
Loading