Skip to content

Instantly share code, notes, and snippets.

@ilhamsa1
Created September 17, 2022 09:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ilhamsa1/8b248440c64b92cb6c24893e08f45b84 to your computer and use it in GitHub Desktop.
Save ilhamsa1/8b248440c64b92cb6c24893e08f45b84 to your computer and use it in GitHub Desktop.
simple smart contract
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts@4.7.3/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;
// }
}
@ilhamsa1
Copy link
Author

livehttps://simplevotesdapp.vercel.app/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment