Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow update deployment and mark a deployment latest for a project #284

Merged
merged 5 commits into from
Nov 9, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 36 additions & 11 deletions contracts/ProjectRegistry.sol
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,16 @@ contract ProjectRegistry is Initializable, OwnableUpgradeable, ERC721Upgradeable

/// @dev EVENTS
/// @notice Emitted when project created.
event CreateProject(address indexed creator, uint256 indexed projectId, string projectMetadata, ProjectType projectType, bytes32 deploymentId, bytes32 deploymentMetadata);
event ProjectCreated(address indexed creator, uint256 indexed projectId, string projectMetadata, ProjectType projectType, bytes32 deploymentId, bytes32 deploymentMetadata);

/// @notice Emitted when the metadata of the project updated.
event UpdateProjectMetadata(address indexed owner, uint256 indexed projectId, string metadata);
event ProjectMetadataUpdated(address indexed owner, uint256 indexed projectId, string metadata);

/// @notice Emitted when the latestDeploymentId of the project updated.
event UpdateProjectDeployment(address indexed owner, uint256 indexed projectId, bytes32 deploymentId, bytes32 metadata);
event ProjectDeploymentUpdated(address indexed owner, uint256 indexed projectId, bytes32 deploymentId, bytes32 metadata);

/// @notice Emitted when project latest deployment updated.
event ProjectLatestDeploymentUpdated(address indexed owner, uint256 projectId, bytes32 deploymentId);

/// @notice Emitted when service status changed with a specific deploymentId.
event ServiceStatusChanged(address indexed indexer, bytes32 indexed deploymentId, ServiceStatus status);
Expand Down Expand Up @@ -153,7 +156,7 @@ contract ProjectRegistry is Initializable, OwnableUpgradeable, ERC721Upgradeable
_safeMint(msg.sender, projectId);
_setTokenURI(projectId, projectMetadataUri);

emit CreateProject(msg.sender, projectId, projectMetadataUri, projectType, deploymentId, deploymentMetdata);
emit ProjectCreated(msg.sender, projectId, projectMetadataUri, projectType, deploymentId, deploymentMetdata);
}

