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 034c7d36..45996f9d 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 @@ -1094,34 +1094,34 @@ public int checkChangeVote(Address address, String ipfsHash, String proposalType @Override @External - public void updateContributor(String _ipfs_hash, Address _new_contributor) { + public void updateContributor(String _ipfs_hash, Address _new_contributor, 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(_proposal_status.equals(ACTIVE), TAG + ": Proposal must be active"); - // check sender must be current contributor + + // update contributor's address Address _contributor_address = (Address) _proposal_details.get(CONTRIBUTOR_ADDRESS); - Context.require(Context.getCaller().equals(_contributor_address), TAG + ": Caller must be current contributor"); removeContributor(_contributor_address, _ipfs_hash); - // update contributor's address + contributors.add(_new_contributor); contributorProjects.at(_new_contributor).add(_ipfs_hash); - // request update contributor address to cps treasury - callScore(getCpsTreasuryScore(), "update_contributor_address", _ipfs_hash, _new_contributor); + // update sponsor's address + Address _sponsor_address = (Address) _proposal_details.get(SPONSOR_ADDRESS); + removeSponsor(_sponsor_address, _ipfs_hash); - // emit event - UpdateContributor(_contributor_address, _new_contributor); - } + sponsors.add(_new_sponsor); + sponsorProjects.at(_new_sponsor).add(_ipfs_hash); - @Override - @Deprecated(since = "JAVA translation", forRemoval = true) - @External(readonly = true) - public int check_change_vote(Address _address, String _ipfs_hash, String _proposal_type) { - return checkChangeVote(_address, _ipfs_hash, _proposal_type); - } + // request update contributor address and sponsor address to cps treasury + callScore(getCpsTreasuryScore(), "update_contributor_sponsor_address", _ipfs_hash, _new_contributor,_new_sponsor); + // emit event + UpdateContributorAddress(_contributor_address, _new_contributor); + UpdateSponsorAddress(_sponsor_address, _new_sponsor); + } @External(readonly = true) public Map getProjectAmounts() { @@ -1683,7 +1683,6 @@ private void addNewProgressReportKey(String ipfsHash, String reportHash) { } } - @Override @External(readonly = true) public Map getProposalDetails(String status, @Optional Address walletAddress, @Optional int startIndex) { if (!STATUS_TYPE.contains(status)) { @@ -2705,9 +2704,12 @@ public void PriorityVote(Address _address, String note) { } - @Override @EventLog(indexed = 1) - public void UpdateContributor(Address _old, Address _new) { + public void UpdateContributorAddress(Address _old, Address _new) { + } + + @EventLog(indexed = 1) + public void UpdateSponsorAddress(Address _old, Address _new) { } // =====================================EventLogs=============================================== 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 90cfaf54..4ffc53f0 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 @@ -3,6 +3,7 @@ import com.eclipsesource.json.Json; import com.eclipsesource.json.JsonObject; import community.icon.cps.score.cpstreasury.db.ProposalData; +import community.icon.cps.score.cpstreasury.utils.ArrayDBUtils; import community.icon.cps.score.cpstreasury.utils.consts; import community.icon.cps.score.lib.interfaces.CPSTreasuryInterface; import score.*; @@ -602,13 +603,15 @@ public void updateNewProjects(String oldHash, String newHash, int milestoneCount @Override @External - public void update_contributor_address(String _ipfs_key, Address _new_contributor_address) { + public void update_contributor_sponsor_address(String _ipfs_key, Address _new_contributor_address, + 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 contributorProjects.at(_new_contributor_address.toString()).add(_ipfs_key); @@ -616,6 +619,13 @@ public void update_contributor_address(String _ipfs_key, Address _new_contributo // update contributor address setContributorAddress(prefix, _new_contributor_address); + + // remove + sponsorProjects.at(_new_sponsor_address.toString()).add(_ipfs_key); + ArrayDBUtils.remove_array_item_string(sponsorProjects.at(sponsorAddress.toString()),_ipfs_key); + + // update sponsor address + this.sponsorAddress.at(prefix).set(_new_sponsor_address); } public T callScore(Class t, Address address, String method, Object... params) { diff --git a/score-lib/src/main/java/community/icon/cps/score/lib/interfaces/CPSCoreInterface.java b/score-lib/src/main/java/community/icon/cps/score/lib/interfaces/CPSCoreInterface.java index add2f5ce..263d1a31 100644 --- a/score-lib/src/main/java/community/icon/cps/score/lib/interfaces/CPSCoreInterface.java +++ b/score-lib/src/main/java/community/icon/cps/score/lib/interfaces/CPSCoreInterface.java @@ -256,7 +256,7 @@ public static class MilestoneVoteAttributes { void updateNextBlock(int blockCount); @External - void updateContributor(String _ipfs_key, Address _new_contributor); + void updateContributor(String _ipfs_key, Address _new_contributor, Address _new_sponsor); @External(readonly = true) @@ -306,7 +306,10 @@ public static class MilestoneVoteAttributes { void PriorityVote(Address _address, String note); @EventLog(indexed = 1) - void UpdateContributor(Address _old, Address _new); + void UpdateContributorAddress(Address _old, Address _new); + + @EventLog(indexed = 1) + void UpdateSponsorAddress(Address _old, Address _new); @External(readonly = true) int getPeriodCount(); diff --git a/score-lib/src/main/java/community/icon/cps/score/lib/interfaces/CPSTreasuryInterface.java b/score-lib/src/main/java/community/icon/cps/score/lib/interfaces/CPSTreasuryInterface.java index ba9867b4..02d1ee8d 100644 --- a/score-lib/src/main/java/community/icon/cps/score/lib/interfaces/CPSTreasuryInterface.java +++ b/score-lib/src/main/java/community/icon/cps/score/lib/interfaces/CPSTreasuryInterface.java @@ -77,7 +77,8 @@ void updateProposalFund(String ipfsKey, BigInteger addedBudget, BigInteger added BigInteger getOnsetPayment(); @External - void update_contributor_address(String _ipfs_key, Address _new_contributor_address); + void update_contributor_sponsor_address(String _ipfs_key, Address _new_contributor_address, + Address _new_sponsor_address); @EventLog(indexed = 1) void ProposalDisqualified(String _ipfs_key, String note);