Skip to content

Commit 4ea1138

Browse files
authored
fix - totalDonation decrease order (#776)
* fix - totalDonation decrease order * more updates * require acceptance at ragequit * tests coverage * remove member accepted * use infra 21 * solc 0.6.12
1 parent 5b7720f commit 4ea1138

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+689
-506
lines changed

.solhint.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@
88
"two-lines-top-level-separator": "off",
99
"mark-callable-contracts": "off",
1010
"reason-string": "off",
11-
"compiler-version": ["error","^0.6.10"]
11+
"compiler-version": ["error","^0.6.12"]
1212
}
1313
}

buidler.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ module.exports = {
124124
}
125125
},
126126
solc: {
127-
version: "0.6.10", // Fetch exact version from solc-bin (default: truffle's version)
127+
version: "0.6.12", // Fetch exact version from solc-bin (default: truffle's version)
128128
optimizer: {
129129
enabled: true,
130130
runs: 200

contracts/controller/Avatar.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@daostack/infra-experimental/contracts/Reputation.sol";

contracts/controller/Controller.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "./Avatar.sol";

contracts/controller/DAOToken.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/ERC20Burnable.sol";

contracts/controller/Vault.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol";

contracts/globalConstraints/GlobalConstraintInterface.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
// solhint-disable-next-line indent

contracts/globalConstraints/TokenCapGC.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol";

contracts/libs/Bytes32ToStr.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
library Bytes32ToStr {

contracts/libs/BytesLib.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* The library lets you concatenate, slice and type cast bytes arrays both in memory and storage.
77
*/
88

9-
pragma solidity ^0.6.10;
9+
pragma solidity ^0.6.12;
1010
// SPDX-License-Identifier: GPL-3.0
1111

1212

contracts/libs/StringUtil.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44

contracts/misc/CommonToken.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/ERC20.sol";

contracts/misc/NFTManager.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@openzeppelin/contracts-ethereum-package/contracts/token/ERC721/IERC721.sol";

contracts/misc/NectarRepAllocation.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol";

contracts/misc/PolkaCurve.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "../schemes/CurveInterface.sol";

contracts/registry/App.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "./ImplementationProvider.sol";

contracts/registry/ImplementationDirectory.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "./ImplementationProvider.sol";

contracts/registry/ImplementationProvider.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44

contracts/registry/Package.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@daostack/upgrades/contracts/ownership/Ownable.sol";

contracts/schemes/Agreement.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
/**

contracts/schemes/ArcScheme.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "../controller/Avatar.sol";

contracts/schemes/Auction4Reputation.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol";

contracts/schemes/CommonInterface.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44

contracts/schemes/Competition.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "./ContributionRewardExt.sol";

contracts/schemes/ContinuousLocking4Reputation.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol";

contracts/schemes/ContributionReward.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "../votingMachines/VotingMachineCallbacks.sol";

contracts/schemes/ContributionRewardExt.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "../votingMachines/VotingMachineCallbacks.sol";

contracts/schemes/ControllerUpgradeScheme.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@daostack/infra-experimental/contracts/votingMachines/IntVoteInterface.sol";

contracts/schemes/CurveInterface.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
interface CurveInterface {

contracts/schemes/Dictator.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "../controller/Avatar.sol";

contracts/schemes/ExternalLocking4Reputation.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "./Locking4Reputation.sol";

contracts/schemes/FixedReputationAllocation.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "../controller/Controller.sol";

contracts/schemes/FundingRequest.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "../votingMachines/VotingMachineCallbacks.sol";

contracts/schemes/GenericScheme.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@daostack/infra-experimental/contracts/votingMachines/IntVoteInterface.sol";

contracts/schemes/GlobalConstraintRegistrar.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@daostack/infra-experimental/contracts/votingMachines/IntVoteInterface.sol";

contracts/schemes/JoinAndQuit.sol

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "../votingMachines/VotingMachineCallbacks.sol";
@@ -53,9 +53,10 @@ contract JoinAndQuit is
5353
event ProposalExecuted(address indexed _avatar, bytes32 indexed _proposalId, int256 _decision);
5454

5555
struct Proposal {
56-
bool accepted;
5756
address proposedMember;
5857
uint256 funding;
58+
bool executed;
59+
bool accepted;
5960
}
6061

6162
struct MemberFund {
@@ -124,22 +125,25 @@ contract JoinAndQuit is
124125
onlyVotingMachine(_proposalId)
125126
override
126127
returns(bool) {
127-
require(proposals[_proposalId].accepted == false);
128-
require(proposals[_proposalId].proposedMember != address(0));
129128
Proposal memory proposal = proposals[_proposalId];
129+
require(proposal.proposedMember != address(0), "not a valid proposal");
130+
require(proposal.executed == false, "proposal already been executed");
131+
proposals[_proposalId].executed = true;
132+
130133
bool success;
131134
// Check if vote was successful:
132135
if ((_decision == 1) && (avatar.nativeReputation().balanceOf(proposal.proposedMember) == 0)) {
133136
proposals[_proposalId].accepted = true;
137+
fundings[proposal.proposedMember].funding = proposal.funding;
138+
totalDonation = totalDonation.add(proposal.funding);
134139
if (fundingToken == IERC20(0)) {
135140
// solhint-disable-next-line
136141
(success, ) = address(avatar).call{value:proposal.funding}("");
137142
require(success, "sendEther to avatar failed");
138143
} else {
139144
fundingToken.safeTransfer(address(avatar), proposal.funding);
140145
}
141-
fundings[proposal.proposedMember].funding = proposal.funding;
142-
totalDonation = totalDonation.add(proposal.funding);
146+
//this should be called/check after the transfer to the avatar.
143147
setFundingGoalReachedFlag();
144148
} else {
145149
if (fundingToken == IERC20(0)) {
@@ -182,9 +186,10 @@ contract JoinAndQuit is
182186
bytes32 proposalId = votingMachine.propose(2, voteParamsHash, proposer, address(avatar));
183187

184188
Proposal memory proposal = Proposal({
185-
accepted: false,
189+
executed: false,
186190
proposedMember: proposer,
187-
funding : _feeAmount
191+
funding : _feeAmount,
192+
accepted: false
188193
});
189194
proposals[proposalId] = proposal;
190195

@@ -210,9 +215,9 @@ contract JoinAndQuit is
210215
Proposal storage proposal = proposals[_proposalId];
211216
require(proposal.proposedMember != address(0), "no member to redeem");
212217
require(!fundings[proposal.proposedMember].rageQuit, "member already rageQuit");
218+
require(proposal.accepted == true, " proposal not accepted");
213219
//set proposal proposedMember to zero to prevent reentrancy attack.
214220
proposal.proposedMember = address(0);
215-
require(proposal.accepted == true, " proposal not accepted");
216221
if (memberReputation == 0) {
217222
reputation = _proposal.funding;
218223
} else {
@@ -258,12 +263,12 @@ contract JoinAndQuit is
258263
} else {
259264
refundAmount = userDonation.mul(fundingToken.balanceOf(address(avatar))).div(totalDonation);
260265
}
266+
totalDonation = totalDonation.sub(userDonation);
261267
sendToBeneficiary(refundAmount, msg.sender);
262268
uint256 msgSenderReputation = avatar.nativeReputation().balanceOf(msg.sender);
263269
require(
264270
Controller(
265271
avatar.owner()).burnReputation(msgSenderReputation, msg.sender));
266-
totalDonation = totalDonation.sub(userDonation);
267272
emit RageQuit(address(avatar), msg.sender, refundAmount);
268273
}
269274

contracts/schemes/Locking4Reputation.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "../controller/Controller.sol";

contracts/schemes/LockingEth4Reputation.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "./Locking4Reputation.sol";

contracts/schemes/LockingToken4Reputation.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "./Locking4Reputation.sol";

contracts/schemes/PriceOracleInterface.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
interface PriceOracleInterface {

contracts/schemes/ReputationAdmin.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity 0.6.10;
1+
pragma solidity 0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol";

contracts/schemes/ReputationFromToken.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "../controller/Controller.sol";

contracts/schemes/SchemeFactory.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@daostack/infra-experimental/contracts/votingMachines/IntVoteInterface.sol";

contracts/schemes/SchemeRegistrar.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@daostack/infra-experimental/contracts/votingMachines/VotingMachineCallbacksInterface.sol";

contracts/schemes/SignalScheme.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@daostack/infra-experimental/contracts/votingMachines/IntVoteInterface.sol";

contracts/schemes/TokenTrade.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "../votingMachines/VotingMachineCallbacks.sol";

contracts/schemes/UpgradeScheme.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@daostack/infra-experimental/contracts/votingMachines/IntVoteInterface.sol";

contracts/schemes/VoteInOrganizationScheme.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "../votingMachines/VotingMachineCallbacks.sol";

contracts/test/ARCDebug.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "@daostack/infra-experimental/contracts/votingMachines/GenesisProtocol.sol";

contracts/test/ARCGenesisProtocolCallbacksMock.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "../votingMachines/VotingMachineCallbacks.sol";

contracts/test/ActionMock.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "../controller/Avatar.sol";

contracts/test/AgreementMock.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pragma solidity ^0.6.10;
1+
pragma solidity ^0.6.12;
22
// SPDX-License-Identifier: GPL-3.0
33

44
import "../schemes/Agreement.sol";

0 commit comments

Comments
 (0)