Skip to content

Commit

Permalink
Not allowing to pass denominator smaller than real value, test fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
Filip Lazovic committed Jul 6, 2018
1 parent 69ca157 commit b2ab367
Show file tree
Hide file tree
Showing 4 changed files with 149 additions and 118 deletions.
8 changes: 4 additions & 4 deletions contracts/ColonyFunding.sol
Original file line number Diff line number Diff line change
Expand Up @@ -214,16 +214,16 @@ contract ColonyFunding is ColonyStorage, DSMath {

require(mul(_squareRoots[0], _squareRoots[0]) <= _userReputation, "colony-reward-payout-invalid-parametar-user-reputation");
require(mul(_squareRoots[1], _squareRoots[1]) <= userTokens, "colony-reward-payout-invalid-parametar-user-token");
require(mul(_squareRoots[2], _squareRoots[2]) <= _totalReputation, "colony-reward-payout-invalid-parametar-total-reputation");
require(mul(_squareRoots[3], _squareRoots[3]) <= payout.totalTokens, "colony-reward-payout-invalid-parametar-total-tokens");
require(mul(_squareRoots[2], _squareRoots[2]) >= _totalReputation, "colony-reward-payout-invalid-parametar-total-reputation");
require(mul(_squareRoots[3], _squareRoots[3]) >= payout.totalTokens, "colony-reward-payout-invalid-parametar-total-tokens");
require(mul(_squareRoots[6], _squareRoots[6]) <= payout.amount, "colony-reward-payout-invalid-parametar-amount");
uint256 numerator = mul(_squareRoots[0], _squareRoots[1]);
uint256 denominator = mul(_squareRoots[2], _squareRoots[3]);

require(mul(_squareRoots[4], _squareRoots[4]) <= numerator, "colony-reward-payout-invalid-parametar-numerator");
require(mul(_squareRoots[5], _squareRoots[5]) <= denominator, "colony-reward-payout-invalid-parametar-denominator");
require(mul(_squareRoots[5], _squareRoots[5]) >= denominator, "colony-reward-payout-invalid-parametar-denominator");

uint256 reward = (mul(_squareRoots[4], _squareRoots[6]) / (_squareRoots[5] + 1)) ** 2;
uint256 reward = (mul(_squareRoots[4], _squareRoots[6]) / _squareRoots[5]) ** 2;

tokenLocking.unlockTokenForUser(address(token), msg.sender, _payoutId);

Expand Down
13 changes: 6 additions & 7 deletions gasCosts/gasCosts.js
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ contract("All", accounts => {
});

it("when working with reward payouts", async () => {
const totalReputation = toBN(350 * 1e18);
const totalReputation = toBN(300 * 1e18);
const workerReputation = toBN(200 * 1e18);
const managerReputation = toBN(100 * 1e18);
const initialFunding = toBN(360 * 1e18);
Expand All @@ -338,7 +338,7 @@ contract("All", accounts => {
await newToken.setOwner(colonyAddress);

await fundColonyWithTokens(newColony, otherToken, initialFunding.toString());
await fundColonyWithTokens(newColony, newToken, initialFunding.toString());
await newColony.mintTokens(workerReputation.add(managerReputation).toString());

await newColony.bootstrapColony([WORKER, MANAGER], [workerReputation.toString(), managerReputation.toString()]);

Expand All @@ -357,13 +357,12 @@ contract("All", accounts => {
});

const workerReputationSqrt = bnSqrt(workerReputation);
const totalReputationSqrt = bnSqrt(workerReputation.add(managerReputation));
const totalReputationSqrt = bnSqrt(workerReputation.add(managerReputation), true);
const numeratorSqrt = bnSqrt(workerReputationSqrt.mul(workerReputationSqrt));
const denominatorSqrt = bnSqrt(totalReputationSqrt.mul(totalReputationSqrt));
const denominatorSqrt = bnSqrt(totalReputationSqrt.mul(totalReputationSqrt), true);

const info = await newColony.getRewardPayoutInfo.call(payoutId);

const amountSqrt = bnSqrt(info[2]);
const balance = await newColony.getPotBalance(0, otherToken.address);
const amountSqrt = bnSqrt(balance);

const squareRoots = [
workerReputationSqrt.toString(),
Expand Down
6 changes: 5 additions & 1 deletion helpers/test-helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ export async function createSignaturesTrezor(colony, taskId, signers, value, dat
return { sigV, sigR, sigS };
}

export function bnSqrt(bn) {
export function bnSqrt(bn, isGreater) {
let a = bn.add(web3Utils.toBN(1)).div(web3Utils.toBN(2));
let b = bn;
while (a.lt(b)) {
Expand All @@ -253,5 +253,9 @@ export function bnSqrt(bn) {
.add(a)
.div(web3Utils.toBN(2));
}
// Do we need while loop? Not sure how precise the formula above is
while (isGreater && b.mul(b).lt(bn)) {
b = b.add(web3Utils.toBN(1));
}
return b;
}
Loading

0 comments on commit b2ab367

Please sign in to comment.