/**
Expand All @@ -164,20 +167,42 @@ contract ProjectRegistry is Initializable, OwnableUpgradeable, ERC721Upgradeable

_setTokenURI(projectId, metadataUri);

emit UpdateProjectMetadata(msg.sender, projectId, metadataUri);
emit ProjectMetadataUpdated(msg.sender, projectId, metadataUri);
}

function _updateProjectLatestDeployment(uint256 projectId, bytes32 deploymentId) internal {
projectInfos[projectId].latestDeploymentId = deploymentId;
emit ProjectLatestDeploymentUpdated(msg.sender, projectId, deploymentId);
}

/**
* @notice update the deployment of a project, if in the restrict mode, only creator allowed call this function
* @notice add a deployment to a project.
*/
function updateDeployment(uint256 projectId, bytes32 deploymentId, bytes32 metadata) external {
function addOrUpdateDeployment(uint256 projectId, bytes32 deploymentId, bytes32 metadata, bool updateLatest) external {
mzxyz marked this conversation as resolved.
Show resolved Hide resolved
require(ownerOf(projectId) == msg.sender, 'PR004');
require(deploymentInfos[deploymentId].projectId == 0, 'PR003');
require(deploymentId != bytes32(0) && metadata != bytes32(0), 'PR009');

if (deploymentInfos[deploymentId].projectId == 0) {
deploymentInfos[deploymentId] = DeploymentInfo(projectId, metadata);
} else {
require(deploymentInfos[deploymentId].projectId == projectId, 'PR007');
require(deploymentInfos[deploymentId].metadata != metadata, 'PR008');
deploymentInfos[deploymentId].metadata = metadata;
}

projectInfos[projectId].latestDeploymentId = deploymentId;
deploymentInfos[deploymentId] = DeploymentInfo(projectId, metadata);
emit ProjectDeploymentUpdated(msg.sender, projectId, deploymentId, metadata);

if (updateLatest && projectInfos[projectId].latestDeploymentId != deploymentId) {
mzxyz marked this conversation as resolved.
Show resolved Hide resolved
_updateProjectLatestDeployment(projectId, deploymentId);
}
}

function setProjectLatestDeployment(uint256 projectId, bytes32 deploymentId) external {
require(ownerOf(projectId) == msg.sender, 'PR004');
require(deploymentInfos[deploymentId].projectId == projectId, 'PR007');
require(projectInfos[projectId].latestDeploymentId != deploymentId, 'PR010');

emit UpdateProjectDeployment(msg.sender, projectId, deploymentId, metadata);
_updateProjectLatestDeployment(projectId, deploymentId);
}

/**
Expand Down
8 changes: 3 additions & 5 deletions contracts/interfaces/IProjectRegistry.sol
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,9 @@ interface IProjectRegistry {

function updateProjectMetadata(uint256 projectId, string memory metadataUri) external;

function updateDeployment(
uint256 projectId,
bytes32 deploymentId,
bytes32 metadata
) external;
function addOrUpdateDeployment(uint256 projectId, bytes32 deploymentId, bytes32 metadata, bool updateLatest) external;

function setProjectLatestDeployment(uint256 projectId, bytes32 deploymentId) external;

function startService(bytes32 deploymentId) external;

Expand Down
202 changes: 125 additions & 77 deletions publish/ABI/ProjectRegistry.json
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,51 @@
"name": "BatchMetadataUpdate",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "MetadataUpdate",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
Expand Down Expand Up @@ -108,33 +153,63 @@
"type": "bytes32"
}
],
"name": "CreateProject",
"name": "ProjectCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "projectId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
"internalType": "bytes32",
"name": "deploymentId",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "metadata",
"type": "bytes32"
}
],
"name": "Initialized",
"name": "ProjectDeploymentUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_tokenId",
"name": "projectId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "deploymentId",
"type": "bytes32"
}
],
"name": "MetadataUpdate",
"name": "ProjectLatestDeploymentUpdated",
"type": "event"
},
{
Expand All @@ -143,17 +218,23 @@
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
"internalType": "uint256",
"name": "projectId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "string",
"name": "metadata",
"type": "string"
}
],
"name": "OwnershipTransferred",
"name": "ProjectMetadataUpdated",
"type": "event"
},
{
Expand Down Expand Up @@ -207,70 +288,42 @@
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"name": "creator",
"type": "address"
},
}
],
"name": "addCreator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "projectId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "deploymentId",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "metadata",
"type": "bytes32"
}
],
"name": "UpdateProjectDeployment",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "projectId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "string",
"name": "metadata",
"type": "string"
}
],
"name": "UpdateProjectMetadata",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "creator",
"type": "address"
"internalType": "bool",
"name": "updateLatest",
"type": "bool"
}
],
"name": "addCreator",
"name": "addOrUpdateDeployment",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
Expand Down Expand Up @@ -703,6 +756,24 @@
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "projectId",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "deploymentId",
"type": "bytes32"
}
],
"name": "setProjectLatestDeployment",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
Expand Down Expand Up @@ -898,29 +969,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "projectId",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "deploymentId",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "metadata",
"type": "bytes32"
}
],
"name": "updateDeployment",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
Expand Down
3 changes: 3 additions & 0 deletions publish/revertcode.json
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,9 @@
"PR005": "can not stop indexing for NOTINDEXING services",
"PR006": "cannot stop indexing with an ongoing service agreement",
"PR007": "Inconsistent project id and deployment id",
"PR008": "deployment metadata not changed",
"PR009": "deployment id or metadata is empty",
"PR010": "project latest deployment id not changed",
"RD001": "Waiting Era",
"RD002": "Era expired",
"RD003": "Waiting next era",
Expand Down
Loading