From 7b84dc49f67e9f70808f63e419aa16f49b379a63 Mon Sep 17 00:00:00 2001 From: Oren Sokolowsky Date: Mon, 27 Jul 2020 13:04:51 +0300 Subject: [PATCH 1/2] redeemer : joinAndQuit + FundingRequest lint issue bump builder version to 1.4.0 --- contracts/schemes/TokenTrade.sol | 2 - contracts/utils/Redeemer.sol | 92 ++++++ package-lock.json | 512 +++++++++++++++++++------------ package.json | 2 +- test/fundingrequest.js | 23 +- test/joinandquit.js | 20 +- 6 files changed, 440 insertions(+), 211 deletions(-) diff --git a/contracts/schemes/TokenTrade.sol b/contracts/schemes/TokenTrade.sol index 7284b2a4..91ccc21c 100644 --- a/contracts/schemes/TokenTrade.sol +++ b/contracts/schemes/TokenTrade.sol @@ -77,7 +77,6 @@ contract TokenTrade is VotingMachineCallbacks, ProposalExecuteInterface { onlyVotingMachine(_proposalId) override returns(bool) { - Proposal memory proposal = proposals[_proposalId]; if (_decision == 1) { proposals[_proposalId].passed = true; } @@ -87,7 +86,6 @@ contract TokenTrade is VotingMachineCallbacks, ProposalExecuteInterface { return true; } - function execute(bytes32 _proposalId) public { Proposal storage proposal = proposals[_proposalId]; require(proposal.decided, "must be a decided proposal"); diff --git a/contracts/utils/Redeemer.sol b/contracts/utils/Redeemer.sol index 3974110c..7ba58af9 100644 --- a/contracts/utils/Redeemer.sol +++ b/contracts/utils/Redeemer.sol @@ -3,6 +3,8 @@ pragma solidity ^0.6.10; import "../schemes/ContributionReward.sol"; import "../schemes/ContributionRewardExt.sol"; +import "../schemes/FundingRequest.sol"; +import "../schemes/JoinAndQuit.sol"; import "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol"; @@ -119,6 +121,96 @@ contract Redeemer { } } + /** + * @dev helper to redeem rewards for a proposal + * It calls execute on the proposal if it is not yet executed. + * It tries to redeem reputation and stake from the GenesisProtocol. + * It tries to redeem proposal rewards from the JoinAndQuit scheme. + * This function does not emit events. + * A client should listen to GenesisProtocol and JoinAndQuit redemption events + * to monitor redemption operations. + * @param _joinAndQuit joinAndQuit scheme + * @param _genesisProtocol genesisProtocol + * @param _proposalId the ID of the voting in the voting machine + * @param _beneficiary beneficiary + * @return gpRewards array + * gpRewards[0] - stakerTokenAmount + * gpRewards[1] - voterReputationAmount + * gpRewards[2] - proposerReputationAmount + * @return gpDaoBountyReward array + * gpDaoBountyReward[0] - staker dao bounty reward - + * will be zero for the case there is not enough tokens in avatar for the reward. + * gpDaoBountyReward[1] - staker potential dao bounty reward. + * @return executed bool true or false + * @return winningVote + * 1 - executed or closed and the winning vote is YES + * 2 - executed or closed and the winning vote is NO + * @return joinAndQuitReputationReward Reputation - from JoinAndQuit reputation reward + */ + function redeemJoinAndQuit(JoinAndQuit _joinAndQuit, + GenesisProtocol _genesisProtocol, + bytes32 _proposalId, + address _beneficiary) + external + returns(uint[3] memory gpRewards, + uint[2] memory gpDaoBountyReward, + bool executed, + uint256 winningVote, + uint256 joinAndQuitReputationReward + ) + { + bool callJoinAndQuit; + (gpRewards, gpDaoBountyReward, executed, winningVote, callJoinAndQuit) = + genesisProtocolRedeem(_genesisProtocol, _proposalId, _beneficiary); + if (callJoinAndQuit) { + joinAndQuitReputationReward = _joinAndQuit.redeemReputation(_proposalId); + } + } + + /** + * @dev helper to redeem rewards for a proposal + * It calls execute on the proposal if it is not yet executed. + * It tries to redeem reputation and stake from the GenesisProtocol. + * It tries to redeem proposal rewards from the FundingRequest scheme. + * This function does not emit events. + * A client should listen to GenesisProtocol and FundingRequest redemption events + * to monitor redemption operations. + * @param _fundingRequest fundingRequest scheme + * @param _genesisProtocol genesisProtocol + * @param _proposalId the ID of the voting in the voting machine + * @param _beneficiary beneficiary + * @return gpRewards array + * gpRewards[0] - stakerTokenAmount + * gpRewards[1] - voterReputationAmount + * gpRewards[2] - proposerReputationAmount + * @return gpDaoBountyReward array + * gpDaoBountyReward[0] - staker dao bounty reward - + * will be zero for the case there is not enough tokens in avatar for the reward. + * gpDaoBountyReward[1] - staker potential dao bounty reward. + * @return executed bool true or false + * @return winningVote + * 1 - executed or closed and the winning vote is YES + * 2 - executed or closed and the winning vote is NO + */ + function redeemFundingRequest(FundingRequest _fundingRequest, + GenesisProtocol _genesisProtocol, + bytes32 _proposalId, + address _beneficiary) + external + returns(uint[3] memory gpRewards, + uint[2] memory gpDaoBountyReward, + bool executed, + uint256 winningVote + ) + { + bool callFundingRequest; + (gpRewards, gpDaoBountyReward, executed, winningVote, callFundingRequest) = + genesisProtocolRedeem(_genesisProtocol, _proposalId, _beneficiary); + if (callFundingRequest) { + _fundingRequest.redeem(_proposalId); + } + } + function genesisProtocolRedeem(GenesisProtocol _genesisProtocol, bytes32 _proposalId, address _beneficiary) diff --git a/package-lock.json b/package-lock.json index 8a84a6b3..6e070a21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -267,18 +267,20 @@ } }, "@nomiclabs/buidler": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@nomiclabs/buidler/-/buidler-1.3.8.tgz", - "integrity": "sha512-SmSsNteks20Vl4WBELRV8Vnokh1CxbPHFF5aBqhe/4tR2QVR51dNy8dwDkmj153UyAW+f6ZtxF9QT+TxNomZBg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@nomiclabs/buidler/-/buidler-1.4.1.tgz", + "integrity": "sha512-yZlLTRsFg92l5kC3Pg2O6+XdhRSAH1yuyItAOdVwA00gM1as5IQa6GVb4YbI4ftGcZzyQTwmO/4j0YkfdYtTcw==", "dev": true, "requires": { "@nomiclabs/ethereumjs-vm": "^4.1.1", + "@sentry/node": "^5.18.1", "@solidity-parser/parser": "^0.5.2", "@types/bn.js": "^4.11.5", "@types/lru-cache": "^5.1.0", "abort-controller": "^3.0.0", "ansi-escapes": "^4.3.0", "chalk": "^2.4.2", + "chokidar": "^3.4.0", "ci-info": "^2.0.0", "debug": "^4.1.1", "deepmerge": "^2.1.0", @@ -320,6 +322,47 @@ "integrity": "sha512-uRyvnvVYmgNmTBpWDbBsH/0kPESQhQpEc4KsvMRLVzFJ1o1s0uIv0Y6Y9IB5vI1Dwz2CbS4X/y4Wyw/75cTFnQ==", "dev": true }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz", + "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -329,6 +372,15 @@ "ms": "^2.1.1" } }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, "fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", @@ -340,6 +392,22 @@ "universalify": "^0.1.0" } }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "http-errors": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", @@ -353,6 +421,21 @@ "toidentifier": "1.0.0" } }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -377,6 +460,15 @@ "unpipe": "1.0.0" } }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -389,6 +481,15 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -396,9 +497,9 @@ "dev": true }, "ws": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.0.tgz", - "integrity": "sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", + "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", "dev": true } } @@ -448,20 +549,20 @@ } }, "@nomiclabs/ethereumjs-vm": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@nomiclabs/ethereumjs-vm/-/ethereumjs-vm-4.1.1.tgz", - "integrity": "sha512-zQJBssmK7PyHonzng3VuFUvXQ6uugQeGAA7XvFVoMmEcY9KdWCqEQYh+XQ1jLZ8H9EISYB1BHF9HY6aFnflgcw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@nomiclabs/ethereumjs-vm/-/ethereumjs-vm-4.2.0.tgz", + "integrity": "sha512-+XwqoO941bILTO4KDLIUJ37U42ySxw6it7jyoi0tKv0/VUcOrWKF1TCQWMv6dBDRlxpPQd273n9o5SVlYYLRWQ==", "dev": true, "requires": { "async": "^2.1.2", "async-eventemitter": "^0.2.2", "core-js-pure": "^3.0.1", "ethereumjs-account": "^3.0.0", - "ethereumjs-block": "^2.2.1", - "ethereumjs-blockchain": "^4.0.2", - "ethereumjs-common": "^1.3.2", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "~6.1.0", + "ethereumjs-block": "^2.2.2", + "ethereumjs-blockchain": "^4.0.3", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.2", + "ethereumjs-util": "^6.2.0", "fake-merkle-patricia-tree": "^1.0.1", "functional-red-black-tree": "^1.0.1", "merkle-patricia-tree": "^2.3.2", @@ -470,33 +571,6 @@ "util.promisify": "^1.0.0" }, "dependencies": { - "ethereumjs-util": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", - "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "0.1.6", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "dev": true, - "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - } - }, "merkle-patricia-tree": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", @@ -520,18 +594,18 @@ "dev": true }, "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "dev": true, "requires": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" + "safe-buffer": "^5.1.1" } } } @@ -957,6 +1031,142 @@ "debug": "^3.1.0" } }, + "@sentry/apm": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/@sentry/apm/-/apm-5.20.1.tgz", + "integrity": "sha512-oqfyYqRR1CaM/U5qZg3KY9MxCe4OWYs3uiOvVGMOHCyx50dYsDZziM5DDVUvi6pOuokLCNbyXO9xGROSmploBQ==", + "dev": true, + "requires": { + "@sentry/browser": "5.20.1", + "@sentry/hub": "5.20.1", + "@sentry/minimal": "5.20.1", + "@sentry/types": "5.20.1", + "@sentry/utils": "5.20.1", + "tslib": "^1.9.3" + } + }, + "@sentry/browser": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.20.1.tgz", + "integrity": "sha512-ClykuvrEsMKgAvifx5VHzRjchwYbJFX8YiIicYx+Wr3MXL2jLG6OEfHHJwJeyBL2C3vxd5O0KPK3pGMR9wPMLA==", + "dev": true, + "requires": { + "@sentry/core": "5.20.1", + "@sentry/types": "5.20.1", + "@sentry/utils": "5.20.1", + "tslib": "^1.9.3" + } + }, + "@sentry/core": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.20.1.tgz", + "integrity": "sha512-gG622/UY2TePruF6iUzgVrbIX5vN8w2cjlWFo1Est8MvCfQsz8agGaLMCAyl5hCGJ6K2qTUZDOlbCNIKoMclxg==", + "dev": true, + "requires": { + "@sentry/hub": "5.20.1", + "@sentry/minimal": "5.20.1", + "@sentry/types": "5.20.1", + "@sentry/utils": "5.20.1", + "tslib": "^1.9.3" + } + }, + "@sentry/hub": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.20.1.tgz", + "integrity": "sha512-Nv5BXf14BEc08acDguW6eSqkAJLVf8wki283FczEvTsQZZuSBHM9cJ5Hnehr6n+mr8wWpYLgUUYM0oXXigUmzQ==", + "dev": true, + "requires": { + "@sentry/types": "5.20.1", + "@sentry/utils": "5.20.1", + "tslib": "^1.9.3" + } + }, + "@sentry/minimal": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.20.1.tgz", + "integrity": "sha512-2PeJKDTHNsUd1jtSLQBJ6oRI+xrIJrYDQmsyK/qs9D7HqHfs+zNAMUjYseiVeSAFGas5IcNSuZbPRV4BnuoZ0w==", + "dev": true, + "requires": { + "@sentry/hub": "5.20.1", + "@sentry/types": "5.20.1", + "tslib": "^1.9.3" + } + }, + "@sentry/node": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.20.1.tgz", + "integrity": "sha512-43YFDnD7Rv+vGHV+Fmb3LaSSWrFzsPmFRu3wmf9eYMgWiuDks6c6/kWRCgkqX9Np9ImC89wcTZs/V6S4MlOm4g==", + "dev": true, + "requires": { + "@sentry/apm": "5.20.1", + "@sentry/core": "5.20.1", + "@sentry/hub": "5.20.1", + "@sentry/types": "5.20.1", + "@sentry/utils": "5.20.1", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "dependencies": { + "agent-base": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", + "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@sentry/types": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.20.1.tgz", + "integrity": "sha512-OU+i/lcjGpDJv0XkNpsKrI2r1VPp8qX0H6Knq8NuZrlZe3AbvO3jRJJK0pH14xFv8Xok5jbZZpKKoQLxYfxqsw==", + "dev": true + }, + "@sentry/utils": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.20.1.tgz", + "integrity": "sha512-dhK6IdO6g7Q2CoxCbB+q8gwUapDUH5VjraFg0UBzgkrtNhtHLylqmwx0sWQvXCcp14Q/3MuzEbb4euvoh8o8oA==", + "dev": true, + "requires": { + "@sentry/types": "5.20.1", + "tslib": "^1.9.3" + } + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -2150,9 +2360,9 @@ "integrity": "sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==" }, "@types/pbkdf2": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.0.0.tgz", - "integrity": "sha512-6J6MHaAlBJC/eVMy9jOwj9oHaprfutukfW/Dyt0NEnpQ/6HN6YQrpvLwzWdWDeWZIdenjGHlbYDzyEODO5Z+2Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", "dev": true, "requires": { "@types/node": "*" @@ -2986,24 +3196,6 @@ "randombytes": "^2.0.1" } }, - "browserify-sha3": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.4.tgz", - "integrity": "sha1-CGxHuMgjFsnUcCLCYYWVRXbdjiY=", - "dev": true, - "requires": { - "js-sha3": "^0.6.1", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "js-sha3": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.6.1.tgz", - "integrity": "sha1-W4n3enR3Z5h39YxKB1JAk0sflcA=", - "dev": true - } - } - }, "browserify-sign": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", @@ -4369,10 +4561,13 @@ } }, "level-codec": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.1.tgz", - "integrity": "sha512-ajFP0kJ+nyq4i6kptSM+mAvJKLOg1X5FiFPtLG9M5gCEZyBmgDi3FkDrvlMkEzrUn1cWxtvVmrvoS4ASyO/q+Q==", - "dev": true + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "dev": true, + "requires": { + "buffer": "^5.6.0" + } }, "level-errors": { "version": "2.0.1", @@ -5129,45 +5324,33 @@ }, "dependencies": { "ethereumjs-util": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz", - "integrity": "sha1-PpQosxfuvaPXJg2FT93alUsfG8Y=", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.1.tgz", + "integrity": "sha512-WrckOZ7uBnei4+AKimpuF1B3Fv25OmoRgmYCpGsP7u8PFxXAmAgiJSYT2kRWnt6fVIlKaQlZvuwXp7PIrmn3/w==", "dev": true, "requires": { "bn.js": "^4.8.0", "create-hash": "^1.1.2", - "keccakjs": "^0.2.0", - "rlp": "^2.0.0", - "secp256k1": "^3.0.1" + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.0.0" } } } }, "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "dev": true, "requires": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "dev": true, - "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" + "safe-buffer": "^5.1.1" } }, "tweetnacl": { @@ -5206,39 +5389,17 @@ } }, "ethereumjs-util": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.0.2.tgz", - "integrity": "sha512-ATAP02eJLpAlWGfiKQddNrRfZpwXiTFhRN2EM/yLXMCdBW/xjKYblNKcx8GLzzrjXg0ymotck+lam1nuV90arQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.0.3.tgz", + "integrity": "sha512-uLQsGPOwsRxe50WV1Dybh5N8zXDz4ev7wP49LKX9kr28I5TmcDILPgpKK/BFe5zYSfRGEeo+hPT7W3tjghYLuA==", "dev": true, "requires": { "@types/bn.js": "^4.11.3", "bn.js": "^5.1.2", "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", "ethjs-util": "0.1.6", - "keccak": "^3.0.0", - "rlp": "^2.2.4", - "secp256k1": "^4.0.1" - } - }, - "keccak": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.0.tgz", - "integrity": "sha512-/4h4FIfFEpTEuySXi/nVFM5rqSKPnnhI7cL4K3MFSwoI3VyM7AhPSq3SsysARtnEBEeIKMBUWD8cTh9nHE8AkA==", - "dev": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "secp256k1": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.1.tgz", - "integrity": "sha512-iGRjbGAKfXMqhtdkkuNxsgJQfJO8Oo78Rm7DAvsG3XKngq+nJIOGqrCSXcQqIVsmCj0wFanE5uTKFxV3T9j2wg==", - "dev": true, - "requires": { - "elliptic": "^6.5.2", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" + "rlp": "^2.2.4" } } } @@ -5275,9 +5436,9 @@ }, "dependencies": { "keccak": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.0.tgz", - "integrity": "sha512-/4h4FIfFEpTEuySXi/nVFM5rqSKPnnhI7cL4K3MFSwoI3VyM7AhPSq3SsysARtnEBEeIKMBUWD8cTh9nHE8AkA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz", + "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==", "dev": true, "requires": { "node-addon-api": "^2.0.0", @@ -5291,9 +5452,9 @@ "dev": true }, "secp256k1": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.1.tgz", - "integrity": "sha512-iGRjbGAKfXMqhtdkkuNxsgJQfJO8Oo78Rm7DAvsG3XKngq+nJIOGqrCSXcQqIVsmCj0wFanE5uTKFxV3T9j2wg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.2.tgz", + "integrity": "sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==", "dev": true, "requires": { "elliptic": "^6.5.2", @@ -5365,30 +5526,18 @@ }, "dependencies": { "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "dev": true, "requires": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "dev": true, - "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" + "safe-buffer": "^5.1.1" } }, "merkle-patricia-tree": { @@ -8165,16 +8314,6 @@ "safe-buffer": "^5.2.0" } }, - "keccakjs": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.3.tgz", - "integrity": "sha512-BjLkNDcfaZ6l8HBG9tH0tpmDv3sS2mA7FNQxFHpCdzP3Gb2MVruXBSuoM66SnVxKJpAr5dKGdkHD+bDokt8fTg==", - "dev": true, - "requires": { - "browserify-sha3": "^0.0.4", - "sha3": "^1.2.2" - } - }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -8565,6 +8704,12 @@ "yallist": "^3.0.2" } }, + "lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0=", + "dev": true + }, "ltgt": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", @@ -8687,30 +8832,18 @@ }, "dependencies": { "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "dev": true, "requires": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", "ethjs-util": "^0.1.3", - "keccak": "^1.0.2", "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "dev": true, - "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" + "safe-buffer": "^5.1.1" } }, "level-ws": { @@ -9291,9 +9424,9 @@ "dev": true }, "node-addon-api": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.1.tgz", - "integrity": "sha512-2WVfwRfIr1AVn3dRq4yRc2Hn35ND+mPJH6inC6bjpYCZVrpXPB4j3T6i//OGVfqVsR1t/X/axRulDsheq4F0LQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", "dev": true }, "node-emoji": { @@ -9322,9 +9455,9 @@ "dev": true }, "node-gyp-build": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.2.tgz", - "integrity": "sha512-Lqh7mrByWCM8Cf9UPqpeoVBBo5Ugx+RKu885GAzmLBVYjeywScxHXPGLa4JfYNZmcNGwzR0Glu5/9GaQZMFqyA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", + "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==", "dev": true }, "nofilter": { @@ -11199,23 +11332,6 @@ "safe-buffer": "^5.0.1" } }, - "sha3": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.6.tgz", - "integrity": "sha512-KgLGmJGrmNB4JWVsAV11Yk6KbvsAiygWJc7t5IebWva/0NukNrjJqhtKhzy3Eiv2AKuGvhZZt7dt1mDo7HkoiQ==", - "dev": true, - "requires": { - "nan": "2.13.2" - }, - "dependencies": { - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "dev": true - } - } - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", diff --git a/package.json b/package.json index 853237dc..c127d615 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ }, "devDependencies": { "@babel/cli": "^7.2.3", - "@nomiclabs/buidler": "^1.3.7", + "@nomiclabs/buidler": "^1.4.0", "@nomiclabs/buidler-solhint": "^1.3.3", "@nomiclabs/buidler-truffle5": "^1.3.3", "@nomiclabs/buidler-web3": "^1.3.4", diff --git a/test/fundingrequest.js b/test/fundingrequest.js index e996c9b2..a071ce9f 100644 --- a/test/fundingrequest.js +++ b/test/fundingrequest.js @@ -2,6 +2,7 @@ const helpers = require("./helpers"); const JoinAndQuit = artifacts.require("./JoinAndQuit.sol"); const FundingRequest = artifacts.require("./FundingRequest.sol"); const ERC20Mock = artifacts.require('./test/ERC20Mock.sol'); +const Redeemer = artifacts.require("./Redeemer.sol"); class JoinAndQuitParams { constructor() { @@ -298,12 +299,22 @@ contract('FundingRequest', accounts => { await testSetup.fundingRequestParams.votingMachine.genesisProtocol.vote(proposalId,1,0,helpers.NULL_ADDRESS,{from:accounts[2]}); var proposal = await testSetup.fundingRequest.proposals(proposalId); assert.equal(proposal.executionTime, (await web3.eth.getBlock("latest")).timestamp); - tx = await testSetup.fundingRequest.redeem(proposalId); - assert.equal(tx.logs[0].event, "Redeem"); - assert.equal(tx.logs[0].args._avatar, testSetup.org.avatar.address); - assert.equal(tx.logs[0].args._proposalId, proposalId); - assert.equal(tx.logs[0].args._beneficiary, accounts[1]); - assert.equal(tx.logs[0].args._amount, testSetup.minFeeToJoin - 1); + var arcUtils = await Redeemer.new(); + tx = await arcUtils.redeemFundingRequest(testSetup.fundingRequest.address, + testSetup.fundingRequestParams.votingMachine.genesisProtocol.address, + proposalId, + accounts[2]); + await testSetup.fundingRequest.getPastEvents('Redeem', { + fromBlock: tx.blockNumber, + toBlock: 'latest' + }) + .then(function(events){ + assert.equal(events[0].event,"Redeem"); + assert.equal(events[0].args._avatar, testSetup.org.avatar.address); + assert.equal(events[0].args._proposalId, proposalId); + assert.equal(events[0].args._beneficiary, accounts[1]); + assert.equal(events[0].args._amount, testSetup.minFeeToJoin - 1); + }); assert.equal((await testSetup.standardTokenMock.balanceOf(accounts[1])), testSetup.minFeeToJoin - 1); proposal = await testSetup.fundingRequest.proposals(proposalId); assert.equal(proposal.executionTime, 0); diff --git a/test/joinandquit.js b/test/joinandquit.js index e75d36de..70f2ce5c 100644 --- a/test/joinandquit.js +++ b/test/joinandquit.js @@ -2,6 +2,7 @@ const helpers = require("./helpers"); const JoinAndQuit = artifacts.require("./JoinAndQuit.sol"); const ERC20Mock = artifacts.require('./test/ERC20Mock.sol'); const Avatar = artifacts.require("./Avatar.sol"); +const Redeemer = artifacts.require("./Redeemer.sol"); class JoinAndQuitParams { constructor() { @@ -223,7 +224,6 @@ contract('JoinAndQuit', accounts => { await testSetup.joinAndQuitParams.votingMachine.absoluteVote.vote(proposalId,1,0,helpers.NULL_ADDRESS,{from:accounts[2]}); await testSetup.joinAndQuit.redeemReputation(proposalId); - try { await testSetup.joinAndQuit.proposeToJoin( "description-hash", @@ -391,9 +391,21 @@ contract('JoinAndQuit', accounts => { //Vote with reputation to trigger execution var proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1); await testSetup.joinAndQuitParams.votingMachine.genesisProtocol.vote(proposalId,1,0,helpers.NULL_ADDRESS,{from:accounts[2]}); - tx = await testSetup.joinAndQuit.redeemReputation(proposalId); - assert.equal(tx.logs[0].event, "RedeemReputation"); - assert.equal(tx.logs[0].args._amount, testSetup.memberReputation); + var arcUtils = await Redeemer.new(); + tx = await arcUtils.redeemJoinAndQuit(testSetup.joinAndQuit.address, + testSetup.joinAndQuitParams.votingMachine.genesisProtocol.address, + proposalId, + accounts[2]); + + await testSetup.joinAndQuit.getPastEvents('RedeemReputation', { + fromBlock: tx.blockNumber, + toBlock: 'latest' + }) + .then(function(events){ + assert.equal(events[0].event,"RedeemReputation"); + assert.equal(events[0].args._amount, testSetup.memberReputation); + + }); assert.equal(await testSetup.org.reputation.balanceOf(accounts[3]),testSetup.memberReputation); try { await testSetup.joinAndQuit.redeemReputation(proposalId); From 4dd2a156919d42b6f2396db1adc580102a8502b2 Mon Sep 17 00:00:00 2001 From: Oren Sokolowsky Date: Mon, 27 Jul 2020 15:21:37 +0300 Subject: [PATCH 2/2] more test coverage --- test/fundingrequest.js | 19 +++++++++++++++++-- test/joinandquit.js | 14 +++++++++++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/test/fundingrequest.js b/test/fundingrequest.js index a071ce9f..df6bcacc 100644 --- a/test/fundingrequest.js +++ b/test/fundingrequest.js @@ -295,11 +295,26 @@ contract('FundingRequest', accounts => { testSetup.minFeeToJoin - 1, "description-hash"); - let proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1); + + let proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1); + var arcUtils = await Redeemer.new(); + tx = await arcUtils.redeemFundingRequest(testSetup.fundingRequest.address, + testSetup.fundingRequestParams.votingMachine.genesisProtocol.address, + proposalId, + accounts[2]); + + await testSetup.fundingRequest.getPastEvents('Redeem', { + fromBlock: tx.blockNumber, + toBlock: 'latest' + }) + .then(function(events){ + assert.equal(events.length,0); + }); + await testSetup.fundingRequestParams.votingMachine.genesisProtocol.vote(proposalId,1,0,helpers.NULL_ADDRESS,{from:accounts[2]}); var proposal = await testSetup.fundingRequest.proposals(proposalId); assert.equal(proposal.executionTime, (await web3.eth.getBlock("latest")).timestamp); - var arcUtils = await Redeemer.new(); + tx = await arcUtils.redeemFundingRequest(testSetup.fundingRequest.address, testSetup.fundingRequestParams.votingMachine.genesisProtocol.address, proposalId, diff --git a/test/joinandquit.js b/test/joinandquit.js index 70f2ce5c..f26d7339 100644 --- a/test/joinandquit.js +++ b/test/joinandquit.js @@ -390,8 +390,20 @@ contract('JoinAndQuit', accounts => { //Vote with reputation to trigger execution var proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1); - await testSetup.joinAndQuitParams.votingMachine.genesisProtocol.vote(proposalId,1,0,helpers.NULL_ADDRESS,{from:accounts[2]}); var arcUtils = await Redeemer.new(); + tx = await arcUtils.redeemJoinAndQuit(testSetup.joinAndQuit.address, + testSetup.joinAndQuitParams.votingMachine.genesisProtocol.address, + proposalId, + accounts[2]); + + await testSetup.joinAndQuit.getPastEvents('RedeemReputation', { + fromBlock: tx.blockNumber, + toBlock: 'latest' + }) + .then(function(events){ + assert.equal(events.length,0); + }); + await testSetup.joinAndQuitParams.votingMachine.genesisProtocol.vote(proposalId,1,0,helpers.NULL_ADDRESS,{from:accounts[2]}); tx = await arcUtils.redeemJoinAndQuit(testSetup.joinAndQuit.address, testSetup.joinAndQuitParams.votingMachine.genesisProtocol.address, proposalId,