fix: sintax wise issues for compilation
This commit is contained in:
parent
7891068b9a
commit
c9578c88fd
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
pragma solidity ^0.8.7;
|
||||
|
||||
import "../interfaces/IFleekSite.sol";
|
||||
import "@openzeppelin/contracts/access/AccessControl.sol";
|
||||
|
||||
abstract contract FleekAccessControl is AccessControl {
|
||||
|
|
@ -26,7 +25,7 @@ abstract contract FleekAccessControl is AccessControl {
|
|||
|
||||
modifier requireCollectionController() {
|
||||
require(
|
||||
hasRole(COOLECTION_OWNER_ROLE, msg.sender) ||
|
||||
hasRole(COLLECTION_OWNER_ROLE, msg.sender) ||
|
||||
hasRole(COLLECTION_CONTROLLER_ROLE, msg.sender),
|
||||
"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(
|
||||
uint256 tokenId,
|
||||
string role
|
||||
string memory role
|
||||
) internal pure returns (bytes32) {
|
||||
return keccak256(abi.encodePacked("TOKEN_", role, tokenId));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ abstract contract FleekBuilds is IFleekBuilds, FleekAccessControl {
|
|||
|
||||
function update(
|
||||
build calldata _newBuild
|
||||
) external override requireController {
|
||||
) external override requireCollectionController {
|
||||
builds.push(_newBuild);
|
||||
emit Upgraded(_newBuild);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,8 +5,6 @@ pragma solidity ^0.8.7;
|
|||
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
|
||||
import "@openzeppelin/contracts/utils/Counters.sol";
|
||||
import "./FleekAccessControl.sol";
|
||||
import "../interfaces/IFleekERC721.sol";
|
||||
import "./FleekSite.sol";
|
||||
|
||||
contract FleekERC721 is ERC721, FleekAccessControl {
|
||||
using Strings for uint256;
|
||||
|
|
@ -27,8 +25,17 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
|||
Counters.Counter private _tokenIds;
|
||||
mapping(uint256 => Site) private _sites;
|
||||
|
||||
modifier requireMinted(uint256 tokenId) {
|
||||
require(_requireMinted(tokenId), "FleekERC721: token not minted");
|
||||
constructor(
|
||||
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(
|
||||
|
|
@ -42,7 +49,10 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
|||
_mint(to, tokenId);
|
||||
addTokenController(tokenId, to);
|
||||
_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;
|
||||
}
|
||||
|
||||
|
|
@ -50,21 +60,16 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
|||
uint256 tokenId,
|
||||
string memory commit,
|
||||
string memory repository
|
||||
) public payable require requireMinted(tokenId) requireTokenOwner(tokenId) {
|
||||
_setTokenBuild(commit, repository);
|
||||
) public payable requireTokenOwner(tokenId) {
|
||||
_requireMinted(tokenId);
|
||||
_setTokenBuild(tokenId, commit, repository);
|
||||
}
|
||||
|
||||
function tokenURI(
|
||||
uint256 tokenId
|
||||
)
|
||||
public
|
||||
view
|
||||
virtual
|
||||
override
|
||||
requireMinted(tokenId)
|
||||
returns (string memory)
|
||||
{
|
||||
address memory owner = ownerOf(tokenId);
|
||||
) public view virtual override returns (string memory) {
|
||||
_requireMinted(tokenId);
|
||||
address owner = ownerOf(tokenId);
|
||||
Site memory site = _sites[tokenId];
|
||||
|
||||
// prettier-ignore
|
||||
|
|
@ -84,6 +89,28 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
|||
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) {
|
||||
return "data:application/json;base64,";
|
||||
}
|
||||
|
|
@ -91,14 +118,16 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
|||
function _setTokenURI(
|
||||
uint256 tokenId,
|
||||
string memory _tokenURI
|
||||
) internal virtual requireMinted(tokenId) requireTokenController(tokenId) {
|
||||
) internal virtual requireTokenController(tokenId) {
|
||||
_requireMinted(tokenId);
|
||||
_sites[tokenId].URI = _tokenURI;
|
||||
}
|
||||
|
||||
function _setTokenENS(
|
||||
uint256 tokenId,
|
||||
string memory _tokenENS
|
||||
) internal virtual requireMinted(tokenId) requireTokenController(tokenId) {
|
||||
) internal virtual requireTokenController(tokenId) {
|
||||
_requireMinted(tokenId);
|
||||
_sites[tokenId].ENS = _tokenENS;
|
||||
}
|
||||
|
||||
|
|
@ -106,7 +135,8 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
|||
uint256 tokenId,
|
||||
string memory _commit,
|
||||
string memory _repository
|
||||
) internal virtual requireMinted(tokenId) requireTokenController(tokenId) {
|
||||
) internal virtual requireTokenController(tokenId) {
|
||||
_requireMinted(tokenId);
|
||||
_sites[tokenId].builds.push(Build(_commit, _repository));
|
||||
_sites[tokenId].currentBuild = _sites[tokenId].builds.length - 1;
|
||||
}
|
||||
|
|
@ -118,7 +148,7 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
|||
);
|
||||
super._burn(tokenId);
|
||||
|
||||
if (bytes(_sites[tokenId]).length != 0) {
|
||||
if (bytes(_sites[tokenId].URI).length != 0) {
|
||||
delete _sites[tokenId];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
require('@nomiclabs/hardhat-waffle');
|
||||
require('@nomiclabs/hardhat-etherscan');
|
||||
require('@nomiclabs/hardhat-ethers');
|
||||
require('hardhat-deploy');
|
||||
require('solidity-coverage');
|
||||
require('hardhat-gas-reporter');
|
||||
|
|
@ -22,8 +23,7 @@ const POLYGON_MAINNET_RPC_URL =
|
|||
'https://polygon-mainnet.alchemyapi.io/v2/your-api-key';
|
||||
|
||||
const POLYGON_MUMBAI_RPC_URL =
|
||||
process.env.POLYGON_MUMBAI_RPC_URL ||
|
||||
'https://polygon-mumbai.g.alchemy.com/v2/aIjNlC4r4aLYOHrdCTFT_JUX6OJsOsu0';
|
||||
process.env.API_KEY || 'https://polygon-mumbai.g.alchemy.com/v2/your-api-key';
|
||||
const PRIVATE_KEY = process.env.PRIVATE_KEY || '0x';
|
||||
// optional
|
||||
const MNEMONIC = process.env.MNEMONIC || 'your mnemonic';
|
||||
|
|
@ -36,14 +36,14 @@ const POLYGONSCAN_API_KEY =
|
|||
const REPORT_GAS = process.env.REPORT_GAS || false;
|
||||
|
||||
module.exports = {
|
||||
defaultNetwork: 'hardhat',
|
||||
defaultNetwork: 'polygon_mumbai',
|
||||
networks: {
|
||||
hardhat: {
|
||||
// // If you want to do some forking, uncomment this
|
||||
// forking: {
|
||||
// url: MAINNET_RPC_URL
|
||||
// }
|
||||
chainId: 31337,
|
||||
// chainId: 31337,
|
||||
},
|
||||
localhost: {
|
||||
chainId: 31337,
|
||||
|
|
@ -78,6 +78,10 @@ module.exports = {
|
|||
// saveDeployments: true,
|
||||
// chainId: 80001,
|
||||
// }
|
||||
polygon_mumbai: {
|
||||
url: POLYGON_MUMBAI_RPC_URL,
|
||||
accounts: [`0x${PRIVATE_KEY}`],
|
||||
},
|
||||
},
|
||||
etherscan: {
|
||||
// npx hardhat verify --network <NETWORK> <CONTRACT_ADDRESS> <CONSTRUCTOR_PARAMETERS>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -5,7 +5,8 @@
|
|||
"main": "index.js",
|
||||
"scripts": {
|
||||
"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": {
|
||||
"type": "git",
|
||||
|
|
@ -26,10 +27,12 @@
|
|||
"chai": "^4.3.6",
|
||||
"dotenv": "^16.0.2",
|
||||
"ethereum-waffle": "^3.4.4",
|
||||
"ethers": "^5.0.0",
|
||||
"hardhat": "^2.11.2",
|
||||
"hardhat-contract-sizer": "^2.6.1",
|
||||
"hardhat-deploy": "^0.11.15",
|
||||
"hardhat-gas-reporter": "^1.0.9",
|
||||
"minimist": "^1.2.7",
|
||||
"prettier": "^2.7.1",
|
||||
"prettier-plugin-solidity": "^1.0.0",
|
||||
"solidity-coverage": "^0.8.2"
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
console.log('Deploying contract:', contractName);
|
||||
console.log('With params:', params);
|
||||
|
||||
const [deployer] = await ethers.getSigners();
|
||||
|
||||
console.log('Deploying contracts with the account:', deployer.address);
|
||||
|
||||
console.log('Account balance:', (await deployer.getBalance()).toString());
|
||||
|
||||
const SitesNFTs = await ethers.getContractFactory('SitesNFTs');
|
||||
const sitesNFTs = await SitesNFTs.deploy('Sites NFTs', 'SNFT');
|
||||
// const factory = await ethers.getContractFactory(contractName);
|
||||
|
||||
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()
|
||||
|
|
|
|||
|
|
@ -3759,7 +3759,7 @@ ethers@^4.0.40:
|
|||
uuid "2.0.1"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e"
|
||||
integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==
|
||||
|
|
@ -6056,7 +6056,7 @@ minimatch@5.0.1:
|
|||
dependencies:
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
|
||||
integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
|
||||
|
|
|
|||
Loading…
Reference in New Issue