Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,19 @@

pragma solidity ^0.8.18;

import "@openzeppelin/contracts/access/AccessControl.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";

/**
* @title L1Token
* @author OnGrid Dev Team
**/
contract ExampleNFT is ERC721Enumerable, AccessControl {
contract L1Token is ERC721Enumerable, Ownable {
using Strings for uint256;

constructor() ERC721("Grizzly", "GRZL") {}

function supportsInterface(
bytes4 interfaceId
)
public
view
virtual
override(ERC721Enumerable, AccessControl)
returns (bool)
{
return super.supportsInterface(interfaceId);
}

/**
* @dev Mints a specific to the given address
* @param to the receiver
Expand Down
37 changes: 37 additions & 0 deletions contracts/contracts/L2Token.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.18;

import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "./L2TokenMinter.sol";

/**
* @title L2Token
* @author OnGrid Dev Team
**/
contract L2Token is ERC721Enumerable, Ownable {
using Strings for uint256;

constructor(
L2TokenMinter minter
) ERC721("Grizzly", "GRZL") {
transferOwnership(address(minter));
L2TokenMinter a = L2TokenMinter(address(minter));
a.setOwnedContract(address(this));
}

/**
* @dev Mints a specific to the given address
* @param to the receiver
*/
function mint(address to) public onlyOwner {
uint256 mintIndex = totalSupply();
_safeMint(to, mintIndex);
}

function burn(uint256 id) public onlyOwner {
_burn(id);
}
}
24 changes: 24 additions & 0 deletions contracts/contracts/L2TokenMinter.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.18;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "./L2Token.sol";

contract L2TokenMinter {
address ownedContract;
address owner;

constructor () {
owner = msg.sender;
}

function setOwnedContract (address owned) public {
ownedContract = owned;
}

function mintL2 (address to) public {
L2Token proxied = L2Token(ownedContract);
proxied.mint(to);
}
}
3 changes: 2 additions & 1 deletion contracts/deploy/L1BridgeRouter.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
module.exports = async ({ getNamedAccounts, deployments }) => {
const { deploy } = deployments;
const { deployer } = await getNamedAccounts();
const tokenAddress = (await deployments.get("ExampleNFT")).address;
const tokenAddress = (await deployments.get("L1Token")).address;
await deploy("L1BridgeRouter", {
from: deployer,
args: [tokenAddress],
log: true,
});
};
module.exports.tags = ["L1BridgeRouter"];
module.exports.dependencies = ["L1Token"]
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
module.exports = async ({ getNamedAccounts, deployments }) => {
const { deploy } = deployments;
const { deployer } = await getNamedAccounts();
await deploy("ExampleNFT", {
await deploy("L1Token", {
from: deployer,
args: [],
log: true,
});
};
module.exports.tags = ["ExampleNFT"];
module.exports.tags = ["L1Token"];
12 changes: 12 additions & 0 deletions contracts/deploy/L2Token.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module.exports = async ({ getNamedAccounts, deployments }) => {
const { deploy } = deployments;
const { deployer } = await getNamedAccounts();
const tokenAddress = (await deployments.get("L2TokenMinter")).address;
await deploy("L2Token", {
from: deployer,
args: [tokenAddress],
log: true,
});
};
module.exports.tags = ["L2Token"];
module.exports.dependencies = ["L2TokenMinter"]
10 changes: 10 additions & 0 deletions contracts/deploy/L2TokenMinter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
module.exports = async ({ getNamedAccounts, deployments }) => {
const { deploy } = deployments;
const { deployer } = await getNamedAccounts();
await deploy("L2TokenMinter", {
from: deployer,
args: [],
log: true,
});
};
module.exports.tags = ["L2TokenMinter"];
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
module.exports = async ({ deployments }) => {
const hre = require("hardhat");
const ethers = hre.ethers;
const address = (await deployments.get("ExampleNFT")).address;
const Contract = await ethers.getContractFactory("ExampleNFT");
const address = (await deployments.get("L1Token")).address;
const Contract = await ethers.getContractFactory("L1Token");
const contract = Contract.attach(address);
for (var i = 1; i <= 1; i++) {
console.log(await contract.mint(process.env.DEPLOYER_WALLET));
}
};
module.exports.tags = ["mintExampleNFTs"];
module.exports.dependencies = ["ExampleNFT"];
module.exports.tags = ["mintL1NFTs"];
module.exports.dependencies = ["L1Token"];
36 changes: 18 additions & 18 deletions contracts/deployments/goerli/L1BridgeRouter.json

Large diffs are not rendered by default.

Loading