From 2c4c5ed59f2dc54a9e088a5879d7f8bbc172ba2b Mon Sep 17 00:00:00 2001 From: zoruka Date: Mon, 28 Nov 2022 09:50:45 -0300 Subject: [PATCH] wip: FleekERC721 contract --- contracts/Fleek.sol | 3 ++ contracts/{SitesNFTs.sol => FleekERC721.sol} | 33 +++++++++++++++++-- contracts/FleekSite.sol | 3 ++ interfaces/IFleek.sol | 5 +-- .../{ISitesNFTs.sol => IFleekERC721.sol} | 13 ++++---- interfaces/IFleekSite.sol | 3 -- 6 files changed, 45 insertions(+), 15 deletions(-) rename contracts/{SitesNFTs.sol => FleekERC721.sol} (63%) rename interfaces/{ISitesNFTs.sol => IFleekERC721.sol} (55%) diff --git a/contracts/Fleek.sol b/contracts/Fleek.sol index c1b85d7..d2879a5 100644 --- a/contracts/Fleek.sol +++ b/contracts/Fleek.sol @@ -7,6 +7,9 @@ import "./FleekBuilds.sol"; import "./FleekAccessControl.sol"; abstract contract Fleek is IFleek, FleekBuilds { + string public name; + string public description; + constructor(string memory _name, string memory _description) { name = _name; description = _description; diff --git a/contracts/SitesNFTs.sol b/contracts/FleekERC721.sol similarity index 63% rename from contracts/SitesNFTs.sol rename to contracts/FleekERC721.sol index 322625a..b5bf7a9 100644 --- a/contracts/SitesNFTs.sol +++ b/contracts/FleekERC721.sol @@ -5,11 +5,14 @@ pragma solidity ^0.8.7; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; import "@openzeppelin/contracts/utils/Counters.sol"; import "./FleekAccessControl.sol"; -import "../interfaces/ISitesNFTs.sol"; +import "../interfaces/IFleekERC721.sol"; +import "./FleekSite.sol"; -contract SitesNFTs is ISitesNFTs, ERC721URIStorage, FleekAccessControl { +contract FleekERC721 is IFleekERC721, ERC721URIStorage, FleekAccessControl { using Counters for Counters.Counter; + Counters.Counter private _tokenIds; + mapping(uint256 => address) private _contracts; constructor( string memory name, @@ -17,6 +20,7 @@ contract SitesNFTs is ISitesNFTs, ERC721URIStorage, FleekAccessControl { ) ERC721(name, symbol) {} function mint( + uint8 fleekContract, string memory base64EncodedMetadata, address account ) public override requireController returns (uint256) { @@ -24,6 +28,11 @@ contract SitesNFTs is ISitesNFTs, ERC721URIStorage, FleekAccessControl { _safeMint(account, newItemId); _setTokenURI(newItemId, base64EncodedMetadata); + // it should be something like a switch + if (fleekContract == FleekContract.Site) { + _mintSite(newItemId, account); + } + _tokenIds.increment(); return newItemId; } @@ -56,4 +65,24 @@ contract SitesNFTs is ISitesNFTs, ERC721URIStorage, FleekAccessControl { { return super.supportsInterface(interfaceId); } + + function tokenContract( + uint256 tokenId + ) public view override returns (address) { + return _contracts[tokenId]; + } + + function _mintSite( + uint256 _newTokenId, + address account + ) internal returns (address) { + // it should receive the parameters from user request + _contracts[_newTokenId] = FleekSite( + "name", + "description", + "thumbnail", + "external_url" + ); + return _contracts[_newTokenId]; + } } diff --git a/contracts/FleekSite.sol b/contracts/FleekSite.sol index 070f332..15ff6d4 100644 --- a/contracts/FleekSite.sol +++ b/contracts/FleekSite.sol @@ -6,6 +6,9 @@ import "./Fleek.sol"; import "../interfaces/IFleekSite.sol"; contract FleekSite is IFleekSite, Fleek { + string public thumbnail; + string public external_url; + constructor( string memory _name, string memory _description, diff --git a/interfaces/IFleek.sol b/interfaces/IFleek.sol index b164e77..a0fd37f 100644 --- a/interfaces/IFleek.sol +++ b/interfaces/IFleek.sol @@ -3,12 +3,9 @@ pragma solidity ^0.8.7; import "./IFleekBuilds.sol"; -import "@openzeppelin/contracts/access/IAccessControl.sol"; +import "../node_modules/@openzeppelin/contracts/access/IAccessControl.sol"; interface IFleek is IFleekBuilds, IAccessControl { - string name; - string description; - event MetadataUpdated(string name, string description); function setName(string calldata _name) external; diff --git a/interfaces/ISitesNFTs.sol b/interfaces/IFleekERC721.sol similarity index 55% rename from interfaces/ISitesNFTs.sol rename to interfaces/IFleekERC721.sol index d746782..877eed7 100644 --- a/interfaces/ISitesNFTs.sol +++ b/interfaces/IFleekERC721.sol @@ -2,18 +2,17 @@ pragma solidity ^0.8.7; -import "@openzeppelin/contracts/interfaces/IERC721.sol"; -import "@openzeppelin/contracts/access/IAccessControl.sol"; +import "../node_modules/@openzeppelin/contracts/interfaces/IERC721.sol"; +import "../node_modules/@openzeppelin/contracts/access/IAccessControl.sol"; -/// @title SitesNFTs - A contract for managing sites NFTs -/// @dev See -interface ISitesNFTs is IERC721 { +/// @title IFleekERC721 - A contract for managing sites NFTs +interface IFleekERC721 is IERC721 { enum FleekContract { Site } function mint( - FleekContract memory fleekContract, + uint8 fleekContract, string memory base64EncodedMetadata, address account ) external returns (uint256); @@ -25,4 +24,6 @@ interface ISitesNFTs is IERC721 { ) external; function getCurrentTokenId() external view returns (uint256); + + function tokenContract(uint256 tokenId) external view returns (address); } diff --git a/interfaces/IFleekSite.sol b/interfaces/IFleekSite.sol index 81d55d1..997c8a6 100644 --- a/interfaces/IFleekSite.sol +++ b/interfaces/IFleekSite.sol @@ -5,9 +5,6 @@ pragma solidity ^0.8.7; import "./IFleek.sol"; interface IFleekSite is IFleek { - string thumbnail; - string external_url; - event MetadataUpdated( string name, string description,