Skip to content

Commit

Permalink
Merge pull request andrew-fleming#2 from andrew-fleming/feature/acces…
Browse files Browse the repository at this point in the history
…s-control

Feature/access control
  • Loading branch information
andrew-fleming authored Jun 10, 2021
2 parents c647dee + 43a6806 commit a447fa6
Show file tree
Hide file tree
Showing 5 changed files with 445 additions and 21 deletions.
67 changes: 56 additions & 11 deletions contracts/JackOLantern.sol
Original file line number Diff line number Diff line change
@@ -1,26 +1,71 @@
//// SPDX-License-Identifier: MIT
//pragma solidity 0.8.4;
//
//import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
//import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
//import "@openzeppelin/contracts/utils/Counters.sol";
//
//contract JackOLantern is ERC721URIStorage {
// using Counters for Counters.Counter;
// Counters.Counter private _tokenIds;
//
// constructor() ERC721("Jack-O'-Lantern", "JACK") {}
//
// function mintItem(address player, string memory tokenURI)
// public
// returns (uint256)
// {
// _tokenIds.increment();
//
// uint256 newItemId = _tokenIds.current();
// _mint(player, newItemId);
// _setTokenURI(newItemId, tokenURI);
//
// return newItemId;
// }
//}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.4;
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/AccessControl.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract JackOLantern is ERC721URIStorage {
contract JackOLantern is AccessControl, ERC721URIStorage {
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;

constructor() ERC721("Jack-O'-Lantern", "JACK") {}
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
Counters.Counter private _tokenIdCounter;

constructor() ERC721("Jack-O-Lantern", "JACK") {
_setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
}

function safeMint(address to) public {
require(hasRole(MINTER_ROLE, msg.sender));
_safeMint(to, _tokenIdCounter.current());
_tokenIdCounter.increment();
}

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

function mintItem(address player, string memory tokenURI)
public
returns (uint256)
{
_tokenIds.increment();

uint256 newItemId = _tokenIds.current();
_mint(player, newItemId);
_setTokenURI(newItemId, tokenURI);

return newItemId;
uint256 tokenId = _tokenIdCounter.current();
safeMint(player);
_setTokenURI(tokenId, tokenURI);
return tokenId;
}

}
2 changes: 2 additions & 0 deletions contracts/PmknFarm.sol
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ contract PmknFarm {
JackOLantern public jackOLantern;

uint256 private nftPrice;
uint256 public contractPmknBalance;

event Stake(address indexed from, uint256 amount);
event Unstake(address indexed from, uint256 amount);
Expand Down Expand Up @@ -149,6 +150,7 @@ contract PmknFarm {
);
pmknToken.transferFrom(msg.sender, address(this), nftPrice);
uint256 tokenId = jackOLantern.mintItem(user, tokenURI);
contractPmknBalance += nftPrice;
emit MintNFT(msg.sender, tokenId);
}
}
16 changes: 8 additions & 8 deletions contracts/PmknToken.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@
pragma solidity 0.8.4;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/access/AccessControl.sol";

contract PmknToken is ERC20, Ownable {
contract PmknToken is ERC20, AccessControl {
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");

constructor() ERC20("PmknToken", "PMKN") {}
constructor() ERC20("PmknToken", "PMKN") {
_setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
}

function mint(address to, uint256 amount) public onlyOwner {
function mint(address to, uint256 amount) public {
require(hasRole(MINTER_ROLE, msg.sender));
_mint(to, amount);
}

function _transferOwnership(address newOwner) public onlyOwner {
transferOwnership(newOwner);
}
}
9 changes: 7 additions & 2 deletions scripts/deployFarm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,13 @@ async function main() {
console.log(`PmknFarm address: ${pmknFarm.address}`)
console.log(`NFT Price: ${ethers.utils.formatEther(nftPrice)} PMKN`)

await pmknToken._transferOwnership(pmknFarm.address)
console.log(`PmknToken ownership transferred to: ${pmknFarm.address}`)
const pmknMinter = await pmknToken.MINTER_ROLE()
await pmknToken.grantRole(pmknMinter, pmknFarm.address)
console.log(`PmknToken minter role transferred to: ${pmknFarm.address}`)

const jackMinter = await jackOLantern.MINTER_ROLE()
await jackOLantern.grantRole(jackMinter, pmknFarm.address)
console.log(`Jack-O-Lantern NFT minter role transferred to ${pmknFarm.address}`)
}

main()
Expand Down
Loading

0 comments on commit a447fa6

Please sign in to comment.