@gooddollar/goodprotocol 2.0.25-beta.1 → 2.0.25-beta.3
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/abis/FuseStakingV3.min.json +1 -1
- package/artifacts/abis/InvitesV2.min.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/Avatar.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/Controller.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/GlobalConstraintInterface.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/IntVoteInterface.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/ReputationInterface.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/SchemeRegistrar.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/AggregatorV3Interface.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ERC20.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IAaveIncentivesController.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IAdminWallet.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IDonationStaking.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IERC2917.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IFirstClaimPool.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IGoodDollar.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IGoodStaking.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IHasRouter.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IIdentity.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IIdentityV2.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IMultichainRouter.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/INameService.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IUBIScheme.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ProxyAdmin.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/Reserve.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/Uniswap.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/UniswapFactory.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/UniswapPair.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/cERC20.dbg.json +1 -1
- package/artifacts/contracts/fuseFaucet/Faucet.sol/Faucet.dbg.json +1 -1
- package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
- package/artifacts/contracts/fuseFaucet/FuseFaucetV2.sol/FuseFaucetV2.dbg.json +1 -1
- package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
- package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
- package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
- package/artifacts/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking.dbg.json +1 -1
- package/artifacts/contracts/governance/GoodDollarStaking.sol/IGovernanceStaking.dbg.json +1 -1
- package/artifacts/contracts/governance/GoodDollarStaking.sol/IStakingUpgrade.dbg.json +1 -1
- package/artifacts/contracts/governance/GoodDollarStaking.sol/RewardsMinter.dbg.json +1 -1
- package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.dbg.json +1 -1
- package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
- package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
- package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
- package/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.dbg.json +1 -1
- package/artifacts/contracts/invite/InvitesFuseV2.sol/InvitesFuseV2.dbg.json +1 -1
- package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.dbg.json +1 -1
- package/artifacts/contracts/invite/InvitesV2.sol/InvitesV2.dbg.json +1 -1
- package/artifacts/contracts/invite/InvitesV2.sol/InvitesV2.json +15 -2
- package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/AaveUSDMockOracle.sol/AaveUSDMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/BatUSDMockOracle.sol/BatUSDMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/CompUsdMockOracle.sol/CompUSDMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/DaiEthPriceMockOracle.sol/DaiEthPriceMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/DistributionBridgeMock.sol/DistributionBridgeMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.dbg.json +1 -1
- package/artifacts/contracts/mocks/EthUSDMockOracle.sol/EthUSDMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/FeesFormularMock.sol/FeesFormulaMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/GasPriceMockOracle.sol/GasPriceMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodDollarStakingMock.sol/GoodDollarStakingMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/IdentityMock.sol/IdentityMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/MultichainRouterMock.sol/IWrapper.dbg.json +1 -1
- package/artifacts/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/OverMintTester.sol/IGoodDollarStakingTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
- package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
- package/artifacts/contracts/mocks/PayableMock.sol/PayableMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/StakingMockFixedAPY.sol/StakingMockFixedAPY.dbg.json +1 -1
- package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.dbg.json +1 -1
- package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
- package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.dbg.json +1 -1
- package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
- package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
- package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
- package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
- package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
- package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.dbg.json +1 -1
- package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.dbg.json +1 -1
- package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.json +7 -2
- package/artifacts/contracts/staking/FuseStakingV3.sol/IConsensus.dbg.json +1 -1
- package/artifacts/contracts/staking/FuseStakingV3.sol/PegSwap.dbg.json +1 -1
- package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
- package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/SimpleStakingV2.sol/SimpleStakingV2.dbg.json +1 -1
- package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
- package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
- package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.dbg.json +1 -1
- package/artifacts/contracts/staking/utils/Math64X64.sol/Math64x64.dbg.json +1 -1
- package/artifacts/contracts/staking/utils/StakingRewardsFixedAPY.sol/StakingRewardsFixedAPY.dbg.json +1 -1
- package/artifacts/contracts/token/ERC20PresetMinterPauserUpgradeable.sol/ERC20PresetMinterPauserUpgradeable.dbg.json +1 -1
- package/artifacts/contracts/token/ERC677.sol/ERC677.dbg.json +1 -1
- package/artifacts/contracts/token/ERC677.sol/ERC677Receiver.dbg.json +1 -1
- package/artifacts/contracts/token/GoodDollar.sol/GoodDollar.dbg.json +1 -1
- package/artifacts/contracts/token/IFeesFormula.sol/IFeesFormula.dbg.json +1 -1
- package/artifacts/contracts/token/MultichainFeeFormula.sol/MultichainFeeFormula.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/ERC20Permit.sol/ERC20Permit.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/ERC20Permit.sol/SelfApprove.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/ISuperGoodDollar.sol/IGoodDollarCustom.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/ISuperGoodDollar.sol/ISuperGoodDollar.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/ISuperToken.sol/ISuperToken.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/SuperToken.sol/SuperToken.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/SuperfluidToken.sol/SuperfluidToken.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/UUPSProxiable.sol/UUPSProxiable.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/UUPSProxy.sol/Proxy.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSProxy.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSUtils.dbg.json +1 -1
- package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
- package/artifacts/contracts/ubi/UBISchemeV2.sol/UBISchemeV2.dbg.json +1 -1
- package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.dbg.json +1 -1
- package/artifacts/contracts/utils/AdminWalletFuse.sol/AdminWalletFuse.dbg.json +1 -1
- package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
- package/artifacts/contracts/utils/BulkProof.sol/BulkProof.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyAndBridgeHelper.sol/BuyAndBridgeHelper.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDClone.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDCloneFactory.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyGDClone.sol/DonateGDClone.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyGDClone.sol/IQuoterV2.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyGDClone.sol/ISwapRouter.dbg.json +1 -1
- package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
- package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
- package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
- package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
- package/artifacts/contracts/utils/GDFaucet.sol/GDFaucet.dbg.json +1 -1
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.dbg.json +1 -1
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/IRouter.dbg.json +1 -1
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/PausableControl.dbg.json +1 -1
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/TokenOperation.dbg.json +1 -1
- package/artifacts/contracts/utils/IdentityFix.sol/IdentityFix.dbg.json +1 -1
- package/artifacts/contracts/utils/MultiCall.sol/Multicall.dbg.json +1 -1
- package/artifacts/contracts/utils/MultichainBridgeHelper.sol/MultichainBridgeHelper.dbg.json +1 -1
- package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
- package/artifacts/contracts/utils/OneTimePayments.sol/OneTimePayments.dbg.json +1 -1
- package/artifacts/contracts/utils/OneTimePaymentsV2.sol/OneTimePaymentsV2.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.dbg.json +1 -1
- package/artifacts/contracts/utils/ProxyFactory1967.sol/ERC1967Proxy.dbg.json +1 -1
- package/artifacts/contracts/utils/ProxyFactory1967.sol/ProxyFactory1967.dbg.json +1 -1
- package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
- package/contracts/invite/InvitesV2.sol +41 -4
- package/contracts/staking/FuseStakingV3.sol +4 -2
- package/dist/test-sdk/deploySuperGoodDollar.js +1 -1
- package/package.json +3 -2
- package/scripts/analytics/activeWalletsStats.ts +51 -38
- package/scripts/analytics/checkBridgeBalances.ts +442 -0
- package/test/invite/InvitesV2.test.ts +139 -271
- package/test/staking/FuseStaking.test.ts +23 -54
- package/types/contracts/invite/InvitesV2.ts +32 -0
- package/types/contracts/staking/FuseStakingV3.sol/FuseStakingV3.ts +7 -2
- package/types/factories/contracts/invite/InvitesV2__factory.ts +14 -1
- package/types/factories/contracts/staking/FuseStakingV3.sol/FuseStakingV3__factory.ts +6 -1
- package/contracts/utils/.DS_Store +0 -0
- package/yarn.lock +0 -23715
|
@@ -57,6 +57,8 @@ contract InvitesV2 is DAOUpgradeableContract {
|
|
|
57
57
|
|
|
58
58
|
bool public levelExpirationEnabled;
|
|
59
59
|
|
|
60
|
+
bytes32 private campaignCode;
|
|
61
|
+
|
|
60
62
|
event InviteeJoined(address indexed inviter, address indexed invitee);
|
|
61
63
|
event InviterBounty(
|
|
62
64
|
address indexed inviter,
|
|
@@ -125,8 +127,10 @@ contract InvitesV2 is DAOUpgradeableContract {
|
|
|
125
127
|
address inviter = codeToUser[_inviterCode];
|
|
126
128
|
//allow user to set inviter if doesnt have one
|
|
127
129
|
require(
|
|
128
|
-
user.
|
|
129
|
-
(user.
|
|
130
|
+
!user.bountyPaid &&
|
|
131
|
+
(user.inviteCode == 0x0 ||
|
|
132
|
+
(user.invitedBy == address(0) && inviter != address(0)) ||
|
|
133
|
+
(campaignCode != 0x0 && campaignCode == _inviterCode)),
|
|
130
134
|
"user already joined"
|
|
131
135
|
);
|
|
132
136
|
if (user.inviteCode == 0x0) {
|
|
@@ -144,7 +148,12 @@ contract InvitesV2 is DAOUpgradeableContract {
|
|
|
144
148
|
user.bountyAtJoin = levels[users[inviter].level].bounty;
|
|
145
149
|
}
|
|
146
150
|
|
|
147
|
-
|
|
151
|
+
/** support special campaign code without inviter */
|
|
152
|
+
if (_inviterCode == campaignCode && campaignCode != 0x0) {
|
|
153
|
+
stats.totalInvited += 1;
|
|
154
|
+
user.bountyAtJoin = levels[0].bounty;
|
|
155
|
+
_bountyForCampaign(msg.sender);
|
|
156
|
+
} else if (canCollectBountyFor(msg.sender)) {
|
|
148
157
|
_bountyFor(msg.sender, true);
|
|
149
158
|
}
|
|
150
159
|
emit InviteeJoined(inviter, msg.sender);
|
|
@@ -287,6 +296,29 @@ contract InvitesV2 is DAOUpgradeableContract {
|
|
|
287
296
|
return bountyToPay;
|
|
288
297
|
}
|
|
289
298
|
|
|
299
|
+
function _bountyForCampaign(
|
|
300
|
+
address _invitee
|
|
301
|
+
) internal returns (uint256 bounty) {
|
|
302
|
+
require(
|
|
303
|
+
!users[_invitee].bountyPaid &&
|
|
304
|
+
getIdentity().isWhitelisted(_invitee) &&
|
|
305
|
+
_whitelistedOnChainOrDefault(_invitee) == _chainId(),
|
|
306
|
+
"not eligble"
|
|
307
|
+
);
|
|
308
|
+
|
|
309
|
+
uint256 joinedAt = users[_invitee].joinedAt;
|
|
310
|
+
uint256 bountyToPay = users[_invitee].bountyAtJoin;
|
|
311
|
+
|
|
312
|
+
users[_invitee].bountyPaid = true;
|
|
313
|
+
stats.totalApprovedInvites += 1;
|
|
314
|
+
stats.totalBountiesPaid += bountyToPay;
|
|
315
|
+
|
|
316
|
+
goodDollar.transfer(_invitee, bountyToPay); //pay invitee half the bounty
|
|
317
|
+
emit InviterBounty(address(0), _invitee, bountyToPay, 0, false);
|
|
318
|
+
|
|
319
|
+
return bountyToPay;
|
|
320
|
+
}
|
|
321
|
+
|
|
290
322
|
/**
|
|
291
323
|
@dev collect bounties for invitees by msg.sender that are now whitelisted
|
|
292
324
|
*/
|
|
@@ -322,6 +354,10 @@ contract InvitesV2 is DAOUpgradeableContract {
|
|
|
322
354
|
active = _active;
|
|
323
355
|
}
|
|
324
356
|
|
|
357
|
+
function setCampaignCode(bytes32 _code) public ownerOrAvatar {
|
|
358
|
+
campaignCode = _code;
|
|
359
|
+
}
|
|
360
|
+
|
|
325
361
|
function end() public ownerOrAvatar isActive {
|
|
326
362
|
uint256 gdBalance = goodDollar.balanceOf(address(this));
|
|
327
363
|
goodDollar.transfer(msg.sender, gdBalance);
|
|
@@ -346,8 +382,9 @@ contract InvitesV2 is DAOUpgradeableContract {
|
|
|
346
382
|
* 2 uses uups upgradeable - not compatible upgrade for v1
|
|
347
383
|
* 2.1 prevent multichain claims
|
|
348
384
|
* 2.2 record bounty at join time
|
|
385
|
+
* 2.3 support campaignCode
|
|
349
386
|
*/
|
|
350
387
|
function version() public pure returns (string memory) {
|
|
351
|
-
return "2.
|
|
388
|
+
return "2.3";
|
|
352
389
|
}
|
|
353
390
|
}
|
|
@@ -103,7 +103,7 @@ contract FuseStakingV3 is Initializable, OwnableUpgradeable {
|
|
|
103
103
|
validators.push(address(0xcb876A393F05a6677a8a029f1C6D7603B416C0A6));
|
|
104
104
|
stakeBackRatio = 33333; //%33
|
|
105
105
|
communityPoolRatio = 33333; //%33
|
|
106
|
-
maxSlippageRatio =
|
|
106
|
+
maxSlippageRatio = 600; //0.6%
|
|
107
107
|
keeperFeeRatio = 30; //0.03%
|
|
108
108
|
RATIO_BASE = 100000; //100%
|
|
109
109
|
uniswap = Uniswap(
|
|
@@ -146,10 +146,12 @@ contract FuseStakingV3 is Initializable, OwnableUpgradeable {
|
|
|
146
146
|
|
|
147
147
|
function updateSettings(
|
|
148
148
|
uint256 _stakeBackRatio,
|
|
149
|
-
uint256 _communityPoolRatio
|
|
149
|
+
uint256 _communityPoolRatio,
|
|
150
|
+
uint256 _maxSlippageRatio
|
|
150
151
|
) external onlyGuardian {
|
|
151
152
|
communityPoolRatio = _communityPoolRatio;
|
|
152
153
|
stakeBackRatio = _stakeBackRatio;
|
|
154
|
+
maxSlippageRatio = _maxSlippageRatio;
|
|
153
155
|
}
|
|
154
156
|
|
|
155
157
|
function stake() public payable returns (bool) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gooddollar/goodprotocol",
|
|
3
|
-
"version": "2.0.25-beta.
|
|
3
|
+
"version": "2.0.25-beta.3",
|
|
4
4
|
"description": "GoodDollar Protocol",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=16.x"
|
|
@@ -106,6 +106,7 @@
|
|
|
106
106
|
"chai": "*",
|
|
107
107
|
"coveralls": "*",
|
|
108
108
|
"dotenv": "*",
|
|
109
|
+
"ethereum-block-by-date": "^1.4.9",
|
|
109
110
|
"ethereum-waffle": "3",
|
|
110
111
|
"ethers": "^5.7.2",
|
|
111
112
|
"ethers-eip712": "*",
|
|
@@ -132,7 +133,7 @@
|
|
|
132
133
|
"ts-generator": "^0.1.1",
|
|
133
134
|
"ts-node": "^10.9.1",
|
|
134
135
|
"typechain": "^8.3.1",
|
|
135
|
-
"typescript": "^5.
|
|
136
|
+
"typescript": "^5.3.3"
|
|
136
137
|
},
|
|
137
138
|
"packageManager": "yarn@3.6.0",
|
|
138
139
|
"resolutions": {
|
|
@@ -8,31 +8,10 @@ import { ethers } from "hardhat";
|
|
|
8
8
|
* can be used to create stats about active users and how much G$ isnt active
|
|
9
9
|
*/
|
|
10
10
|
const main = async (chain = "fuse") => {
|
|
11
|
-
let result = [];
|
|
12
|
-
let balances = {};
|
|
13
|
-
let curPage = 1;
|
|
14
|
-
let maxResult;
|
|
15
11
|
const explorer = chain === "fuse" ? "https://explorer.fuse.io" : "https://explorer.celo.org";
|
|
16
12
|
const subgraph = chain === "fuse" ? "https://api.thegraph.com/subgraphs/name/gooddollar/gooddollarfuse" : "https://";
|
|
17
|
-
do {
|
|
18
|
-
const pages = range(curPage, curPage + 5, 1);
|
|
19
|
-
curPage += 5;
|
|
20
|
-
const ps = pages.map(p =>
|
|
21
|
-
fetch(
|
|
22
|
-
`https://explorer.fuse.io/api?module=token&action=getTokenHolders&contractaddress=0x495d133B938596C9984d462F007B676bDc57eCEC&page=${p}&offset=10000`
|
|
23
|
-
)
|
|
24
|
-
.then(_ => _.json())
|
|
25
|
-
.then(_ => _.result)
|
|
26
|
-
);
|
|
27
|
-
const results = await Promise.all(ps);
|
|
28
|
-
result = result.concat(...results);
|
|
29
|
-
maxResult = maxBy(results, "length");
|
|
30
|
-
console.log(maxResult.length, result.length);
|
|
31
|
-
} while (maxResult.length === 10000);
|
|
32
|
-
result.forEach(r => (balances[r.address.toLowerCase()] = { balance: r.value, lastSeen: 0 }));
|
|
33
|
-
fs.writeFileSync("activeWalletsBalances.json", JSON.stringify(balances));
|
|
34
13
|
|
|
35
|
-
|
|
14
|
+
const balances = await getFuseBalances();
|
|
36
15
|
|
|
37
16
|
const EPOCH = 60 * 60 * 6;
|
|
38
17
|
const pool = new PromisePool({ concurrency: 30 });
|
|
@@ -92,22 +71,21 @@ const main = async (chain = "fuse") => {
|
|
|
92
71
|
// console.log({ lastUsed });
|
|
93
72
|
};
|
|
94
73
|
|
|
74
|
+
/** Convert a 2D array into a CSV string
|
|
75
|
+
*/
|
|
76
|
+
function arrayToCsv(data) {
|
|
77
|
+
return data
|
|
78
|
+
.map(
|
|
79
|
+
row =>
|
|
80
|
+
row
|
|
81
|
+
.map(String) // convert every value to String
|
|
82
|
+
.map(v => v.replaceAll('"', '""')) // escape double colons
|
|
83
|
+
.map(v => `"${v}"`) // quote it
|
|
84
|
+
.join(",") // comma-separated
|
|
85
|
+
)
|
|
86
|
+
.join("\r\n"); // rows starting on new lines
|
|
87
|
+
}
|
|
95
88
|
const etl = async () => {
|
|
96
|
-
/** Convert a 2D array into a CSV string
|
|
97
|
-
*/
|
|
98
|
-
function arrayToCsv(data) {
|
|
99
|
-
return data
|
|
100
|
-
.map(
|
|
101
|
-
row =>
|
|
102
|
-
row
|
|
103
|
-
.map(String) // convert every value to String
|
|
104
|
-
.map(v => v.replaceAll('"', '""')) // escape double colons
|
|
105
|
-
.map(v => `"${v}"`) // quote it
|
|
106
|
-
.join(",") // comma-separated
|
|
107
|
-
)
|
|
108
|
-
.join("\r\n"); // rows starting on new lines
|
|
109
|
-
}
|
|
110
|
-
|
|
111
89
|
const balances = JSON.parse(fs.readFileSync("activeWalletsLastUsed.json").toString());
|
|
112
90
|
|
|
113
91
|
let result = [];
|
|
@@ -135,6 +113,40 @@ const etl = async () => {
|
|
|
135
113
|
fs.writeFileSync("activeWalletsLastUsed.csv", arrayToCsv(sortBy(result, _ => -Number(_[1]))));
|
|
136
114
|
};
|
|
137
115
|
|
|
116
|
+
const getFuseBalances = async (refetch = true) => {
|
|
117
|
+
if (refetch === false) {
|
|
118
|
+
const balances = JSON.parse(fs.readFileSync("activeWalletsBalances.json").toString());
|
|
119
|
+
const rows = Object.entries(balances).filter(_ => Number(_[1].balance) > 10000000);
|
|
120
|
+
const sorted = sortBy(rows, _ => -Number(_[1].balance));
|
|
121
|
+
sorted.forEach(_ => (_[1].balance = Number(_[1].balance) / 100));
|
|
122
|
+
console.log(arrayToCsv(sorted.slice(0, 20).map(_ => [_[0], _[1].balance])));
|
|
123
|
+
return balances;
|
|
124
|
+
}
|
|
125
|
+
let result = [];
|
|
126
|
+
let balances = {};
|
|
127
|
+
let curPage = 1;
|
|
128
|
+
let maxResult;
|
|
129
|
+
|
|
130
|
+
do {
|
|
131
|
+
const pages = range(curPage, curPage + 5, 1);
|
|
132
|
+
curPage += 5;
|
|
133
|
+
const ps = pages.map(p =>
|
|
134
|
+
fetch(
|
|
135
|
+
`https://explorer.fuse.io/api?module=token&action=getTokenHolders&contractaddress=0x495d133B938596C9984d462F007B676bDc57eCEC&page=${p}&offset=10000`
|
|
136
|
+
)
|
|
137
|
+
.then(_ => _.json())
|
|
138
|
+
.then(_ => _.result)
|
|
139
|
+
);
|
|
140
|
+
const results = await Promise.all(ps);
|
|
141
|
+
result = result.concat(...results);
|
|
142
|
+
maxResult = maxBy(results, "length");
|
|
143
|
+
console.log(maxResult.length, result.length);
|
|
144
|
+
} while (maxResult.length === 10000);
|
|
145
|
+
result.forEach(r => (balances[r.address.toLowerCase()] = { balance: r.value, lastSeen: 0 }));
|
|
146
|
+
fs.writeFileSync("activeWalletsBalances.json", JSON.stringify(balances));
|
|
147
|
+
return balances;
|
|
148
|
+
};
|
|
149
|
+
|
|
138
150
|
const fundsByLastSeen = async () => {
|
|
139
151
|
const balances = JSON.parse(fs.readFileSync("activeWalletsLastUsed.json").toString());
|
|
140
152
|
let total1Year = 0;
|
|
@@ -163,6 +175,7 @@ const fundsByLastSeen = async () => {
|
|
|
163
175
|
|
|
164
176
|
console.log({ total, total1Year, total2Year });
|
|
165
177
|
};
|
|
178
|
+
getFuseBalances(false).catch(e => console.log(e));
|
|
166
179
|
// main().catch(e => console.log(e));
|
|
167
180
|
// etl();
|
|
168
|
-
fundsByLastSeen();
|
|
181
|
+
// fundsByLastSeen();
|