From d5b154027290bb8dab80a1bd710134fbfbdf28df Mon Sep 17 00:00:00 2001 From: sdp_ibriz Date: Thu, 25 Jan 2024 13:04:25 +0545 Subject: [PATCH] fix: update sponsor address as optional for both CPS and CPSTreasury --- .../icon/cps/score/cpscore/CPSCore.java | 26 +++++++++++-------- .../cps/score/cpstreasury/CPSTreasury.java | 15 ++++++----- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/CPSCore/src/main/java/community/icon/cps/score/cpscore/CPSCore.java b/CPSCore/src/main/java/community/icon/cps/score/cpscore/CPSCore.java index 5c67b40a..d39811e7 100644 --- a/CPSCore/src/main/java/community/icon/cps/score/cpscore/CPSCore.java +++ b/CPSCore/src/main/java/community/icon/cps/score/cpscore/CPSCore.java @@ -2610,12 +2610,13 @@ public void milestoneDbMigration(String ipfsHash) { @Override @External - public void updateContributor(String _ipfs_hash, Address _new_contributor, Address _new_sponsor) { + public void updateContributor(String _ipfs_hash, Address _new_contributor, @Optional Address _new_sponsor) { validateAdmins(); + Context.require(!_new_contributor.isContract(), TAG + ": Contract Address not supported."); Map _proposal_details = getProposalDetails(_ipfs_hash); String _proposal_status = (String) _proposal_details.get(STATUS); - Context.require(List.of(ACTIVE,PAUSED).contains(_proposal_status), TAG + ": Proposal must be in active or paused state."); + Context.require(List.of(ACTIVE, PAUSED).contains(_proposal_status), TAG + ": Proposal must be in active or paused state."); // update contributor's address Address _contributor_address = (Address) _proposal_details.get(CONTRIBUTOR_ADDRESS); @@ -2625,18 +2626,21 @@ public void updateContributor(String _ipfs_hash, Address _new_contributor, Addre contributorProjects.at(_new_contributor).add(_ipfs_hash); // update sponsor's address - Address _sponsor_address = (Address) _proposal_details.get(SPONSOR_ADDRESS); - removeSponsor(_sponsor_address, _ipfs_hash); + // request update contributor address and sponsor address to cps treasury + if (_new_sponsor != null) { + Address _sponsor_address = (Address) _proposal_details.get(SPONSOR_ADDRESS); + removeSponsor(_sponsor_address, _ipfs_hash); - sponsors.add(_new_sponsor); - sponsorProjects.at(_new_sponsor).add(_ipfs_hash); + sponsors.add(_new_sponsor); + sponsorProjects.at(_new_sponsor).add(_ipfs_hash); - // request update contributor address and sponsor address to cps treasury - callScore(getCpsTreasuryScore(), "updateContributorSponsorAddress", _ipfs_hash, _new_contributor,_new_sponsor); + callScore(getCpsTreasuryScore(), "updateContributorSponsorAddress", _ipfs_hash, _new_contributor, _new_sponsor); + UpdateSponsorAddress(_sponsor_address, _new_sponsor); + } else { + callScore(getCpsTreasuryScore(), "updateContributorSponsorAddress", _ipfs_hash, _new_contributor); + UpdateContributorAddress(_contributor_address, _new_contributor); + } - // emit event - UpdateContributorAddress(_contributor_address, _new_contributor); - UpdateSponsorAddress(_sponsor_address, _new_sponsor); } diff --git a/CPSTreasury/src/main/java/community/icon/cps/score/cpstreasury/CPSTreasury.java b/CPSTreasury/src/main/java/community/icon/cps/score/cpstreasury/CPSTreasury.java index b6857774..5e448348 100644 --- a/CPSTreasury/src/main/java/community/icon/cps/score/cpstreasury/CPSTreasury.java +++ b/CPSTreasury/src/main/java/community/icon/cps/score/cpstreasury/CPSTreasury.java @@ -9,6 +9,7 @@ import score.*; import score.annotation.EventLog; import score.annotation.External; +import score.annotation.Optional; import score.annotation.Payable; import scorex.util.ArrayList; @@ -604,14 +605,13 @@ public void updateNewProjects(String oldHash, String newHash, int milestoneCount @Override @External public void updateContributorSponsorAddress(String _ipfs_key, Address _new_contributor_address, - Address _new_sponsor_address) { + @Optional Address _new_sponsor_address) { validateCpsScore(); Context.require(proposalExists(_ipfs_key), TAG + ": This project not exists"); String prefix = proposalPrefix(_ipfs_key); Map proposalData = getDataFromProposalDB(prefix); Address contributorAddress = (Address) proposalData.get(consts.CONTRIBUTOR_ADDRESS); - Address sponsorAddress = (Address) proposalData.get(consts.SPONSOR_ADDRESS); // remove ArrayDBUtils.remove_array_item_string(contributorProjects.at(contributorAddress.toString()), _ipfs_key); @@ -621,11 +621,14 @@ public void updateContributorSponsorAddress(String _ipfs_key, Address _new_contr setContributorAddress(prefix, _new_contributor_address); // remove - ArrayDBUtils.remove_array_item_string(sponsorProjects.at(sponsorAddress.toString()),_ipfs_key); - sponsorProjects.at(_new_sponsor_address.toString()).add(_ipfs_key); + if (_new_sponsor_address != null) { + Address sponsorAddress = (Address) proposalData.get(consts.SPONSOR_ADDRESS); + ArrayDBUtils.remove_array_item_string(sponsorProjects.at(sponsorAddress.toString()),_ipfs_key); + sponsorProjects.at(_new_sponsor_address.toString()).add(_ipfs_key); - // update sponsor address - setSponsorAddress(prefix, _new_sponsor_address); + // update sponsor address + setSponsorAddress(prefix, _new_sponsor_address); + } } public T callScore(Class t, Address address, String method, Object... params) {