From 2d0702934fe2583e604c61eb942b4afa09681481 Mon Sep 17 00:00:00 2001 From: Moon Date: Sun, 20 Aug 2023 09:46:39 -0400 Subject: [PATCH] made names all generic --- ...ansAbstractToken.sol => AbstractToken.sol} | 4 +-- contracts/L1Token.sol | 11 ++++++ .../{TenGransBaseToken.sol => L2Token.sol} | 16 ++++----- contracts/TenGransEthToken.sol | 11 ------ scripts/deploy-base.ts | 32 ----------------- scripts/deploy-eth.ts | 20 ----------- scripts/deploy-l1.ts | 34 ++++++++++++++++++ scripts/deploy-l2.ts | 36 +++++++++++++++++++ 8 files changed, 91 insertions(+), 73 deletions(-) rename contracts/{TenGransAbstractToken.sol => AbstractToken.sol} (98%) create mode 100644 contracts/L1Token.sol rename contracts/{TenGransBaseToken.sol => L2Token.sol} (86%) delete mode 100644 contracts/TenGransEthToken.sol delete mode 100644 scripts/deploy-base.ts delete mode 100644 scripts/deploy-eth.ts create mode 100644 scripts/deploy-l1.ts create mode 100644 scripts/deploy-l2.ts diff --git a/contracts/TenGransAbstractToken.sol b/contracts/AbstractToken.sol similarity index 98% rename from contracts/TenGransAbstractToken.sol rename to contracts/AbstractToken.sol index bab0eeb..2916d00 100644 --- a/contracts/TenGransAbstractToken.sol +++ b/contracts/AbstractToken.sol @@ -14,10 +14,10 @@ import "erc-payable-token/contracts/token/ERC1363/IERC1363.sol"; import "erc-payable-token/contracts/token/ERC1363/IERC1363Spender.sol"; import "erc-payable-token/contracts/token/ERC1363/IERC1363Receiver.sol"; -abstract contract AbstractGrans is IERC1363, ERC20, ERC20Burnable, Pausable, Ownable, ERC20Permit, ERC20Votes, ERC20FlashMint { +abstract contract AbstractToken is IERC1363, ERC20, ERC20Burnable, Pausable, Ownable, ERC20Permit, ERC20Votes, ERC20FlashMint { using Address for address; - constructor() ERC20("10Grans", "GRANS") ERC20Permit("10Grans") {} + constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) ERC20Permit(_name) {} function pause() public onlyOwner { _pause(); diff --git a/contracts/L1Token.sol b/contracts/L1Token.sol new file mode 100644 index 0000000..434f2b1 --- /dev/null +++ b/contracts/L1Token.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "./AbstractToken.sol"; + +contract L1Token is AbstractToken { + + constructor(string memory _name, string memory _symbol, uint256 _fixedMint) AbstractToken(_name, _symbol) { + _mint(msg.sender, _fixedMint * 10 ** 18); + } +} diff --git a/contracts/TenGransBaseToken.sol b/contracts/L2Token.sol similarity index 86% rename from contracts/TenGransBaseToken.sol rename to contracts/L2Token.sol index 8d82574..dc5508d 100644 --- a/contracts/TenGransBaseToken.sol +++ b/contracts/L2Token.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import "./TenGransAbstractToken.sol"; +import "./AbstractToken.sol"; import "@eth-optimism/contracts-bedrock/contracts/universal/IOptimismMintableERC20.sol"; -contract TenGransBaseToken is AbstractGrans, IOptimismMintableERC20 { +contract L2Token is AbstractToken, IOptimismMintableERC20 { /// @notice Address of the corresponding version of this token on the remote chain. address public immutable REMOTE_TOKEN; @@ -27,17 +27,17 @@ contract TenGransBaseToken is AbstractGrans, IOptimismMintableERC20 { _; } - constructor(address _bridge, address _remoteToken) AbstractGrans() { + constructor(string memory _name, string memory _symbol, address _bridge, address _remoteToken) AbstractToken(_name, _symbol) { BRIDGE = _bridge; REMOTE_TOKEN = _remoteToken; } - function balanceOf(address account) public view virtual override(AbstractGrans) returns (uint256) { - return AbstractGrans.balanceOf(account); + function balanceOf(address account) public view virtual override(AbstractToken) returns (uint256) { + return AbstractToken.balanceOf(account); } - function transferFrom(address sender, address recipient, uint256 amount) public virtual override(AbstractGrans) returns (bool) { - return AbstractGrans.transferFrom(sender, recipient, amount); + function transferFrom(address sender, address recipient, uint256 amount) public virtual override(AbstractToken) returns (bool) { + return AbstractToken.transferFrom(sender, recipient, amount); } /// @notice Allows the StandardBridge on this network to mint tokens. @@ -75,7 +75,7 @@ contract TenGransBaseToken is AbstractGrans, IOptimismMintableERC20 { /// @notice ERC165 interface check function. /// @param _interfaceId Interface ID to check. /// @return Whether or not the interface is supported by this contract. - function supportsInterface(bytes4 _interfaceId) public pure virtual override(AbstractGrans, IERC165) returns (bool) { + function supportsInterface(bytes4 _interfaceId) public pure virtual override(AbstractToken, IERC165) returns (bool) { bytes4 iface1 = type(IERC165).interfaceId; // Interface corresponding to the updated OptimismMintableERC20 (this contract). bytes4 iface2 = type(IOptimismMintableERC20).interfaceId; diff --git a/contracts/TenGransEthToken.sol b/contracts/TenGransEthToken.sol deleted file mode 100644 index bd0afb3..0000000 --- a/contracts/TenGransEthToken.sol +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.19; - -import "./TenGransAbstractToken.sol"; - -contract TenGransEthToken is AbstractGrans { - - constructor() AbstractGrans() { - _mint(msg.sender, 15_000 * 10 ** 18); - } -} diff --git a/scripts/deploy-base.ts b/scripts/deploy-base.ts deleted file mode 100644 index 2a58fac..0000000 --- a/scripts/deploy-base.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { ethers } from "hardhat"; -import fs from "fs/promises"; -import dotenv from "dotenv"; -const env = process.env.NODE_ENV || "local"; -dotenv.config({ path: `.env.${env}` }); - -async function main() { - if (!process.env.BASE_BRIDGE_ADDRESS) throw "Bridge address not defined"; - const tenGransAddress = (await fs.readFile(`.10grans-eth-address.${env}`, "utf-8")).trim(); - - const TENGRANS = await ethers.deployContract( - "TenGransBaseToken", - [ - process.env.BASE_BRIDGE_ADDRESS, - tenGransAddress - ] - ); - - await TENGRANS.waitForDeployment(); - const deployedAddress = await TENGRANS.getAddress(); - - console.log(`Base 10grans deployed to: ${deployedAddress}`); - await fs.writeFile(`.10grans-base-address.${env}`, deployedAddress); - -} - -// We recommend this pattern to be able to use async/await everywhere -// and properly handle errors. -main().catch((error) => { - console.error(error); - process.exitCode = 1; -}); diff --git a/scripts/deploy-eth.ts b/scripts/deploy-eth.ts deleted file mode 100644 index 1bd128d..0000000 --- a/scripts/deploy-eth.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { ethers } from "hardhat"; -import fs from "fs/promises"; -const env = process.env.NODE_ENV || "local"; - -async function main() { - const TENGRANS = await ethers.deployContract("TenGransEthToken"); - - await TENGRANS.waitForDeployment(); - const deployedAddress = await TENGRANS.getAddress(); - - console.log(`Ethereum 10grans deployed to: ${deployedAddress}`); - await fs.writeFile(`.10grans-eth-address.${env}`, deployedAddress); -} - -// We recommend this pattern to be able to use async/await everywhere -// and properly handle errors. -main().catch((error) => { - console.error(error); - process.exitCode = 1; -}); diff --git a/scripts/deploy-l1.ts b/scripts/deploy-l1.ts new file mode 100644 index 0000000..059ef65 --- /dev/null +++ b/scripts/deploy-l1.ts @@ -0,0 +1,34 @@ +import { ethers } from "hardhat"; +import fs from "fs/promises"; + +async function main() { + const env = process.env.NODE_ENV || "local"; + + if (!process.env.TOKEN_NAME) throw "Token name not defined"; + if (!process.env.TOKEN_SYMBOL) throw "Token symbol not defined"; + if (!process.env.TOKEN_AMOUNT) throw "Token amount not defined"; + + const tokenAmount = parseInt(process.env.TOKEN_AMOUNT); + + const L1Token = await ethers.deployContract( + "L1Token", + [ + process.env.TOKEN_NAME, + process.env.TOKEN_SYMBOL, + tokenAmount, + ] + ); + + await L1Token.waitForDeployment(); + const deployedAddress = await L1Token.getAddress(); + + console.log(`L1 token deployed to: ${deployedAddress}`); + await fs.writeFile(`.l1-token-address.${env}`, deployedAddress); +} + +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/scripts/deploy-l2.ts b/scripts/deploy-l2.ts new file mode 100644 index 0000000..8cb889c --- /dev/null +++ b/scripts/deploy-l2.ts @@ -0,0 +1,36 @@ +import { ethers } from "hardhat"; +import fs from "fs/promises"; +import dotenv from "dotenv"; +const env = process.env.NODE_ENV || "local"; +dotenv.config({ path: `.env.${env}` }); + +async function main() { + if (!process.env.BASE_BRIDGE_ADDRESS) throw "Bridge address not defined"; + if (!process.env.TOKEN_NAME) throw "Token name not defined"; + if (!process.env.TOKEN_SYMBOL) throw "Token symbol not defined"; + + const L1TokenAddress = (await fs.readFile(`.l1-token-address.${env}`, "utf-8")).trim(); + + const L2Token = await ethers.deployContract( + "L2Token", + [ + process.env.TOKEN_NAME, + process.env.TOKEN_SYMBOL, + process.env.BASE_BRIDGE_ADDRESS, + L1TokenAddress, + ] + ); + + await L2Token.waitForDeployment(); + const deployedAddress = await L2Token.getAddress(); + + console.log(`L2 token deployed to: ${deployedAddress}`); + await fs.writeFile(`.l2-token-address.${env}`, deployedAddress); +} + +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main().catch((error) => { + console.error(error); + process.exitCode = 1; +});