diff --git a/contracts/schemes/JoinAndQuit.sol b/contracts/schemes/JoinAndQuit.sol index aab04533..bb2f918b 100644 --- a/contracts/schemes/JoinAndQuit.sol +++ b/contracts/schemes/JoinAndQuit.sol @@ -54,6 +54,7 @@ contract JoinAndQuit is } struct MemberFund { + bool candidate; bool rageQuit; uint256 funding; } @@ -68,7 +69,7 @@ contract JoinAndQuit is uint256 public minFeeToJoin; uint256 public memberReputation; uint256 public fundingGoal; - uint256 public fundingGoalDeadLine; + uint256 public fundingGoalDeadline; uint256 public totalDonation; /** @@ -83,7 +84,7 @@ contract JoinAndQuit is * @param _memberReputation the repution which will be allocated for members if this param is zero so the repution will be allocated proportional to the fee paid * @param _fundingGoal the funding goal - * @param _fundingGoalDeadLine the funding goal deadline + * @param _fundingGoalDeadline the funding goal deadline */ function initialize( Avatar _avatar, @@ -95,7 +96,7 @@ contract JoinAndQuit is uint256 _minFeeToJoin, uint256 _memberReputation, uint256 _fundingGoal, - uint256 _fundingGoalDeadLine + uint256 _fundingGoalDeadline ) external initializer @@ -121,7 +122,7 @@ contract JoinAndQuit is minFeeToJoin = _minFeeToJoin; memberReputation = _memberReputation; fundingGoal = _fundingGoal; - fundingGoalDeadLine = _fundingGoalDeadLine; + fundingGoalDeadline = _fundingGoalDeadline; } /** @@ -159,6 +160,7 @@ contract JoinAndQuit is fundingToken.safeTransfer(proposal.proposedMember, proposal.funding); } } + fundings[proposal.proposedMember].candidate = false; emit ProposalExecuted(address(avatar), _proposalId, _decision); return true; } @@ -178,8 +180,10 @@ contract JoinAndQuit is returns(bytes32) { address proposer = msg.sender; + require(!fundings[proposer].candidate, "already a candidate"); require(avatar.nativeReputation().balanceOf(proposer) == 0, "already a member"); require(_feeAmount >= minFeeToJoin, "_feeAmount should be >= then the minFeeToJoin"); + fundings[proposer].candidate = true; if (fundingToken == IERC20(0)) { require(_feeAmount == msg.value, "ETH received shoul match the _feeAmount"); } else { @@ -266,7 +270,7 @@ contract JoinAndQuit is /** * @dev setFundingGoalReachedFlag check if funding goal reached. */ - function setFundingGoalReachedFlag() private { + function setFundingGoalReachedFlag() public { uint256 avatarBalance; if (fundingToken == IERC20(0)) { avatarBalance = (address(avatar.vault())).balance; @@ -277,7 +281,7 @@ contract JoinAndQuit is .hashCompareWithLengthCheck(CommonInterface.FUNDED_BEFORE_DEADLINE_VALUE) == false) && (avatarBalance >= fundingGoal) && // solhint-disable-next-line not-rely-on-time - (now < fundingGoalDeadLine)) { + (now < fundingGoalDeadline)) { require( Controller( avatar.owner()). diff --git a/package-lock.json b/package-lock.json index 0df2dc9e..0ae09694 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@daostack/arc-experimental", - "version": "0.1.1-rc.15", + "version": "0.1.1-rc.16", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -55,12 +55,12 @@ } }, "@babel/generator": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", - "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", + "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", "dev": true, "requires": { - "@babel/types": "^7.9.5", + "@babel/types": "^7.9.6", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -113,9 +113,9 @@ } }, "@babel/parser": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", - "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", + "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==", "dev": true }, "@babel/template": { @@ -130,17 +130,17 @@ } }, "@babel/traverse": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", - "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", + "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.5", + "@babel/generator": "^7.9.6", "@babel/helper-function-name": "^7.9.5", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.0", - "@babel/types": "^7.9.5", + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" @@ -164,9 +164,9 @@ } }, "@babel/types": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", - "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", + "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.9.5", @@ -264,9 +264,9 @@ } }, "@nomiclabs/buidler": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/buidler/-/buidler-1.3.0.tgz", - "integrity": "sha512-9Oalatnwb4xiJxdPQufvAXM58V9+MbbKudQz8ckUkLP0e17fF35XvV6+kxeigJKWkabOdBMN5s4YkjGJSzOfVA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@nomiclabs/buidler/-/buidler-1.3.1.tgz", + "integrity": "sha512-ponVA2N7Y5T2pFBIr5Lzil5CtCz0TOh3PQHqPnJECGVH81vskB6PY+ISDi2O9imSvuBlbmQ0zVMUTh8GaynaBA==", "dev": true, "requires": { "@nomiclabs/ethereumjs-vm": "^4.1.1", @@ -698,26 +698,26 @@ } }, "ws": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz", - "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==", + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz", + "integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA==", "dev": true } } }, "@nomiclabs/buidler-solhint": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/buidler-solhint/-/buidler-solhint-1.3.0.tgz", - "integrity": "sha512-jJaoSac0BCvJX94j3Tx20RYhTz/IFJBvo6+eNZMVAfru+Bfu57KPobP+qu62AtVZGhql09LmAMQkT72o0x6ewQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@nomiclabs/buidler-solhint/-/buidler-solhint-1.3.1.tgz", + "integrity": "sha512-FyAk9L9tsInBTEA3bF8KeG3gy9bE4rv03Z6poDErH3JOJihB9JAlyT0/XolvOxHGIuojr5bOPOJfBsLnjlO+FA==", "dev": true, "requires": { "solhint": "^2.0.0" } }, "@nomiclabs/buidler-truffle5": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/buidler-truffle5/-/buidler-truffle5-1.3.0.tgz", - "integrity": "sha512-NEBZdvtAVr0Ah3qRUQsNF4VU0+5ZPvwwx8UUV2/R+8NpbrRB8w6HbvQqexgPCLT3nI5KObhqkIdd41XI92nD3A==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@nomiclabs/buidler-truffle5/-/buidler-truffle5-1.3.1.tgz", + "integrity": "sha512-YDX/CZV8s8to80+JVIWvMbC5hvuoxQgOw2J40jI4L8hgaQ3XbKbYZ0zUHG1pNGp+70AbkOc2b/f/Xa/NxJXyaA==", "dev": true, "requires": { "@nomiclabs/truffle-contract": "^4.1.2", @@ -741,9 +741,9 @@ } }, "@nomiclabs/buidler-web3": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/buidler-web3/-/buidler-web3-1.3.0.tgz", - "integrity": "sha512-/LlHyElIi0GfGPDErmrplEM+4VzQRF83EpGb0rEP79N5qehWKjYrOlSsZuC4FDJRbsmjf8xHcmyHIO0u6zO9GA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@nomiclabs/buidler-web3/-/buidler-web3-1.3.1.tgz", + "integrity": "sha512-0ZBfaLR0Hu4lTRLpbdGcRkafWIfTVKrEY1iDw46JEvBbQ/Ll4SnUOi9qK2mBYvjPdhm1h9xHZB6ksoH4gGNeng==", "dev": true, "requires": { "@types/bignumber.js": "^5.0.0" @@ -953,9 +953,9 @@ }, "dependencies": { "@types/node": { - "version": "12.12.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.36.tgz", - "integrity": "sha512-hmmypvyO/uTLFYCYu6Hlb3ydeJ11vXRxg8/WJ0E3wvwmPO0y47VqnfmXFVuWlysO0Zyj+je1Y33rQeuYkZ51GQ==" + "version": "12.12.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.37.tgz", + "integrity": "sha512-4mXKoDptrXAwZErQHrLzpe0FN/0Wmf5JRniSVIdwUrtDf9wnmEV1teCNLBo/TwuXhkK/bVegoEn/wmb+x0AuPg==" }, "bignumber.js": { "version": "7.2.1", @@ -1018,9 +1018,9 @@ }, "dependencies": { "@types/node": { - "version": "10.17.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.20.tgz", - "integrity": "sha512-XgDgo6W10SeGEAM0k7FosJpvLCynOTYns4Xk3J5HGrA+UI/bKZ30PGMzOP5Lh2zs4259I71FSYLAtjnx3qhObw==" + "version": "10.17.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.21.tgz", + "integrity": "sha512-PQKsydPxYxF1DsAFWmunaxd3sOi3iMt6Zmx/tgaagHYmwJ/9cRH91hQkeJZaUGWbvn0K5HlSVEXkn5U/llWPpQ==" } } }, @@ -1121,9 +1121,9 @@ }, "dependencies": { "@types/node": { - "version": "10.17.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.20.tgz", - "integrity": "sha512-XgDgo6W10SeGEAM0k7FosJpvLCynOTYns4Xk3J5HGrA+UI/bKZ30PGMzOP5Lh2zs4259I71FSYLAtjnx3qhObw==" + "version": "10.17.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.21.tgz", + "integrity": "sha512-PQKsydPxYxF1DsAFWmunaxd3sOi3iMt6Zmx/tgaagHYmwJ/9cRH91hQkeJZaUGWbvn0K5HlSVEXkn5U/llWPpQ==" }, "elliptic": { "version": "6.3.3", @@ -1302,14 +1302,15 @@ } }, "@pm2/agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@pm2/agent/-/agent-1.0.0.tgz", - "integrity": "sha512-BsfhSI/2+SSXpg9dZojfv9WW6dTTr1vt7FRR9cefuwyDA4vsZR3mHTeyQUBGHzMkd6yPHFb3B6NO8T2pY4R/MA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@pm2/agent/-/agent-1.0.4.tgz", + "integrity": "sha512-cZLwaoLa45FRuetKCcoI3kHnnQ7VMLpZnmVom04MoK0cpY/RxcSarkCHSCu9V+pdARwxx96QrWdrtAJdw97dng==", "dev": true, "requires": { - "async": "~2.6.0", + "async": "~3.2.0", "chalk": "~3.0.0", "dayjs": "~1.8.24", + "debug": "~4.1.1", "eventemitter2": "~5.0.1", "fclone": "~1.0.11", "nssocket": "0.6.0", @@ -1317,7 +1318,7 @@ "pm2-axon-rpc": "^0.5.0", "proxy-agent": "~3.1.1", "semver": "~7.2.0", - "ws": "~5.2.0" + "ws": "~7.2.0" }, "dependencies": { "ansi-styles": { @@ -1330,6 +1331,12 @@ "color-convert": "^2.0.1" } }, + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "dev": true + }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -1355,12 +1362,27 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "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" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "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 + }, "semver": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.2.3.tgz", @@ -1377,13 +1399,10 @@ } }, "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz", + "integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA==", + "dev": true } } }, @@ -1426,9 +1445,9 @@ } }, "@pm2/io": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@pm2/io/-/io-4.3.4.tgz", - "integrity": "sha512-xaPa/aiGNknex4UQq9eQVRW75H3dPuAcZ0/RvGWrC4ICUBqxn0xV7dC6Db9C5aArGKSXXQ7PVtIlOzUIELauRg==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@pm2/io/-/io-4.3.5.tgz", + "integrity": "sha512-CY/a6Nw72vrlp/FPx38l4jfEHp4gNEbo8i+WlSJ2cnWO6VE6CKmnC1zb4yQLvdP8f3EuzzoOBZVq6aGN20M82Q==", "dev": true, "requires": { "@opencensus/core": "0.0.9", @@ -1480,16 +1499,16 @@ } }, "@pm2/js-api": { - "version": "0.5.63", - "resolved": "https://registry.npmjs.org/@pm2/js-api/-/js-api-0.5.63.tgz", - "integrity": "sha512-V0e5fVFEY5jxF6sH2ona3WVVbMlYc5U+F8v6g1UQXg9E8Ao2X7Q1XBmgmhtf1k8hnPvW7ufDhGe6dUok1LPHmA==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@pm2/js-api/-/js-api-0.6.0.tgz", + "integrity": "sha512-ZgM/0yI8s3FRyxP01wI5UzDrVTecS/SmD98z25C9fsHo2Wz3JB1DtS4uIBlPopq2/R5HIQynTUJPDNn4qo1d/Q==", "dev": true, "requires": { "async": "^2.6.3", "axios": "^0.19.0", - "debug": "^2.6.8", - "eventemitter2": "^4.1.0", - "ws": "^3.0.0" + "debug": "~3.2.6", + "eventemitter2": "^6.3.1", + "ws": "^7.0.0" }, "dependencies": { "axios": { @@ -1501,10 +1520,31 @@ "follow-redirects": "1.5.10" } }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, "eventemitter2": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-4.1.2.tgz", - "integrity": "sha1-DhqEd6+CGm7zmVsxG/dMI6UkfxU=", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.3.1.tgz", + "integrity": "sha512-cxfu3g0IBn/JEhAPV33NZTi8llQQ5j62D0Yf4ir1U9uQ1DlRZLL3Hh2E/+TWDprSy4BETWvrGBZMUexuC2b6Lw==", + "dev": true + }, + "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 + }, + "ws": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz", + "integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA==", "dev": true } } @@ -1754,9 +1794,9 @@ } }, "@types/node": { - "version": "12.12.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.36.tgz", - "integrity": "sha512-hmmypvyO/uTLFYCYu6Hlb3ydeJ11vXRxg8/WJ0E3wvwmPO0y47VqnfmXFVuWlysO0Zyj+je1Y33rQeuYkZ51GQ==", + "version": "12.12.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.37.tgz", + "integrity": "sha512-4mXKoDptrXAwZErQHrLzpe0FN/0Wmf5JRniSVIdwUrtDf9wnmEV1teCNLBo/TwuXhkK/bVegoEn/wmb+x0AuPg==", "dev": true }, "eth-lib": { @@ -1805,9 +1845,9 @@ }, "dependencies": { "@types/node": { - "version": "10.17.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.20.tgz", - "integrity": "sha512-XgDgo6W10SeGEAM0k7FosJpvLCynOTYns4Xk3J5HGrA+UI/bKZ30PGMzOP5Lh2zs4259I71FSYLAtjnx3qhObw==", + "version": "10.17.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.21.tgz", + "integrity": "sha512-PQKsydPxYxF1DsAFWmunaxd3sOi3iMt6Zmx/tgaagHYmwJ/9cRH91hQkeJZaUGWbvn0K5HlSVEXkn5U/llWPpQ==", "dev": true } } @@ -1917,9 +1957,9 @@ }, "dependencies": { "@types/node": { - "version": "10.17.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.20.tgz", - "integrity": "sha512-XgDgo6W10SeGEAM0k7FosJpvLCynOTYns4Xk3J5HGrA+UI/bKZ30PGMzOP5Lh2zs4259I71FSYLAtjnx3qhObw==", + "version": "10.17.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.21.tgz", + "integrity": "sha512-PQKsydPxYxF1DsAFWmunaxd3sOi3iMt6Zmx/tgaagHYmwJ/9cRH91hQkeJZaUGWbvn0K5HlSVEXkn5U/llWPpQ==", "dev": true }, "elliptic": { @@ -2194,9 +2234,9 @@ "dev": true }, "@types/node": { - "version": "13.13.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.1.tgz", - "integrity": "sha512-uysqysLJ+As9jqI5yqjwP3QJrhOcUwBjHUlUxPxjbplwKoILvXVsmYWEhfmAQlrPfbRZmhJB007o4L9sKqtHqQ==" + "version": "13.13.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.4.tgz", + "integrity": "sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA==" }, "@types/web3": { "version": "1.2.2", @@ -3366,54 +3406,65 @@ "restore-cursor": "^3.1.0" } }, - "cli-table-redemption": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli-table-redemption/-/cli-table-redemption-1.0.1.tgz", - "integrity": "sha512-SjVCciRyx01I4azo2K2rcc0NP/wOceXGzG1ZpYkEulbbIxDA/5YWv0oxG2HtQ4v8zPC6bgbRI7SbNaTZCxMNkg==", + "cli-tableau": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cli-tableau/-/cli-tableau-2.0.0.tgz", + "integrity": "sha512-7A9bemSJ87/HMuP53uvSAhEvJ9rfgb+6UmEYii1J5nav63q5VIcxCrv4jA1YiWJQFI73CY+JTl+qt+aQhWQ27Q==", "dev": true, "requires": { - "chalk": "^1.1.3" + "chalk": "3.0.0", + "mocha": "^7.1.1" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "color-name": "~1.1.4" } }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -3684,16 +3735,16 @@ } }, "coveralls": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.11.tgz", - "integrity": "sha512-LZPWPR2NyGKyaABnc49dR0fpeP6UqhvGq4B5nUrTQ1UBy55z96+ga7r+/ChMdMJUwBgyJDXBi88UBgz2rs9IiQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.0.tgz", + "integrity": "sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ==", "dev": true, "requires": { "js-yaml": "^3.13.1", "lcov-parse": "^1.0.0", "log-driver": "^1.2.7", "minimist": "^1.2.5", - "request": "^2.88.0" + "request": "^2.88.2" } }, "create-ecdh": { @@ -3799,9 +3850,9 @@ "dev": true }, "dayjs": { - "version": "1.8.24", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.24.tgz", - "integrity": "sha512-bImQZbBv86zcOWOq6fLg7r4aqMx8fScdmykA7cSh+gH1Yh8AM0Dbw0gHYrsOrza6oBBnkK+/OaR+UAa9UsMrDw==", + "version": "1.8.25", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.25.tgz", + "integrity": "sha512-Pk36juDfQQGDCgr0Lqd1kw15w3OS6xt21JaLPE3lCfsEf8KrERGwDNwvK1tRjrjqFC0uZBJncT4smZQ4F+uV5g==", "dev": true }, "death": { @@ -5574,9 +5625,9 @@ } }, "ethers": { - "version": "4.0.46", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.46.tgz", - "integrity": "sha512-/dPMzzpInhtiip4hKFvsDiJKeRk64IhyA+Po7CtNXneQFSOCYXg8eBFt+jXbxUQyApgWnWOtYxWdfn9+CvvxDA==", + "version": "4.0.47", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.47.tgz", + "integrity": "sha512-hssRYhngV4hiDNeZmVU/k5/E8xmLG8UpcNUzg6mb7lqhgpFPH/t7nuv20RjRrEf0gblzvi2XwR5Te+V3ZFc9pQ==", "requires": { "aes-js": "3.0.0", "bn.js": "^4.4.0", @@ -7774,9 +7825,9 @@ } }, "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, "graceful-readlink": { "version": "1.0.1", @@ -7855,23 +7906,6 @@ "function-bind": "^1.1.1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -8445,9 +8479,9 @@ } }, "is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" }, "is-glob": { "version": "4.0.1", @@ -8537,9 +8571,9 @@ } }, "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", "dev": true }, "is-regex": { @@ -9403,16 +9437,16 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" }, "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "requires": { - "mime-db": "1.43.0" + "mime-db": "1.44.0" } }, "mimic-fn": { @@ -9510,9 +9544,9 @@ } }, "mocha": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.1.tgz", - "integrity": "sha512-3qQsu3ijNS3GkWcccT5Zw0hf/rWvu1fTN9sPvEd81hlwsr30GX2GcDSSoBxo24IR8FelmrAydGC6/1J5QQP4WA==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.2.tgz", + "integrity": "sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA==", "dev": true, "requires": { "ansi-colors": "3.2.3", @@ -9528,7 +9562,7 @@ "js-yaml": "3.13.1", "log-symbols": "3.0.0", "minimatch": "3.0.4", - "mkdirp": "0.5.3", + "mkdirp": "0.5.5", "ms": "2.1.1", "node-environment-flags": "1.0.6", "object.assign": "4.1.0", @@ -9633,9 +9667,9 @@ } }, "fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", "dev": true, "optional": true }, @@ -9706,9 +9740,9 @@ } }, "mkdirp": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", - "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { "minimist": "^1.2.5" @@ -9842,9 +9876,9 @@ } }, "mock-fs": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.11.0.tgz", - "integrity": "sha512-Yp4o3/ZA15wsXqJTT+R+9w2AYIkD1i80Lds47wDbuUhOvQvm+O2EfjFZSz0pMgZZSPHRhGxgcd2+GL4+jZMtdw==" + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.12.0.tgz", + "integrity": "sha512-/P/HtrlvBxY4o/PzXY9cCNBrdylDNxg7gnrv2sMNxj+UJ2m8jSpl0/A6fuJeNAWr99ZvGWH8XCbE0vmnM5KupQ==" }, "module-details-from-path": { "version": "1.0.3", @@ -9897,9 +9931,9 @@ "dev": true }, "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" }, "nano-json-stream-parser": { "version": "0.1.2", @@ -10591,25 +10625,25 @@ } }, "pm2": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/pm2/-/pm2-4.3.1.tgz", - "integrity": "sha512-EW/SRb5DTpvLjAy4b8lMvBgTZSgXOgu6SHC+BX5NKjq+QRYXRBK/H5gwiksGZpOuhNJ16vZEUmNYBNpXkZgiqQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/pm2/-/pm2-4.4.0.tgz", + "integrity": "sha512-uEY3ShP5O5d7VBx4r0QhVjWAgjyhazenIl0fhxyVr+aDMWSa3hpD5RpvkGJMiX8z3nDrBBWCSU7TYth1sdbJkA==", "dev": true, "requires": { - "@pm2/agent": "~1.0.0", - "@pm2/io": "~4.3.4", - "@pm2/js-api": "~0.5.6", + "@pm2/agent": "~1.0.2", + "@pm2/io": "~4.3.5", + "@pm2/js-api": "~0.6.0", "@pm2/pm2-version-check": "^1.0.3", "async": "~3.2.0", "blessed": "0.1.81", "chalk": "3.0.0", "chokidar": "^3.3.0", - "cli-table-redemption": "1.0.1", + "cli-tableau": "^2.0.0", "commander": "2.15.1", "cron": "1.8.2", - "dayjs": "1.8.24", + "dayjs": "~1.8.25", "debug": "4.1.1", - "enquirer": "^2.3.2", + "enquirer": "2.3.5", "eventemitter2": "5.0.1", "fclone": "1.0.11", "mkdirp": "1.0.4", @@ -10622,7 +10656,6 @@ "promptly": "^2", "ps-list": "6.3.0", "semver": "^7.2", - "shelljs": "0.8.3", "source-map-support": "0.5.16", "sprintf-js": "1.1.2", "systeminformation": "^4.23.3", @@ -10682,9 +10715,9 @@ } }, "chokidar": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", - "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", + "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", "dev": true, "requires": { "anymatch": "~3.1.1", @@ -10694,7 +10727,7 @@ "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.3.0" + "readdirp": "~3.4.0" } }, "color-convert": { @@ -10737,9 +10770,9 @@ } }, "fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", "dev": true, "optional": true }, @@ -10780,12 +10813,12 @@ "dev": true }, "readdirp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", - "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "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.0.7" + "picomatch": "^2.2.1" } }, "semver": { @@ -11482,9 +11515,9 @@ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, "resolve": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.1.tgz", - "integrity": "sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "requires": { "path-parse": "^1.0.6" } @@ -11575,13 +11608,10 @@ } }, "run-async": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", - "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true }, "run-parallel": { "version": "1.1.9", @@ -11977,9 +12007,9 @@ "dev": true }, "shelljs": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", - "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", "dev": true, "requires": { "glob": "^7.0.0", @@ -12410,9 +12440,9 @@ }, "dependencies": { "@types/node": { - "version": "12.12.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.36.tgz", - "integrity": "sha512-hmmypvyO/uTLFYCYu6Hlb3ydeJ11vXRxg8/WJ0E3wvwmPO0y47VqnfmXFVuWlysO0Zyj+je1Y33rQeuYkZ51GQ==", + "version": "12.12.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.37.tgz", + "integrity": "sha512-4mXKoDptrXAwZErQHrLzpe0FN/0Wmf5JRniSVIdwUrtDf9wnmEV1teCNLBo/TwuXhkK/bVegoEn/wmb+x0AuPg==", "dev": true }, "eth-lib": { @@ -12445,9 +12475,9 @@ }, "dependencies": { "@types/node": { - "version": "10.17.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.20.tgz", - "integrity": "sha512-XgDgo6W10SeGEAM0k7FosJpvLCynOTYns4Xk3J5HGrA+UI/bKZ30PGMzOP5Lh2zs4259I71FSYLAtjnx3qhObw==", + "version": "10.17.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.21.tgz", + "integrity": "sha512-PQKsydPxYxF1DsAFWmunaxd3sOi3iMt6Zmx/tgaagHYmwJ/9cRH91hQkeJZaUGWbvn0K5HlSVEXkn5U/llWPpQ==", "dev": true }, "elliptic": { @@ -13205,9 +13235,9 @@ }, "dependencies": { "@types/node": { - "version": "10.17.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.20.tgz", - "integrity": "sha512-XgDgo6W10SeGEAM0k7FosJpvLCynOTYns4Xk3J5HGrA+UI/bKZ30PGMzOP5Lh2zs4259I71FSYLAtjnx3qhObw==", + "version": "10.17.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.21.tgz", + "integrity": "sha512-PQKsydPxYxF1DsAFWmunaxd3sOi3iMt6Zmx/tgaagHYmwJ/9cRH91hQkeJZaUGWbvn0K5HlSVEXkn5U/llWPpQ==", "dev": true } } @@ -13524,9 +13554,9 @@ } }, "source-map-support": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.17.tgz", - "integrity": "sha512-bwdKOBZ5L0gFRh4KOxNap/J/MpvX9Yxsq9lFDx65s3o7F/NiHy7JRaGIS8MwW6tZPAq9UXE207Il0cfcb5yu/Q==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -13860,9 +13890,9 @@ } }, "systeminformation": { - "version": "4.23.5", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-4.23.5.tgz", - "integrity": "sha512-Zxd1wxN8KigQsDhZupVNAyHnkl+ombejuLpNhJ+LNezMxTLn7nBx9HNAIWUJnhAnSS0ZElQLQ1muqgnwbhgOHg==", + "version": "4.23.9", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-4.23.9.tgz", + "integrity": "sha512-GdBWl5kSbFVFbd56TqwoUX6HMsq9OgkC8D/Ght8o4LyEPYSQv+jWMlvvCVbTJE3RUk5tFgV6LIy9aiXyOg5cFA==", "dev": true, "optional": true }, @@ -14313,9 +14343,9 @@ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" }, "unbzip2-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.1.tgz", - "integrity": "sha512-sgDYfSDPMsA4Hr2/w7vOlrJBlwzmyakk1+hW8ObLvxSp0LA36LcL2XItGvOT3OSblohSdevMuT8FQjLsqyy4sA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.2.tgz", + "integrity": "sha512-pZMVAofMrrHX6Ik39hCk470kulCbmZ2SWfQLPmTWqfJV/oUm0gn1CblvHdUu4+54Je6Jq34x8kY6XjTy6dMkOg==", "requires": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -14779,9 +14809,9 @@ }, "dependencies": { "@types/node": { - "version": "10.17.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.20.tgz", - "integrity": "sha512-XgDgo6W10SeGEAM0k7FosJpvLCynOTYns4Xk3J5HGrA+UI/bKZ30PGMzOP5Lh2zs4259I71FSYLAtjnx3qhObw==" + "version": "10.17.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.21.tgz", + "integrity": "sha512-PQKsydPxYxF1DsAFWmunaxd3sOi3iMt6Zmx/tgaagHYmwJ/9cRH91hQkeJZaUGWbvn0K5HlSVEXkn5U/llWPpQ==" }, "elliptic": { "version": "6.3.3", diff --git a/package.json b/package.json index 728efe5f..cb5a4f66 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@daostack/arc-experimental", - "version": "0.1.1-rc.15", + "version": "0.1.1-rc.16", "description": "A platform for building DAOs", "files": [ "contracts/", diff --git a/test/fundingrequest.js b/test/fundingrequest.js index 2b89eb69..64098a88 100644 --- a/test/fundingrequest.js +++ b/test/fundingrequest.js @@ -22,7 +22,7 @@ const setupJoinAndQuit = async function( _minFeeToJoin, _memberReputation, _fundingGoal, - _fundingGoalDeadLine + _fundingGoalDeadline ) { var joinAndQuitParams = new JoinAndQuitParams(); @@ -39,7 +39,7 @@ const setupJoinAndQuit = async function( _minFeeToJoin, _memberReputation, _fundingGoal, - _fundingGoalDeadLine) + _fundingGoalDeadline) .encodeABI(); } else { joinAndQuitParams.votingMachine = await helpers.setupAbsoluteVote(helpers.NULL_ADDRESS,50); @@ -54,7 +54,7 @@ const setupJoinAndQuit = async function( _minFeeToJoin, _memberReputation, _fundingGoal, - _fundingGoalDeadLine) + _fundingGoalDeadline) .encodeABI(); } return joinAndQuitParams; @@ -106,7 +106,7 @@ const setup = async function (accounts, minFeeToJoin = 100, memberReputation = 100, fundingGoal = 1000, - fundingGoalDeadLine = 3000) { + fundingGoalDeadline = 3000) { var testSetup = new helpers.TestSetup(); testSetup.standardTokenMock = await ERC20Mock.new(accounts[0],100000); registration = await helpers.registerImplementation(); @@ -122,7 +122,7 @@ const setup = async function (accounts, accounts[2]], [1000,0,0], testSetup.reputationArray); - testSetup.fundingGoalDeadLine = (await web3.eth.getBlock("latest")).timestamp + fundingGoalDeadLine; + testSetup.fundingGoalDeadline = (await web3.eth.getBlock("latest")).timestamp + fundingGoalDeadline; testSetup.minFeeToJoin = minFeeToJoin; testSetup.memberReputation = memberReputation; testSetup.fundingGoal = fundingGoal; @@ -141,7 +141,7 @@ const setup = async function (accounts, minFeeToJoin, memberReputation, fundingGoal, - testSetup.fundingGoalDeadLine); + testSetup.fundingGoalDeadline); testSetup.fundingRequestParams = await setupFundingRequest( accounts, diff --git a/test/joinandquit.js b/test/joinandquit.js index 40c12b37..c9207aeb 100644 --- a/test/joinandquit.js +++ b/test/joinandquit.js @@ -35,7 +35,7 @@ const setupJoinAndQuit = async function( _minFeeToJoin, _memberReputation, _fundingGoal, - _fundingGoalDeadLine + _fundingGoalDeadline ) { var joinAndQuitParams = new JoinAndQuitParams(); @@ -52,7 +52,7 @@ const setupJoinAndQuit = async function( _minFeeToJoin, _memberReputation, _fundingGoal, - _fundingGoalDeadLine) + _fundingGoalDeadline) .encodeABI(); } else { joinAndQuitParams.votingMachine = await helpers.setupAbsoluteVote(helpers.NULL_ADDRESS,50); @@ -67,7 +67,7 @@ const setupJoinAndQuit = async function( _minFeeToJoin, _memberReputation, _fundingGoal, - _fundingGoalDeadLine) + _fundingGoalDeadline) .encodeABI(); } return joinAndQuitParams; @@ -80,7 +80,7 @@ const setup = async function (accounts, minFeeToJoin = 100, memberReputation = 100, fundingGoal = 1000, - fundingGoalDeadLine = 3000) { + fundingGoalDeadline = 3000) { var testSetup = new helpers.TestSetup(); testSetup.standardTokenMock = await ERC20Mock.new(accounts[0],100000); registration = await helpers.registerImplementation(); @@ -92,7 +92,7 @@ const setup = async function (accounts, [accounts[2]], [0], testSetup.reputationArray); - testSetup.fundingGoalDeadLine = (await web3.eth.getBlock("latest")).timestamp + fundingGoalDeadLine; + testSetup.fundingGoalDeadline = (await web3.eth.getBlock("latest")).timestamp + fundingGoalDeadline; testSetup.minFeeToJoin = minFeeToJoin; testSetup.memberReputation = memberReputation; testSetup.fundingGoal = fundingGoal; @@ -111,7 +111,7 @@ const setup = async function (accounts, minFeeToJoin, memberReputation, fundingGoal, - testSetup.fundingGoalDeadLine); + testSetup.fundingGoalDeadline); var permissions = "0x00000000"; var tx = await registration.daoFactory.setSchemes( @@ -131,7 +131,7 @@ contract('JoinAndQuit', accounts => { it("initialize", async function() { var testSetup = await setup(accounts); assert.equal(await testSetup.joinAndQuit.votingMachine(),testSetup.joinAndQuitParams.votingMachine.absoluteVote.address); - assert.equal(await testSetup.joinAndQuit.fundingGoalDeadLine(),testSetup.fundingGoalDeadLine); + assert.equal(await testSetup.joinAndQuit.fundingGoalDeadline(),testSetup.fundingGoalDeadline); }); it("propose log", async function() { @@ -185,18 +185,47 @@ contract('JoinAndQuit', accounts => { } }); - it("propose cannot add a member twice", async function() { + + it("propose cannot add a member if already is a candidate", async function() { + var testSetup = await setup(accounts); + + await testSetup.standardTokenMock.approve(testSetup.joinAndQuit.address,testSetup.minFeeToJoin*2); + await testSetup.joinAndQuit.proposeToJoin( + "description-hash", + testSetup.minFeeToJoin); + + try { + await testSetup.joinAndQuit.proposeToJoin( + "description-hash", + testSetup.minFeeToJoin); + assert(false, 'proposer already is a candidate'); + } catch (ex) { + helpers.assertVMException(ex); + } + }); + + it("propose cannot add a member if member allready has reputation", async function() { var testSetup = await setup(accounts); - await testSetup.standardTokenMock.approve(testSetup.joinAndQuit.address,testSetup.minFeeToJoin); - await testSetup.joinAndQuit.proposeToJoin( - "description-hash", - testSetup.minFeeToJoin); + var candidate = accounts[3]; + await testSetup.standardTokenMock.approve(testSetup.joinAndQuit.address, + testSetup.minFeeToJoin*2, + {from:candidate}); + var tx = await testSetup.joinAndQuit.proposeToJoin( + "description-hash", + testSetup.minFeeToJoin, + {from:candidate}); + //Vote with reputation to trigger execution + var proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1); + 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", - testSetup.minFeeToJoin); - assert(false, 'cannot add a member twice'); + await testSetup.joinAndQuit.proposeToJoin( + "description-hash", + testSetup.minFeeToJoin, + {from:candidate}); + assert(false, 'proposer already have reputation'); } catch (ex) { helpers.assertVMException(ex); } @@ -517,7 +546,7 @@ contract('JoinAndQuit', accounts => { let avatar = await Avatar.at(testSetup.org.avatar.address); let key = "FUNDED_BEFORE_DEADLINE"; assert.equal(await avatar.db(key),""); - await helpers.increaseTime(testSetup.fundingGoalDeadLine); + await helpers.increaseTime(testSetup.fundingGoalDeadline); await addMember(accounts,testSetup,testSetup.fundingGoal,accounts[3]); assert.equal(await avatar.db(key),""); }); @@ -527,8 +556,38 @@ contract('JoinAndQuit', accounts => { let avatar = await Avatar.at(testSetup.org.avatar.address); let key = "FUNDED_BEFORE_DEADLINE"; assert.equal(await avatar.db(key),""); - await helpers.increaseTime(testSetup.fundingGoalDeadLine); + await helpers.increaseTime(testSetup.fundingGoalDeadline); await addMember(accounts,testSetup,testSetup.fundingGoal,accounts[3]); assert.equal(await avatar.db(key),""); }); + + + it("can fund the dao directly and set the goal", async function() { + var testSetup = await setup(accounts); + await testSetup.standardTokenMock.approve(testSetup.joinAndQuit.address,testSetup.fundingGoal,{from:accounts[3]}); + let avatar = await Avatar.at(testSetup.org.avatar.address); + let key = await testSetup.joinAndQuit.FUNDED_BEFORE_DEADLINE_KEY(); + await testSetup.joinAndQuit.FUNDED_BEFORE_DEADLINE_VALUE(); + assert.equal(await avatar.db(key),""); + await testSetup.standardTokenMock.transfer(testSetup.org.avatar.address,testSetup.fundingGoal-1); + var tx = await testSetup.joinAndQuit.setFundingGoalReachedFlag(); + await testSetup.joinAndQuit.getPastEvents('FundedBeforeDeadline', { + fromBlock: tx.blockNumber, + toBlock: 'latest' + }) + .then(function(events){ + assert.equal(events.length,0); + }); + //now fill up the funding goal.. + await testSetup.standardTokenMock.transfer(testSetup.org.avatar.address,1); + tx = await testSetup.joinAndQuit.setFundingGoalReachedFlag(); + await testSetup.joinAndQuit.getPastEvents('FundedBeforeDeadline', { + fromBlock: tx.blockNumber, + toBlock: 'latest' + }) + .then(function(events){ + assert.equal(events[0].event,"FundedBeforeDeadline"); + }); + }); + });