0% found this document useful (0 votes)
7 views2 pages

Message

The ProjectManager contract allows an admin to manage project registrations and approvals. It includes functions to add or remove approvers, register new projects, and update project statuses. Events are emitted for project registrations and state updates to track changes on the blockchain.

Uploaded by

Jose Martinez
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views2 pages

Message

The ProjectManager contract allows an admin to manage project registrations and approvals. It includes functions to add or remove approvers, register new projects, and update project statuses. Events are emitted for project registrations and state updates to track changes on the blockchain.

Uploaded by

Jose Martinez
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 2

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Project.sol";

contract ProjectManager {
address public admin;
mapping(address => bool) public approvers;
mapping(address => bool) public registeredProjects;

event ProjectRegistered(address indexed projectAddress, string name, string


description, address creator);
event ProjectStateUpdated(address indexed projectAddress, Project.ProjectState
newState);

modifier onlyAdmin() {
require(msg.sender == admin, "Only the admin can execute this function.");
_;
}

modifier onlyApprover() {
require(approvers[msg.sender], "Only an approver can execute this
function.");
_;
}

constructor() {
admin = msg.sender;
}

function addApprover(address _approver) public onlyAdmin {


approvers[_approver] = true;
}

function removeApprover(address _approver) public onlyAdmin {


approvers[_approver] = false;
}

// El creator registra el proyecto


function registerProject(
string memory _name,
string memory _description,
address _carbonCreditTokenAddress,
uint256 _totalTokens
) public returns (address) {
Project newProject = new Project(
_name,
_description,
_carbonCreditTokenAddress,
_totalTokens,
msg.sender
);
address projectAddress = address(newProject);
registeredProjects[projectAddress] = true;
emit ProjectRegistered(projectAddress, _name, _description, msg.sender);
return projectAddress;
}

function updateProjectStatus(address _projectAddress, Project.ProjectState


_newState) public onlyApprover {
require(registeredProjects[_projectAddress], "Project is not registered.");
Project project = Project(_projectAddress);
project.updateState(_newState);
emit ProjectStateUpdated(_projectAddress, _newState);
}

function isProjectRegistered(address _projectAddress) public view returns


(bool) {
return registeredProjects[_projectAddress];
}
}

You might also like