fix: sintax wise issues for compilation

This commit is contained in:
zoruka 2022-11-29 11:59:19 -03:00
parent 7891068b9a
commit c9578c88fd
12 changed files with 83 additions and 176 deletions

View File

@ -1,31 +0,0 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "../interfaces/IFleek.sol";
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;
}
function setName(
string calldata _name
) external override requireController {
name = _name;
emit MetadataUpdated(name, description);
}
function setDescription(
string calldata _description
) external override requireController {
description = _description;
emit MetadataUpdated(name, description);
}
}

View File

@ -2,7 +2,6 @@
pragma solidity ^0.8.7; pragma solidity ^0.8.7;
import "../interfaces/IFleekSite.sol";
import "@openzeppelin/contracts/access/AccessControl.sol"; import "@openzeppelin/contracts/access/AccessControl.sol";
abstract contract FleekAccessControl is AccessControl { abstract contract FleekAccessControl is AccessControl {
@ -26,7 +25,7 @@ abstract contract FleekAccessControl is AccessControl {
modifier requireCollectionController() { modifier requireCollectionController() {
require( require(
hasRole(COOLECTION_OWNER_ROLE, msg.sender) || hasRole(COLLECTION_OWNER_ROLE, msg.sender) ||
hasRole(COLLECTION_CONTROLLER_ROLE, msg.sender), hasRole(COLLECTION_CONTROLLER_ROLE, msg.sender),
"FleekAccessControl: must have collection controller role" "FleekAccessControl: must have collection controller role"
); );
@ -41,23 +40,9 @@ abstract contract FleekAccessControl is AccessControl {
_; _;
} }
function addTokenController(
uint256 tokenId,
address controller
) public require requireMinted(tokenId) requireTokenOwner(tokenId) {
_grantRole(_tokenRole(tokenId, "CONTROLLER"), controller);
}
function removeTokenController(
uint256 tokenId,
address controller
) public require requireMinted(tokenId) requireTokenOwner(tokenId) {
_revokeRole(_tokenRole(tokenId, "CONTROLLER"), controller);
}
function _tokenRole( function _tokenRole(
uint256 tokenId, uint256 tokenId,
string role string memory role
) internal pure returns (bytes32) { ) internal pure returns (bytes32) {
return keccak256(abi.encodePacked("TOKEN_", role, tokenId)); return keccak256(abi.encodePacked("TOKEN_", role, tokenId));
} }

View File

@ -10,7 +10,7 @@ abstract contract FleekBuilds is IFleekBuilds, FleekAccessControl {
function update( function update(
build calldata _newBuild build calldata _newBuild
) external override requireController { ) external override requireCollectionController {
builds.push(_newBuild); builds.push(_newBuild);
emit Upgraded(_newBuild); emit Upgraded(_newBuild);
} }

View File

@ -5,8 +5,6 @@ pragma solidity ^0.8.7;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol"; import "@openzeppelin/contracts/utils/Counters.sol";
import "./FleekAccessControl.sol"; import "./FleekAccessControl.sol";
import "../interfaces/IFleekERC721.sol";
import "./FleekSite.sol";
contract FleekERC721 is ERC721, FleekAccessControl { contract FleekERC721 is ERC721, FleekAccessControl {
using Strings for uint256; using Strings for uint256;
@ -27,8 +25,17 @@ contract FleekERC721 is ERC721, FleekAccessControl {
Counters.Counter private _tokenIds; Counters.Counter private _tokenIds;
mapping(uint256 => Site) private _sites; mapping(uint256 => Site) private _sites;
modifier requireMinted(uint256 tokenId) { constructor(
require(_requireMinted(tokenId), "FleekERC721: token not minted"); string memory _name,
string memory _symbol
) ERC721(_name, _symbol) {}
modifier requireTokenOwner(uint256 tokenId) {
require(
msg.sender == ownerOf(tokenId),
"FleekERC721: must be token owner"
);
_;
} }
function mint( function mint(
@ -42,7 +49,10 @@ contract FleekERC721 is ERC721, FleekAccessControl {
_mint(to, tokenId); _mint(to, tokenId);
addTokenController(tokenId, to); addTokenController(tokenId, to);
_tokenIds.increment(); _tokenIds.increment();
_sites[tokenId] = Site(URI, ENS, 0, [Build(commit, repository)]);
Build[] memory _builds = new Build[](1);
_builds[0] = Build(commit, repository);
_sites[tokenId] = Site(URI, ENS, 0, _builds);
return tokenId; return tokenId;
} }
@ -50,21 +60,16 @@ contract FleekERC721 is ERC721, FleekAccessControl {
uint256 tokenId, uint256 tokenId,
string memory commit, string memory commit,
string memory repository string memory repository
) public payable require requireMinted(tokenId) requireTokenOwner(tokenId) { ) public payable requireTokenOwner(tokenId) {
_setTokenBuild(commit, repository); _requireMinted(tokenId);
_setTokenBuild(tokenId, commit, repository);
} }
function tokenURI( function tokenURI(
uint256 tokenId uint256 tokenId
) ) public view virtual override returns (string memory) {
public _requireMinted(tokenId);
view address owner = ownerOf(tokenId);
virtual
override
requireMinted(tokenId)
returns (string memory)
{
address memory owner = ownerOf(tokenId);
Site memory site = _sites[tokenId]; Site memory site = _sites[tokenId];
// prettier-ignore // prettier-ignore
@ -84,6 +89,28 @@ contract FleekERC721 is ERC721, FleekAccessControl {
return string(abi.encodePacked(_baseURI(), dataURI)); return string(abi.encodePacked(_baseURI(), dataURI));
} }
function addTokenController(
uint256 tokenId,
address controller
) public requireTokenOwner(tokenId) {
_requireMinted(tokenId);
_grantRole(_tokenRole(tokenId, "CONTROLLER"), controller);
}
function removeTokenController(
uint256 tokenId,
address controller
) public requireTokenOwner(tokenId) {
_requireMinted(tokenId);
_revokeRole(_tokenRole(tokenId, "CONTROLLER"), controller);
}
function supportsInterface(
bytes4 interfaceId
) public view virtual override(ERC721, AccessControl) returns (bool) {
return super.supportsInterface(interfaceId);
}
function _baseURI() internal view virtual override returns (string memory) { function _baseURI() internal view virtual override returns (string memory) {
return "data:application/json;base64,"; return "data:application/json;base64,";
} }
@ -91,14 +118,16 @@ contract FleekERC721 is ERC721, FleekAccessControl {
function _setTokenURI( function _setTokenURI(
uint256 tokenId, uint256 tokenId,
string memory _tokenURI string memory _tokenURI
) internal virtual requireMinted(tokenId) requireTokenController(tokenId) { ) internal virtual requireTokenController(tokenId) {
_requireMinted(tokenId);
_sites[tokenId].URI = _tokenURI; _sites[tokenId].URI = _tokenURI;
} }
function _setTokenENS( function _setTokenENS(
uint256 tokenId, uint256 tokenId,
string memory _tokenENS string memory _tokenENS
) internal virtual requireMinted(tokenId) requireTokenController(tokenId) { ) internal virtual requireTokenController(tokenId) {
_requireMinted(tokenId);
_sites[tokenId].ENS = _tokenENS; _sites[tokenId].ENS = _tokenENS;
} }
@ -106,7 +135,8 @@ contract FleekERC721 is ERC721, FleekAccessControl {
uint256 tokenId, uint256 tokenId,
string memory _commit, string memory _commit,
string memory _repository string memory _repository
) internal virtual requireMinted(tokenId) requireTokenController(tokenId) { ) internal virtual requireTokenController(tokenId) {
_requireMinted(tokenId);
_sites[tokenId].builds.push(Build(_commit, _repository)); _sites[tokenId].builds.push(Build(_commit, _repository));
_sites[tokenId].currentBuild = _sites[tokenId].builds.length - 1; _sites[tokenId].currentBuild = _sites[tokenId].builds.length - 1;
} }
@ -118,7 +148,7 @@ contract FleekERC721 is ERC721, FleekAccessControl {
); );
super._burn(tokenId); super._burn(tokenId);
if (bytes(_sites[tokenId]).length != 0) { if (bytes(_sites[tokenId].URI).length != 0) {
delete _sites[tokenId]; delete _sites[tokenId];
} }
} }

View File

@ -1,35 +0,0 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
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,
string memory _thumbnail,
string memory _external_url
) Fleek(_name, _description) {
thumbnail = _thumbnail;
external_url = _external_url;
}
function setThumbnail(
string calldata _thumbnail
) external override requireController {
thumbnail = _thumbnail;
emit MetadataUpdated(name, description, thumbnail, external_url);
}
function setExternalUrl(
string calldata _external_url
) external override requireController {
external_url = _external_url;
emit MetadataUpdated(name, description, thumbnail, external_url);
}
}

View File

@ -1,5 +1,6 @@
require('@nomiclabs/hardhat-waffle'); require('@nomiclabs/hardhat-waffle');
require('@nomiclabs/hardhat-etherscan'); require('@nomiclabs/hardhat-etherscan');
require('@nomiclabs/hardhat-ethers');
require('hardhat-deploy'); require('hardhat-deploy');
require('solidity-coverage'); require('solidity-coverage');
require('hardhat-gas-reporter'); require('hardhat-gas-reporter');
@ -22,8 +23,7 @@ const POLYGON_MAINNET_RPC_URL =
'https://polygon-mainnet.alchemyapi.io/v2/your-api-key'; 'https://polygon-mainnet.alchemyapi.io/v2/your-api-key';
const POLYGON_MUMBAI_RPC_URL = const POLYGON_MUMBAI_RPC_URL =
process.env.POLYGON_MUMBAI_RPC_URL || process.env.API_KEY || 'https://polygon-mumbai.g.alchemy.com/v2/your-api-key';
'https://polygon-mumbai.g.alchemy.com/v2/aIjNlC4r4aLYOHrdCTFT_JUX6OJsOsu0';
const PRIVATE_KEY = process.env.PRIVATE_KEY || '0x'; const PRIVATE_KEY = process.env.PRIVATE_KEY || '0x';
// optional // optional
const MNEMONIC = process.env.MNEMONIC || 'your mnemonic'; const MNEMONIC = process.env.MNEMONIC || 'your mnemonic';
@ -36,14 +36,14 @@ const POLYGONSCAN_API_KEY =
const REPORT_GAS = process.env.REPORT_GAS || false; const REPORT_GAS = process.env.REPORT_GAS || false;
module.exports = { module.exports = {
defaultNetwork: 'hardhat', defaultNetwork: 'polygon_mumbai',
networks: { networks: {
hardhat: { hardhat: {
// // If you want to do some forking, uncomment this // // If you want to do some forking, uncomment this
// forking: { // forking: {
// url: MAINNET_RPC_URL // url: MAINNET_RPC_URL
// } // }
chainId: 31337, // chainId: 31337,
}, },
localhost: { localhost: {
chainId: 31337, chainId: 31337,
@ -78,6 +78,10 @@ module.exports = {
// saveDeployments: true, // saveDeployments: true,
// chainId: 80001, // chainId: 80001,
// } // }
polygon_mumbai: {
url: POLYGON_MUMBAI_RPC_URL,
accounts: [`0x${PRIVATE_KEY}`],
},
}, },
etherscan: { etherscan: {
// npx hardhat verify --network <NETWORK> <CONTRACT_ADDRESS> <CONSTRUCTOR_PARAMETERS> // npx hardhat verify --network <NETWORK> <CONTRACT_ADDRESS> <CONSTRUCTOR_PARAMETERS>

View File

@ -1,14 +0,0 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "./IFleekBuilds.sol";
import "../node_modules/@openzeppelin/contracts/access/IAccessControl.sol";
interface IFleek is IFleekBuilds, IAccessControl {
event MetadataUpdated(string name, string description);
function setName(string calldata _name) external;
function setDescription(string calldata _description) external;
}

View File

@ -1,29 +0,0 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "../node_modules/@openzeppelin/contracts/interfaces/IERC721.sol";
import "../node_modules/@openzeppelin/contracts/access/IAccessControl.sol";
/// @title IFleekERC721 - A contract for managing sites NFTs
interface IFleekERC721 is IERC721 {
enum FleekContract {
Site
}
function mint(
uint8 fleekContract,
string memory base64EncodedMetadata,
address account
) external returns (uint256);
function updateTokenURI(
address tokenHolderAddress,
uint256 tokenId,
string memory base64EncodedMetadata
) external;
function getCurrentTokenId() external view returns (uint256);
function tokenContract(uint256 tokenId) external view returns (address);
}

View File

@ -1,18 +0,0 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "./IFleek.sol";
interface IFleekSite is IFleek {
event MetadataUpdated(
string name,
string description,
string thumbnail,
string external_url
);
function setThumbnail(string calldata _thumbnail) external;
function setExternalUrl(string calldata _external_url) external;
}

View File

@ -5,7 +5,8 @@
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"test": "hardhat test", "test": "hardhat test",
"format": "prettier --write \"./**/*.{js,ts,sol}\"" "format": "prettier --write \"./**/*.{js,ts,sol}\"",
"deploy:mumbai": "node scripts/deploy.js --network polygon_mumbai --contract FleekERC721 --param \"Fleek Sites Test\" --param FST"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -26,10 +27,12 @@
"chai": "^4.3.6", "chai": "^4.3.6",
"dotenv": "^16.0.2", "dotenv": "^16.0.2",
"ethereum-waffle": "^3.4.4", "ethereum-waffle": "^3.4.4",
"ethers": "^5.0.0",
"hardhat": "^2.11.2", "hardhat": "^2.11.2",
"hardhat-contract-sizer": "^2.6.1", "hardhat-contract-sizer": "^2.6.1",
"hardhat-deploy": "^0.11.15", "hardhat-deploy": "^0.11.15",
"hardhat-gas-reporter": "^1.0.9", "hardhat-gas-reporter": "^1.0.9",
"minimist": "^1.2.7",
"prettier": "^2.7.1", "prettier": "^2.7.1",
"prettier-plugin-solidity": "^1.0.0", "prettier-plugin-solidity": "^1.0.0",
"solidity-coverage": "^0.8.2" "solidity-coverage": "^0.8.2"

View File

@ -1,14 +1,26 @@
const argv = require('minimist')(process.argv.slice(2));
const contractName = argv.contract;
const params = argv.param || [];
if (!contractName) {
console.log('No contract name provided');
process.exit(1);
}
async function main() { async function main() {
console.log('Deploying contract:', contractName);
console.log('With params:', params);
const [deployer] = await ethers.getSigners(); const [deployer] = await ethers.getSigners();
console.log('Deploying contracts with the account:', deployer.address); console.log('Deploying contracts with the account:', deployer.address);
console.log('Account balance:', (await deployer.getBalance()).toString()); console.log('Account balance:', (await deployer.getBalance()).toString());
const SitesNFTs = await ethers.getContractFactory('SitesNFTs'); // const factory = await ethers.getContractFactory(contractName);
const sitesNFTs = await SitesNFTs.deploy('Sites NFTs', 'SNFT');
console.log('SitesNFTs address:', sitesNFTs.address); // // Start deployment, returning a promise that resolves to a contract object
// const contract = await factory.deploy(...params);
// console.log('Contract deployed to address:', contract.address);
} }
main() main()

View File

@ -3759,7 +3759,7 @@ ethers@^4.0.40:
uuid "2.0.1" uuid "2.0.1"
xmlhttprequest "1.8.0" xmlhttprequest "1.8.0"
ethers@^5.0.1, ethers@^5.0.2, ethers@^5.5.2, ethers@^5.5.3: ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.2, ethers@^5.5.2, ethers@^5.5.3:
version "5.7.2" version "5.7.2"
resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e"
integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==
@ -6056,7 +6056,7 @@ minimatch@5.0.1:
dependencies: dependencies:
brace-expansion "^2.0.1" brace-expansion "^2.0.1"
minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@~1.2.6: minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.7, minimist@~1.2.6:
version "1.2.7" version "1.2.7"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==