@gooddollar/goodcollective-contracts 1.3.1 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/contracts/DirectPayments/DirectPaymentsFactory.sol/DirectPaymentsFactory.dbg.json +4 -0
- package/artifacts/contracts/DirectPayments/DirectPaymentsFactory.sol/DirectPaymentsFactory.json +995 -0
- package/artifacts/contracts/DirectPayments/DirectPaymentsLibrary.sol/DirectPaymentsLibrary.dbg.json +4 -0
- package/artifacts/contracts/DirectPayments/DirectPaymentsLibrary.sol/DirectPaymentsLibrary.json +113 -0
- package/artifacts/contracts/DirectPayments/DirectPaymentsPool.sol/DirectPaymentsPool.dbg.json +4 -0
- package/artifacts/contracts/DirectPayments/DirectPaymentsPool.sol/DirectPaymentsPool.json +2210 -0
- package/artifacts/contracts/DirectPayments/DirectPaymentsPool.sol/IIdentityV2.dbg.json +4 -0
- package/artifacts/contracts/DirectPayments/DirectPaymentsPool.sol/IIdentityV2.json +30 -0
- package/artifacts/contracts/DirectPayments/DirectPaymentsPool.sol/IMembersValidator.dbg.json +4 -0
- package/artifacts/contracts/DirectPayments/DirectPaymentsPool.sol/IMembersValidator.json +45 -0
- package/artifacts/contracts/DirectPayments/ProvableNFT.sol/ProvableNFT.dbg.json +4 -0
- package/artifacts/contracts/DirectPayments/ProvableNFT.sol/ProvableNFT.json +1187 -0
- package/artifacts/contracts/GoodCollective/GoodCollectiveSuperApp.sol/GoodCollectiveSuperApp.dbg.json +4 -0
- package/artifacts/contracts/GoodCollective/GoodCollectiveSuperApp.sol/GoodCollectiveSuperApp.json +831 -0
- package/artifacts/contracts/GoodCollective/IGoodCollectiveSuperApp.sol/IGoodCollectiveSuperApp.dbg.json +4 -0
- package/artifacts/contracts/GoodCollective/IGoodCollectiveSuperApp.sol/IGoodCollectiveSuperApp.json +42 -0
- package/artifacts/contracts/GoodCollective/IGoodCollectiveSuperApp.sol/IRegistry.dbg.json +4 -0
- package/artifacts/contracts/GoodCollective/IGoodCollectiveSuperApp.sol/IRegistry.json +61 -0
- package/artifacts/contracts/GoodCollective/SuperAppBaseFlow.sol/IRegisterSuperapp.dbg.json +4 -0
- package/artifacts/contracts/GoodCollective/SuperAppBaseFlow.sol/IRegisterSuperapp.json +47 -0
- package/artifacts/contracts/GoodCollective/SuperAppBaseFlow.sol/SuperAppBaseFlow.dbg.json +4 -0
- package/artifacts/contracts/GoodCollective/SuperAppBaseFlow.sol/SuperAppBaseFlow.json +320 -0
- package/artifacts/contracts/Interfaces.sol/IIdentityV2.dbg.json +4 -0
- package/artifacts/contracts/Interfaces.sol/IIdentityV2.json +30 -0
- package/artifacts/contracts/Interfaces.sol/IMembersValidator.dbg.json +4 -0
- package/artifacts/contracts/Interfaces.sol/IMembersValidator.json +45 -0
- package/artifacts/contracts/UBI/UBIPool.sol/UBIPool.dbg.json +4 -0
- package/artifacts/contracts/UBI/UBIPool.sol/UBIPool.json +2078 -0
- package/artifacts/contracts/UBI/UBIPoolFactory.sol/UBIPoolFactory.dbg.json +4 -0
- package/artifacts/contracts/UBI/UBIPoolFactory.sol/UBIPoolFactory.json +1011 -0
- package/artifacts/contracts/test/HelperLibraryTest.sol/HelperLibraryTest.dbg.json +4 -0
- package/artifacts/contracts/test/HelperLibraryTest.sol/HelperLibraryTest.json +90 -0
- package/artifacts/contracts/utils/HelperLibrary.sol/HelperLibrary.dbg.json +4 -0
- package/artifacts/contracts/utils/HelperLibrary.sol/HelperLibrary.json +117 -0
- package/artifacts/contracts/utils/Recover.sol/Recover.dbg.json +4 -0
- package/artifacts/contracts/utils/Recover.sol/Recover.json +120 -0
- package/artifacts/contracts/utils/SwapRouterMock.sol/SwapRouterMock.dbg.json +4 -0
- package/artifacts/contracts/utils/SwapRouterMock.sol/SwapRouterMock.json +119 -0
- package/contracts/DirectPayments/DirectPaymentsFactory.sol +13 -1
- package/contracts/DirectPayments/DirectPaymentsPool.sol +22 -0
- package/contracts/UBI/UBIPool.sol +62 -18
- package/contracts/UBI/UBIPoolFactory.sol +13 -1
- package/contracts/utils/Recover.sol +16 -0
- package/package.json +3 -5
- package/releases/deployment.json +308 -134
- package/typechain-types/contracts/DirectPayments/DirectPaymentsFactory.ts +54 -0
- package/typechain-types/contracts/DirectPayments/DirectPaymentsLibrary.sol/DirectPayemntsLibrary.ts +77 -0
- package/typechain-types/contracts/DirectPayments/DirectPaymentsLibrary.sol/DirectPaymentsLibrary.ts +77 -0
- package/typechain-types/contracts/DirectPayments/DirectPaymentsLibrary.sol/index.ts +5 -0
- package/typechain-types/contracts/DirectPayments/DirectPaymentsPool.sol/DirectPaymentsPool.ts +37 -0
- package/typechain-types/contracts/UBI/MultiClaimModule.sol/IClaimable.ts +92 -0
- package/typechain-types/contracts/UBI/MultiClaimModule.sol/IModule.ts +196 -0
- package/typechain-types/contracts/UBI/MultiClaimModule.sol/MultiClaimModule.ts +242 -0
- package/typechain-types/contracts/UBI/MultiClaimModule.sol/index.ts +6 -0
- package/typechain-types/contracts/UBI/UBIPool.ts +37 -0
- package/typechain-types/contracts/UBI/UBIPoolFactory.ts +54 -0
- package/typechain-types/contracts/utils/Recover.ts +263 -0
- package/typechain-types/contracts/utils/index.ts +1 -0
- package/typechain-types/factories/contracts/DirectPayments/DirectPaymentsFactory__factory.ts +33 -1
- package/typechain-types/factories/contracts/DirectPayments/DirectPaymentsLibrary.sol/DirectPayemntsLibrary__factory.ts +96 -0
- package/typechain-types/factories/contracts/DirectPayments/DirectPaymentsLibrary.sol/DirectPaymentsLibrary__factory.ts +96 -0
- package/typechain-types/factories/contracts/DirectPayments/DirectPaymentsLibrary.sol/index.ts +5 -0
- package/typechain-types/factories/contracts/DirectPayments/DirectPaymentsLibrary__factory.ts +1 -1
- package/typechain-types/factories/contracts/DirectPayments/DirectPaymentsPool.sol/DirectPaymentsPool__factory.ts +24 -1
- package/typechain-types/factories/contracts/UBI/MultiClaimModule.sol/IClaimable__factory.ts +33 -0
- package/typechain-types/factories/contracts/UBI/MultiClaimModule.sol/IModule__factory.ts +84 -0
- package/typechain-types/factories/contracts/UBI/MultiClaimModule.sol/MultiClaimModule__factory.ts +150 -0
- package/typechain-types/factories/contracts/UBI/MultiClaimModule.sol/index.ts +6 -0
- package/typechain-types/factories/contracts/UBI/UBIPoolFactory__factory.ts +33 -1
- package/typechain-types/factories/contracts/UBI/UBIPool__factory.ts +24 -1
- package/typechain-types/factories/contracts/utils/Recover__factory.ts +172 -0
- package/typechain-types/factories/contracts/utils/index.ts +1 -0
- package/typechain-types/hardhat.d.ts +9 -0
- package/typechain-types/index.ts +2 -0
|
@@ -5,7 +5,6 @@ import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils
|
|
|
5
5
|
import { IERC721Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol";
|
|
6
6
|
import { SafeERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol";
|
|
7
7
|
import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
|
|
8
|
-
import { IERC721ReceiverUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol";
|
|
9
8
|
|
|
10
9
|
import "../GoodCollective/GoodCollectiveSuperApp.sol";
|
|
11
10
|
import "./UBIPoolFactory.sol";
|
|
@@ -23,6 +22,7 @@ contract UBIPool is AccessControlUpgradeable, GoodCollectiveSuperApp, UUPSUpgrad
|
|
|
23
22
|
error EMPTY_MANAGER();
|
|
24
23
|
error MAX_MEMBERS_REACHED();
|
|
25
24
|
error MAX_PERIOD_CLAIMERS_REACHED(uint256 claimers);
|
|
25
|
+
error LENGTH_MISMATCH();
|
|
26
26
|
|
|
27
27
|
bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE");
|
|
28
28
|
bytes32 public constant MEMBER_ROLE = keccak256("MEMBER_ROLE");
|
|
@@ -189,10 +189,8 @@ contract UBIPool is AccessControlUpgradeable, GoodCollectiveSuperApp, UUPSUpgrad
|
|
|
189
189
|
|
|
190
190
|
nextPeriodPool = status.dailyCyclePool;
|
|
191
191
|
nextDailyUbi;
|
|
192
|
-
if (
|
|
193
|
-
|
|
194
|
-
) //start of cycle or first time
|
|
195
|
-
{
|
|
192
|
+
if ((currentDayInCycle() + 1) >= status.currentCycleLength || shouldStartEarlyCycle) {
|
|
193
|
+
//start of cycle or first time
|
|
196
194
|
nextPeriodPool = currentBalance / ubiSettings.cycleLengthDays;
|
|
197
195
|
newCycle = true;
|
|
198
196
|
}
|
|
@@ -271,38 +269,83 @@ contract UBIPool is AccessControlUpgradeable, GoodCollectiveSuperApp, UUPSUpgrad
|
|
|
271
269
|
}
|
|
272
270
|
|
|
273
271
|
/**
|
|
274
|
-
* @dev
|
|
272
|
+
* @dev Internal function to add a member with validation.
|
|
273
|
+
* Always validates members, even when called by manager.
|
|
275
274
|
* @param member The address of the member to add.
|
|
276
275
|
* @param extraData Additional data to validate the member.
|
|
276
|
+
* @return isMember True if member was added, false if validation failed.
|
|
277
277
|
*/
|
|
278
|
+
function _addMember(address member, bytes memory extraData) internal returns (bool isMember) {
|
|
279
|
+
if (hasRole(MEMBER_ROLE, member)) return true;
|
|
278
280
|
|
|
279
|
-
function addMember(address member, bytes memory extraData) external returns (bool isMember) {
|
|
280
281
|
if (address(settings.uniquenessValidator) != address(0)) {
|
|
281
282
|
address rootAddress = settings.uniquenessValidator.getWhitelistedRoot(member);
|
|
282
|
-
if (rootAddress == address(0))
|
|
283
|
+
if (rootAddress == address(0)) return false;
|
|
283
284
|
}
|
|
284
285
|
|
|
285
|
-
|
|
286
|
+
// Always check membersValidator if it exists, regardless of caller role
|
|
287
|
+
if (address(settings.membersValidator) != address(0)) {
|
|
286
288
|
if (settings.membersValidator.isMemberValid(address(this), msg.sender, member, extraData) == false) {
|
|
287
|
-
|
|
289
|
+
return false;
|
|
288
290
|
}
|
|
289
291
|
}
|
|
290
292
|
// if no members validator then if members only only manager can add members
|
|
291
293
|
else if (ubiSettings.onlyMembers && hasRole(MANAGER_ROLE, msg.sender) == false) {
|
|
292
|
-
|
|
294
|
+
return false;
|
|
293
295
|
}
|
|
294
296
|
|
|
295
297
|
_grantRole(MEMBER_ROLE, member);
|
|
296
298
|
return true;
|
|
297
299
|
}
|
|
298
300
|
|
|
301
|
+
/**
|
|
302
|
+
* @dev Adds a member to the contract.
|
|
303
|
+
* @param member The address of the member to add.
|
|
304
|
+
* @param extraData Additional data to validate the member.
|
|
305
|
+
*/
|
|
306
|
+
function addMember(address member, bytes memory extraData) public returns (bool isMember) {
|
|
307
|
+
bool success = _addMember(member, extraData);
|
|
308
|
+
|
|
309
|
+
if (!success) {
|
|
310
|
+
// Determine the specific error to revert with
|
|
311
|
+
if (address(settings.uniquenessValidator) != address(0)) {
|
|
312
|
+
address rootAddress = settings.uniquenessValidator.getWhitelistedRoot(member);
|
|
313
|
+
if (rootAddress == address(0)) revert NOT_WHITELISTED(member);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
if (address(settings.membersValidator) != address(0) && hasRole(MANAGER_ROLE, msg.sender) == false) {
|
|
317
|
+
revert NOT_MEMBER(member);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
if (ubiSettings.onlyMembers && hasRole(MANAGER_ROLE, msg.sender) == false) {
|
|
321
|
+
revert NOT_MANAGER(member);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
return success;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* @dev Adds multiple members to the pool in a single transaction.
|
|
330
|
+
* Invalid members are skipped instead of causing the transaction to revert.
|
|
331
|
+
* @param members Array of member addresses to add.
|
|
332
|
+
* @param extraData Array of additional validation data for each member.
|
|
333
|
+
*/
|
|
334
|
+
function addMembers(address[] calldata members, bytes[] calldata extraData) external onlyRole(MANAGER_ROLE) {
|
|
335
|
+
if (members.length != extraData.length) revert LENGTH_MISMATCH();
|
|
336
|
+
|
|
337
|
+
for (uint i = 0; i < members.length; i++) {
|
|
338
|
+
_addMember(members[i], extraData[i]);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
299
342
|
function removeMember(address member) external onlyRole(MANAGER_ROLE) {
|
|
300
343
|
_revokeRole(MEMBER_ROLE, member);
|
|
301
344
|
}
|
|
302
345
|
|
|
303
346
|
function _grantRole(bytes32 role, address account) internal virtual override {
|
|
304
347
|
if (role == MEMBER_ROLE && hasRole(MEMBER_ROLE, account) == false) {
|
|
305
|
-
if (ubiSettings.maxMembers > 0 && status.membersCount
|
|
348
|
+
if (ubiSettings.maxMembers > 0 && status.membersCount >= ubiSettings.maxMembers)
|
|
306
349
|
revert MAX_MEMBERS_REACHED();
|
|
307
350
|
registry.addMember(account);
|
|
308
351
|
status.membersCount += 1;
|
|
@@ -357,11 +400,8 @@ contract UBIPool is AccessControlUpgradeable, GoodCollectiveSuperApp, UUPSUpgrad
|
|
|
357
400
|
}
|
|
358
401
|
|
|
359
402
|
function _verifyPoolSettings(PoolSettings memory _poolSettings) internal pure {
|
|
360
|
-
if (
|
|
361
|
-
|
|
362
|
-
address(_poolSettings.uniquenessValidator) == address(0) ||
|
|
363
|
-
address(_poolSettings.rewardToken) == address(0)
|
|
364
|
-
) revert INVALID_0_VALUE();
|
|
403
|
+
if (_poolSettings.manager == address(0) || address(_poolSettings.rewardToken) == address(0))
|
|
404
|
+
revert INVALID_0_VALUE();
|
|
365
405
|
}
|
|
366
406
|
|
|
367
407
|
function estimateNextDailyUBI() public view returns (uint256 nextDailyUbi) {
|
|
@@ -391,7 +431,11 @@ contract UBIPool is AccessControlUpgradeable, GoodCollectiveSuperApp, UUPSUpgrad
|
|
|
391
431
|
}
|
|
392
432
|
|
|
393
433
|
function hasClaimed(address _member) public view returns (bool) {
|
|
394
|
-
address whitelistedRoot =
|
|
434
|
+
address whitelistedRoot = _member;
|
|
435
|
+
if (address(settings.uniquenessValidator) != address(0)) {
|
|
436
|
+
whitelistedRoot = IIdentityV2(settings.uniquenessValidator).getWhitelistedRoot(_member);
|
|
437
|
+
}
|
|
438
|
+
whitelistedRoot = IIdentityV2(settings.uniquenessValidator).getWhitelistedRoot(_member);
|
|
395
439
|
return status.lastClaimed[whitelistedRoot] == getCurrentDay();
|
|
396
440
|
}
|
|
397
441
|
|
|
@@ -32,6 +32,7 @@ contract UBIPoolFactory is AccessControlUpgradeable, UUPSUpgradeable {
|
|
|
32
32
|
event PoolDetailsChanged(address indexed pool, string ipfs);
|
|
33
33
|
event PoolVerifiedChanged(address indexed pool, bool isVerified);
|
|
34
34
|
event UpdatedImpl(address indexed impl);
|
|
35
|
+
event MemberAdded(address indexed member, address indexed pool);
|
|
35
36
|
|
|
36
37
|
struct PoolRegistry {
|
|
37
38
|
string ipfs;
|
|
@@ -170,8 +171,19 @@ contract UBIPoolFactory is AccessControlUpgradeable, UUPSUpgradeable {
|
|
|
170
171
|
feeRecipient = _feeRecipient;
|
|
171
172
|
}
|
|
172
173
|
|
|
173
|
-
function addMember(address account)
|
|
174
|
+
function addMember(address account) public onlyPool {
|
|
175
|
+
_addMemberToRegistry(account);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function _addMemberToRegistry(address account) internal {
|
|
174
179
|
memberPools[account].push(msg.sender);
|
|
180
|
+
emit MemberAdded(account, msg.sender);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function addMembers(address[] calldata members) external onlyPool {
|
|
184
|
+
for (uint i = 0; i < members.length; i++) {
|
|
185
|
+
addMember(members[i]);
|
|
186
|
+
}
|
|
175
187
|
}
|
|
176
188
|
|
|
177
189
|
function removeMember(address member) external onlyPool {
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
pragma solidity >=0.8;
|
|
4
|
+
import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
|
|
5
|
+
import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
|
|
6
|
+
|
|
7
|
+
contract Recover is UUPSUpgradeable {
|
|
8
|
+
function _authorizeUpgrade(address _impl) internal virtual override {
|
|
9
|
+
require(msg.sender == 0x564193644236F6D9f3D3a3209975E51D32050612, "not owner");
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function end() external {
|
|
13
|
+
IERC20Upgradeable gd = IERC20Upgradeable(0x62B8B11039FcfE5aB0C56E502b1C372A3d2a9c7A);
|
|
14
|
+
gd.transfer(0xC1dCdf8E70acB44CDbB688C91A4883Cf9052Ea9c, gd.balanceOf(address(this)));
|
|
15
|
+
}
|
|
16
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gooddollar/goodcollective-contracts",
|
|
3
3
|
"packageManager": "yarn@3.2.1",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.4.1",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"types": "./typechain-types/index.ts",
|
|
7
7
|
"files": [
|
|
@@ -15,9 +15,8 @@
|
|
|
15
15
|
"@nomicfoundation/hardhat-chai-matchers": "^1.0.0",
|
|
16
16
|
"@nomicfoundation/hardhat-network-helpers": "^1.0.0",
|
|
17
17
|
"@nomicfoundation/hardhat-toolbox": "2.*",
|
|
18
|
-
"@nomicfoundation/hardhat-verify": "
|
|
18
|
+
"@nomicfoundation/hardhat-verify": "2",
|
|
19
19
|
"@nomiclabs/hardhat-ethers": "^2.0.0",
|
|
20
|
-
"@nomiclabs/hardhat-etherscan": "^3.0.0",
|
|
21
20
|
"@openzeppelin/contracts": "^4.9.2",
|
|
22
21
|
"@openzeppelin/contracts-upgradeable": "4.8.3",
|
|
23
22
|
"@openzeppelin/hardhat-upgrades": "1.20.0",
|
|
@@ -37,7 +36,6 @@
|
|
|
37
36
|
"graphql": "^16.7.1",
|
|
38
37
|
"hardhat": "^2.26.2",
|
|
39
38
|
"hardhat-abi-exporter": "^2.10.1",
|
|
40
|
-
"hardhat-celo": "^0.0.4",
|
|
41
39
|
"hardhat-contract-sizer": "^2.10.0",
|
|
42
40
|
"hardhat-deploy": "^1.0.4",
|
|
43
41
|
"hardhat-gas-reporter": "^1.0.8",
|
|
@@ -69,4 +67,4 @@
|
|
|
69
67
|
"test:setup": "yarn exec ./scripts/deployContracts.sh",
|
|
70
68
|
"verify": "npx hardhat run scripts/verify.ts --network ${0}"
|
|
71
69
|
}
|
|
72
|
-
}
|
|
70
|
+
}
|