Created
September 17, 2022 09:23
-
-
Save ilhamsa1/8b248440c64b92cb6c24893e08f45b84 to your computer and use it in GitHub Desktop.
simple smart contract
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.8.4; | |
import "@openzeppelin/[email protected]/access/AccessControl.sol"; | |
import "@openzeppelin/contracts/utils/Counters.sol"; | |
contract ProjectTest is AccessControl { | |
using Counters for Counters.Counter; | |
bytes32 public constant ADMIN_ROLE = keccak256("ADMIN"); | |
bytes32 public constant USER_ROLE = keccak256("USER"); | |
bytes32 public constant USER_WALLET = keccak256("wallet"); | |
Counters.Counter _projectIds; | |
struct Project { | |
uint256 id; | |
address creator; | |
string name; | |
bool isActive; | |
string description; | |
} | |
struct Wallet { | |
address receiver; | |
} | |
struct Config { | |
uint256 amount; | |
} | |
uint256 balanceCheck; | |
address addressCheck; | |
address msgSender; | |
uint256 public price; | |
Wallet public wallet; | |
Config public config; | |
// Project public project; | |
mapping(uint256 => Project) public projects; | |
constructor(address receiver, uint256 amount) { | |
_grantRole(DEFAULT_ADMIN_ROLE, msg.sender); | |
grantRole(ADMIN_ROLE, msg.sender); | |
grantRole(USER_WALLET, receiver); | |
wallet.receiver = payable(receiver); | |
config.amount = amount; | |
} | |
event Submitted(uint256 indexed indexedProjectId, uint256 projectId, address indexed creator, uint256 amount); | |
function submitProject(string memory name) public payable { | |
// balanceCheck = address(this).balance; | |
require(config.amount == msg.value , "The price is not valid"); | |
balanceCheck = msg.value; | |
addressCheck = msg.sender; | |
msgSender = _msgSender(); | |
// _msgSender() === msg.sender; | |
uint256 latestId = _projectIds.current(); | |
_projectIds.increment(); | |
projects[latestId] = Project({ | |
id: latestId, | |
creator: msg.sender, | |
name: name, | |
isActive: false, | |
description: "This is the description of simple project" | |
}); | |
payable(wallet.receiver).transfer(msg.value); | |
emit Submitted(latestId, latestId, _msgSender(), config.amount); | |
} | |
function getBalanceCheck() public view returns (uint256) { | |
return balanceCheck; | |
} | |
function balance() public view returns (uint256) { | |
return address(this).balance; | |
} | |
function getAddressCheck() public view returns (address) { | |
return addressCheck; | |
} | |
function getMsgSender() public view returns (address) { | |
require(hasRole(ADMIN_ROLE, msg.sender) , "error"); | |
return msgSender; | |
} | |
function setRoleAdmin(address userAddress) public { | |
grantRole(ADMIN_ROLE, userAddress); | |
} | |
function setRoleUser(address userAddress) public { | |
grantRole(USER_ROLE, userAddress); | |
} | |
function isAdmin(address userAddress) public view returns (bool) { | |
return hasRole(ADMIN_ROLE, userAddress); | |
} | |
function isUser(address userAddress) public view returns (bool) { | |
return hasRole(USER_ROLE, userAddress); | |
} | |
function setActivetedProject(uint256 projectId) public { | |
Project storage project = projects[projectId]; | |
project.isActive = false; | |
} | |
function isProjectExist(uint256 projectId) public view returns(uint256){ | |
Project storage project = projects[projectId]; | |
// require(bytes(project.id).length > 0, "404"); | |
return project.id; | |
} | |
// function projectSize() public returns (uint) { | |
// return projects.length; | |
// } | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
livehttps://simplevotesdapp.vercel.app/