diff --git a/.gitignore b/.gitignore index 6285dc51..fd9ae9df 100644 --- a/.gitignore +++ b/.gitignore @@ -78,4 +78,7 @@ packages/sdk-js/.yarn/install-state.gz .vercel !.vercel/project.json .vscode/settings.json -packages/contracts/deployments/*/solcInputs \ No newline at end of file +packages/contracts/deployments/*/solcInputs +.codex +AGENTS.md +codex-resume \ No newline at end of file diff --git a/packages/app/package.json b/packages/app/package.json index 1fca84bc..5d504f9a 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -34,7 +34,7 @@ "@tanstack/react-query": "^5.66.0", "@uniswap/router-sdk": "^1.9.3", "@uniswap/sdk-core": "^5.3.1", - "@uniswap/smart-order-router": "^3.35.12", + "@uniswap/smart-order-router": "3.*", "@uniswap/v3-sdk": "^3.13.1", "@usedapp/core": "^1.2.10", "@walletconnect/modal-react-native": "^1.0.0-rc.9", diff --git a/packages/contracts/hardhat.config.ts b/packages/contracts/hardhat.config.ts index d56925df..8ea88307 100644 --- a/packages/contracts/hardhat.config.ts +++ b/packages/contracts/hardhat.config.ts @@ -1,151 +1,151 @@ -import * as dotenv from 'dotenv'; -import '@typechain/hardhat'; -import 'hardhat-abi-exporter'; -import 'hardhat-contract-sizer'; -import '@openzeppelin/hardhat-upgrades'; -import 'hardhat-deploy'; -import '@nomicfoundation/hardhat-verify'; -import { HardhatUserConfig } from 'hardhat/config'; +import * as dotenv from "dotenv"; +import "@typechain/hardhat"; +import "hardhat-abi-exporter"; +import "hardhat-contract-sizer"; +import "@openzeppelin/hardhat-upgrades"; +import "@nomicfoundation/hardhat-chai-matchers"; +import "hardhat-deploy"; +import { HardhatUserConfig } from "hardhat/config"; dotenv.config(); -const mnemonic = process.env.MNEMONIC || ''; -const privateKey = process.env.PRIVATE_KEY || '0x0000000000000000000000000000000000000000000000000000000000000000'; +const mnemonic = process.env.MNEMONIC || ""; +const privateKey = process.env.PRIVATE_KEY || "0x0000000000000000000000000000000000000000000000000000000000000000"; const config: HardhatUserConfig = { - contractSizer: { - alphaSort: true, - disambiguatePaths: false, - runOnCompile: true, - strict: true, - }, - gasReporter: { - enabled: true, - coinmarketcap: process.env.COINMARKETCAP_API_KEY, - currency: 'USD', - }, - abiExporter: { - path: './abi', - runOnCompile: false, - clear: true, - spacing: 2, - only: [ - /** - * List of specific contract names for exporting ABI - */ - // ":ERC20", - ], - format: 'minimal', - }, - namedAccounts: { - deployer: { - default: 0, // here this will by default take the first account as deployer + contractSizer: { + alphaSort: true, + disambiguatePaths: false, + runOnCompile: true, + strict: true }, - }, - networks: { - hardhat: { - chainId: 42220, + gasReporter: { + enabled: true, + coinmarketcap: process.env.COINMARKETCAP_API_KEY, + currency: "USD" }, - localhost: {}, - mainnet: { - chainId: 1, - url: 'https://cloudflare-eth.com', + abiExporter: { + path: "./abi", + runOnCompile: false, + clear: true, + spacing: 2, + only: [ + /** + * List of specific contract names for exporting ABI + */ + // ":ERC20", + ], + format: "minimal" }, - alfajores: { - chainId: 44787, - url: `https://alfajores-forno.celo-testnet.org`, - gasPrice: 5000000000, - accounts: { - mnemonic, - }, - verify: { - etherscan: { - apiKey: process.env.CELOSCAN_KEY, - apiUrl: 'https://api-alfajores.celoscan.io/', - }, - }, + namedAccounts: { + deployer: { + default: 0 // here this will by default take the first account as deployer + } }, - celo: { - chainId: 42220, - url: `https://forno.celo.org`, - gasPrice: 5000000000, - accounts: { - mnemonic, - }, - verify: { - etherscan: { - apiKey: process.env.CELOSCAN_KEY, - apiUrl: 'https://api.celoscan.io/', + networks: { + hardhat: { + chainId: 42220 }, - }, - }, - 'production-celo': { - chainId: 42220, - url: `https://forno.celo.org`, - gasPrice: 25.1e9, - accounts: [privateKey], - verify: { - etherscan: { - apiKey: process.env.ETHERSCAN_KEY, + localhost: {}, + mainnet: { + chainId: 1, + url: "https://cloudflare-eth.com" }, - }, - }, - 'development-celo': { - chainId: 42220, - url: `https://forno.celo.org`, - gasPrice: 25.1e9, - accounts: { - mnemonic, - }, - verify: { - etherscan: { - apiKey: process.env.ETHERSCAN_KEY, + alfajores: { + chainId: 44787, + url: `https://alfajores-forno.celo-testnet.org`, + gasPrice: 5000000000, + accounts: { + mnemonic + }, + verify: { + etherscan: { + apiKey: process.env.CELOSCAN_KEY, + apiUrl: "https://api-alfajores.celoscan.io/" + } + } }, - }, - }, - fuse: { - chainId: 122, - url: `https://rpc.fuse.io`, - gasPrice: 10000000000, - accounts: { - mnemonic, - }, - }, - }, - sourcify: { - enabled: true, - }, - etherscan: { - apiKey: process.env.ETHERSCAN_KEY || '', - customChains: [ - { - network: 'celo', - chainId: 42220, - urls: { - apiURL: 'https://api.etherscan.io/v2/api?chainid=42220', - browserURL: 'https://celoscan.io/', + celo: { + chainId: 42220, + url: `https://forno.celo.org`, + gasPrice: 5000000000, + accounts: { + mnemonic + }, + verify: { + etherscan: { + apiKey: process.env.CELOSCAN_KEY, + apiUrl: "https://api.celoscan.io/" + } + } }, - }, - { - network: 'alfajores', - chainId: 44787, - urls: { browserURL: 'https://alfajores.celoscan.io/', apiURL: 'https://api-alfajores.celoscan.io/' }, - }, - ], - }, - solidity: { - compilers: [ - { - version: '0.8.19', - settings: { - optimizer: { - enabled: true, - runs: 0, - }, + "production-celo": { + chainId: 42220, + url: `https://forno.celo.org`, + gasPrice: 25.1e9, + accounts: [privateKey], + verify: { + etherscan: { + apiKey: process.env.ETHERSCAN_KEY + } + } }, - }, - ], - }, + "development-celo": { + chainId: 42220, + url: `https://forno.celo.org`, + gasPrice: 25.1e9, + accounts: { + mnemonic + }, + verify: { + etherscan: { + apiKey: process.env.ETHERSCAN_KEY + } + } + }, + fuse: { + chainId: 122, + url: `https://rpc.fuse.io`, + gasPrice: 10000000000, + accounts: { + mnemonic + } + } + }, + sourcify: { + enabled: true + }, + etherscan: { + apiKey: process.env.ETHERSCAN_KEY || "", + customChains: [ + { + network: "celo", + chainId: 42220, + urls: { + apiURL: "https://api.etherscan.io/v2/api?chainid=42220", + browserURL: "https://celoscan.io/" + } + }, + { + network: "alfajores", + chainId: 44787, + urls: { browserURL: "https://alfajores.celoscan.io/", apiURL: "https://api-alfajores.celoscan.io/" } + } + ] + }, + solidity: { + compilers: [ + { + version: "0.8.19", + settings: { + optimizer: { + enabled: true, + runs: 0 + } + } + } + ] + } }; export default config; diff --git a/packages/contracts/package.json b/packages/contracts/package.json index d23575f4..c6270907 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -1,70 +1,70 @@ { - "name": "@gooddollar/goodcollective-contracts", - "packageManager": "yarn@3.2.1", - "version": "1.4.2", - "license": "MIT", - "types": "./typechain-types/index.ts", - "files": [ - "contracts", - "artifacts/contracts", - "typechain-types", - "releases" - ], - "devDependencies": { - "@gooddollar/goodprotocol": "^2.0.17", - "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-toolbox": "2.*", - "@nomicfoundation/hardhat-verify": "2", - "@nomiclabs/hardhat-ethers": "^2.0.0", - "@openzeppelin/contracts": "^4.9.2", - "@openzeppelin/contracts-upgradeable": "4.8.3", - "@openzeppelin/hardhat-upgrades": "1.20.0", - "@superfluid-finance/ethereum-contracts": "^1.7.0", - "@superfluid-finance/sdk-core": "^0.6.6", - "@typechain/ethers-v5": "^10.1.0", - "@types/chai": "^4.2.0", - "@types/mocha": ">=9.1.0", - "@types/prettier": "^2", - "@types/sinon-chai": "^3.2.3", - "@typescript-eslint/eslint-plugin": "^5.60.0", - "@uniswap/swap-router-contracts": "^1.3.1", - "@uniswap/v3-periphery": "^1.4.3", - "chai": "^4.2.0", - "dotenv": "^16.3.1", - "ethereum-waffle": "^3.0.0", - "graphql": "^16.7.1", - "hardhat": "^2.26.2", - "hardhat-abi-exporter": "^2.10.1", - "hardhat-contract-sizer": "^2.10.0", - "hardhat-deploy": "^1.0.4", - "hardhat-gas-reporter": "^1.0.8", - "prettier": "^2.8.8", - "prettier-plugin-solidity": "^1.1.3", - "solhint-plugin-prettier": "^0.0.5", - "solidity-coverage": "^0.8.1", - "typechain": "^8.1.0", - "typescript": "^5.1.3" - }, - "scripts": { - "build": "yarn compile", - "compile": "npx hardhat compile", - "clean": "npx hardhat clean", - "solhint": "solhint ./contracts/**/*.sol", - "format": "yarn prettier -w ./test/**/*.ts ./contracts/**/*.sol", - "format:check": "yarn prettier -c ./test/**/*.ts ./contracts/**/*.sol", - "lint:ts": "eslint scripts/ test/ --ext=ts", - "lint:sol": "solhint 'contracts/**/*.sol'", - "lint": "npm run lint:sol && npm run lint:ts", - "lint:fix": "npm run lint:sol:fix && npm run lint:ts:fix", - "lint:ts:fix": "eslint scripts/ test/ --ext=ts --fix", - "lint:sol:fix": "solhint 'contracts/**/*.sol' --fix", - "test": "npx hardhat test", - "test:coverage": "npx hardhat coverage", - "deploy": "hardhat deploy --export-all ./releases/deployment.json", - "bump": "yarn version patch && yarn compile && git add package.json && git commit -m \"version bump\"", - "publish": "yarn npm publish --access public", - "test:setup": "yarn exec ./scripts/deployContracts.sh", - "verify": "npx hardhat run scripts/verify.ts --network ${0}" - } + "name": "@gooddollar/goodcollective-contracts", + "packageManager": "yarn@3.2.1", + "version": "1.4.2", + "license": "MIT", + "types": "./typechain-types/index.ts", + "files": [ + "contracts", + "artifacts/contracts", + "typechain-types", + "releases" + ], + "devDependencies": { + "@gooddollar/goodprotocol": "^2.0.17", + "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-toolbox": "2.*", + "@nomiclabs/hardhat-ethers": "^2.0.0", + "@nomiclabs/hardhat-etherscan": "^3.0.0", + "@openzeppelin/contracts": "^4.9.2", + "@openzeppelin/contracts-upgradeable": "4.8.3", + "@openzeppelin/hardhat-upgrades": "1.20.0", + "@superfluid-finance/ethereum-contracts": "^1.7.0", + "@superfluid-finance/sdk-core": "^0.6.6", + "@typechain/ethers-v5": "^10.1.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/prettier": "^2", + "@types/sinon-chai": "^3.2.3", + "@typescript-eslint/eslint-plugin": "^5.60.0", + "@uniswap/swap-router-contracts": "^1.3.1", + "@uniswap/v3-periphery": "^1.4.3", + "chai": "^4.2.0", + "dotenv": "^16.3.1", + "ethereum-waffle": "^3.0.0", + "graphql": "^16.7.1", + "hardhat": "^2.26.2", + "hardhat-abi-exporter": "^2.10.1", + "hardhat-contract-sizer": "^2.10.0", + "hardhat-deploy": "^1.0.4", + "hardhat-gas-reporter": "^1.0.8", + "prettier": "^2.8.8", + "prettier-plugin-solidity": "^1.1.3", + "solhint-plugin-prettier": "^0.0.5", + "solidity-coverage": "^0.8.1", + "typechain": "^8.1.0", + "typescript": "^5.1.3" + }, + "scripts": { + "build": "yarn compile", + "compile": "npx hardhat compile", + "clean": "npx hardhat clean", + "solhint": "solhint ./contracts/**/*.sol", + "format": "yarn prettier -w ./test/**/*.ts ./contracts/**/*.sol", + "format:check": "yarn prettier -c ./test/**/*.ts ./contracts/**/*.sol", + "lint:ts": "eslint scripts/ test/ --ext=ts", + "lint:sol": "solhint 'contracts/**/*.sol'", + "lint": "npm run lint:sol && npm run lint:ts", + "lint:fix": "npm run lint:sol:fix && npm run lint:ts:fix", + "lint:ts:fix": "eslint scripts/ test/ --ext=ts --fix", + "lint:sol:fix": "solhint 'contracts/**/*.sol' --fix", + "test": "npx hardhat test", + "test:coverage": "npx hardhat coverage", + "deploy": "hardhat deploy --export-all ./releases/deployment.json", + "bump": "yarn version patch && yarn compile && git add package.json && git commit -m \"version bump\"", + "publish": "yarn npm publish --access public", + "test:setup": "yarn exec ./scripts/deployContracts.sh", + "verify": "npx hardhat run scripts/verify.ts --network ${0}" + } } diff --git a/packages/contracts/test/DirectPayments/DirectPayments.bulkMembers.test.ts b/packages/contracts/test/DirectPayments/DirectPayments.bulkMembers.test.ts index c0062f64..148eacb5 100644 --- a/packages/contracts/test/DirectPayments/DirectPayments.bulkMembers.test.ts +++ b/packages/contracts/test/DirectPayments/DirectPayments.bulkMembers.test.ts @@ -1,5 +1,5 @@ import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; -import "@nomicfoundation/hardhat-toolbox"; + import { expect } from "chai"; import { DirectPaymentsFactory, DirectPaymentsPool, ProvableNFT } from "typechain-types"; import { ethers } from "hardhat"; diff --git a/packages/contracts/test/Swap.e2e.test.ts b/packages/contracts/test/Swap.e2e.test.ts index 2b186765..0409b9be 100644 --- a/packages/contracts/test/Swap.e2e.test.ts +++ b/packages/contracts/test/Swap.e2e.test.ts @@ -21,7 +21,7 @@ describe('HelperLibrary Swap E2E (Celo fork)', () => { const broker = await ethers.getImpersonatedSigner('0xaEb865bCa93DdC8F47b8e29F40C5399cE34d0C58'); await setBalance(broker.address, ethers.utils.parseEther('1000')); const token = (await ethers.getContractAt('ERC20', CUSD)).connect(broker); - await token.mint(trader.address, ethers.utils.parseEther('1')); + await token.transfer(trader.address, ethers.utils.parseEther('1')); const lib = (await ethers.deployContract('HelperLibrary')).connect(trader); helper = (await ethers.deployContract('HelperLibraryTest', [], { libraries: { HelperLibrary: lib.address }, diff --git a/packages/sdk-js/src/goodcollective/goodcollective.ts b/packages/sdk-js/src/goodcollective/goodcollective.ts index 6ee355e1..6b6e8ee7 100644 --- a/packages/sdk-js/src/goodcollective/goodcollective.ts +++ b/packages/sdk-js/src/goodcollective/goodcollective.ts @@ -82,11 +82,6 @@ const SF_RESOLVERS: { [key: string]: string } = { 44787: '0x6e9CaBE4172344Db81a1E1D735a6AD763700064A', 31337: '0x02330b5Be8EBD0D4d354813a7BB535140A77C881', }; -const CHAIN_OVERRIDES: { [key: string]: object } = { - 44787: { gasPrice: 25.001e9, gasLimit: 1200000 }, - 42220: { gasPrice: 25.001e9, gasLimit: 1200000 }, -}; - export class GoodCollectiveSDK { factory: DirectPaymentsFactory; ubifactory?: UBIPoolFactory; @@ -207,7 +202,7 @@ export class GoodCollectiveSDK { */ async mintNft(signer: ethers.Signer, poolAddress: string, addressTo: string, nftData: NFTData, withClaim = true) { const connected = this.pool.attach(poolAddress).connect(signer); - return connected.mintNFT(addressTo, nftData, withClaim, { ...CHAIN_OVERRIDES[this.chainId] }); + return connected.mintNFT(addressTo, nftData, withClaim); } /** @@ -313,7 +308,7 @@ export class GoodCollectiveSDK { managerFee: number ) { const connected = this.pool.attach(poolAddress).connect(signer); - return connected.setPoolSettings(poolSettings, managerFee, { ...CHAIN_OVERRIDES[this.chainId] }); + return connected.setPoolSettings(poolSettings, managerFee); } /** @@ -331,7 +326,7 @@ export class GoodCollectiveSDK { extendedSettings: ExtendedUBISettings ) { const connected = this.ubipool.attach(poolAddress).connect(signer); - return connected.setUBISettings(ubiSettings, extendedSettings, { ...CHAIN_OVERRIDES[this.chainId] }); + return connected.setUBISettings(ubiSettings, extendedSettings); } /** @@ -343,7 +338,7 @@ export class GoodCollectiveSDK { */ async setUBIPoolCoreSettings(signer: ethers.Signer, poolAddress: string, poolSettings: UBIPoolSettings) { const connected = this.ubipool.attach(poolAddress).connect(signer); - return connected.setPoolSettings(poolSettings, { ...CHAIN_OVERRIDES[this.chainId] }); + return connected.setPoolSettings(poolSettings); } /** @@ -366,12 +361,12 @@ export class GoodCollectiveSDK { // Only update pool settings if provided if (poolSettings) { - const tx1 = await connected.setPoolSettings(poolSettings, { ...CHAIN_OVERRIDES[this.chainId] }); + const tx1 = await connected.setPoolSettings(poolSettings); await tx1.wait(); } // Always update UBI settings - return connected.setUBISettings(ubiSettings, extendedSettings, { ...CHAIN_OVERRIDES[this.chainId] }); + return connected.setUBISettings(ubiSettings, extendedSettings); } /** @@ -399,7 +394,7 @@ export class GoodCollectiveSDK { */ async addUBIPoolMember(signer: ethers.Signer, poolAddress: string, memberAddress: string) { const connected = this.ubipool.attach(poolAddress).connect(signer); - return connected.addMember(memberAddress, '0x', { ...CHAIN_OVERRIDES[this.chainId] }); + return connected.addMember(memberAddress, '0x'); } /** @@ -411,7 +406,7 @@ export class GoodCollectiveSDK { */ async removeUBIPoolMember(signer: ethers.Signer, poolAddress: string, memberAddress: string) { const connected = this.ubipool.attach(poolAddress).connect(signer); - return connected.removeMember(memberAddress, { ...CHAIN_OVERRIDES[this.chainId] }); + return connected.removeMember(memberAddress); } /** @@ -680,7 +675,6 @@ export class GoodCollectiveSDK { receiver: poolAddress, sender: signerAddress, flowRate: flowRate, - overrides: { ...CHAIN_OVERRIDES[this.chainId] }, }); const op = flowAction; @@ -717,7 +711,6 @@ export class GoodCollectiveSDK { receiver: poolAddress, sender: signerAddress, flowRate: flowRate, - overrides: { ...CHAIN_OVERRIDES[this.chainId] }, }); const op = flowAction; @@ -740,7 +733,6 @@ export class GoodCollectiveSDK { receiver: poolAddress, sender: signerAddress, flowRate: flowRate, - overrides: { ...CHAIN_OVERRIDES[this.chainId] }, }); const op = flowAction; @@ -770,10 +762,9 @@ export class GoodCollectiveSDK { receiver: poolAddress, sender: signerAddress, flowRate: flowRate, - overrides: { ...CHAIN_OVERRIDES[this.chainId] }, }); - const swapAction = sdk.host.callAppAction(poolAddress, appAction, { ...CHAIN_OVERRIDES[this.chainId] }); + const swapAction = sdk.host.callAppAction(poolAddress, appAction); const op = sdk.batchCall([swapAction, flowOp]); return op.exec(signer); @@ -791,7 +782,7 @@ export class GoodCollectiveSDK { const token = await this.rewardToken(poolAddress); const tcabi = ['function transferAndCall(address _to, uint256 _value, bytes _data) returns (bool success)']; const tc = new ethers.Contract(token.address, tcabi, signer); - return tc.transferAndCall(poolAddress, amount, '0x', { ...CHAIN_OVERRIDES[this.chainId] }); + return tc.transferAndCall(poolAddress, amount, '0x'); } /** @@ -831,11 +822,11 @@ export class GoodCollectiveSDK { async supportSingleBatch(signer: ethers.Signer, poolAddress: string, amount: string) { const sdk = await this.superfluidSDK; const token = await this.rewardToken(poolAddress); - const approve = token.approve({ amount, receiver: poolAddress, overrides: { ...CHAIN_OVERRIDES[this.chainId] } }); + const approve = token.approve({ amount, receiver: poolAddress }); const signerAddress = await signer.getAddress(); const appAction = this.pool.interface.encodeFunctionData('support', [signerAddress, amount, '0x']); - const supportAction = sdk.host.callAppAction(poolAddress, appAction, { ...CHAIN_OVERRIDES[this.chainId] }); + const supportAction = sdk.host.callAppAction(poolAddress, appAction); const op = sdk.batchCall([approve, supportAction]); return op.exec(signer); @@ -872,7 +863,7 @@ export class GoodCollectiveSDK { amount: string ): Promise { const token = new ethers.Contract(tokenAddress, ['function approve(address spender, uint256 amount)'], signer); - return token.approve(poolAddress, amount, { ...CHAIN_OVERRIDES[this.chainId], gasLimit: 100000 }); + return token.approve(poolAddress, amount); } /** @@ -1004,6 +995,6 @@ export class GoodCollectiveSDK { extraData: string[] ): Promise { const connected = this.pool.attach(poolAddress).connect(signer); - return connected.addMembers(members, extraData, { ...CHAIN_OVERRIDES[this.chainId] }); + return connected.addMembers(members, extraData); } } diff --git a/packages/subgraph/schema.graphql b/packages/subgraph/schema.graphql index f2b2c744..9b50d58a 100644 --- a/packages/subgraph/schema.graphql +++ b/packages/subgraph/schema.graphql @@ -13,6 +13,7 @@ type DonorCollective @entity { donor: Donor! collective: Collective! contribution: BigInt! # total contribution of the donor to the collective + streamedContribution: BigInt # total only streams contribution of the donor to the collective flowRate: BigInt! timestamp: Int! events: [SupportEvent!]! @derivedFrom(field: "donorCollective") @@ -41,6 +42,10 @@ type Steward @entity { Number of actions performed """ actions: Int! + """ + Number of claims from ubi pools performed + """ + claims: Int totalEarned: BigInt! totalUBIEarned: BigInt! diff --git a/packages/subgraph/src/mappings/pool.ts b/packages/subgraph/src/mappings/pool.ts index 33e787d3..80781306 100644 --- a/packages/subgraph/src/mappings/pool.ts +++ b/packages/subgraph/src/mappings/pool.ts @@ -130,6 +130,7 @@ export function handleRewardClaim(event: EventRewardClaimed): void { let steward = Steward.load(stewardAddress); if (steward === null) { steward = new Steward(stewardAddress); + steward.claims = 0; steward.actions = 0; steward.totalEarned = BigInt.fromI32(0); steward.totalUBIEarned = BigInt.fromI32(0); diff --git a/packages/subgraph/src/mappings/poolFactory.ts b/packages/subgraph/src/mappings/poolFactory.ts index 36c59434..ce61da94 100644 --- a/packages/subgraph/src/mappings/poolFactory.ts +++ b/packages/subgraph/src/mappings/poolFactory.ts @@ -122,7 +122,7 @@ export function handleUBIPoolCreated(event: UBIPoolCreated): void { ubiPoolLimits.claimPeriodDays = poolLimits.claimPeriodDays; ubiPoolLimits.cycleLengthDays = poolLimits.cycleLengthDays; ubiPoolLimits.maxClaimAmount = poolLimits.maxClaimAmount; - ubiPoolLimits.maxClaimers = poolLimits.maxClaimers; + ubiPoolLimits.maxClaimers = poolLimits.maxMembers; ubiPoolLimits.minActiveUsers = poolLimits.minActiveUsers; ubiPoolLimits.onlyMembers = poolLimits.onlyMembers; diff --git a/packages/subgraph/src/mappings/ubipool.ts b/packages/subgraph/src/mappings/ubipool.ts index e9e3900c..09386230 100644 --- a/packages/subgraph/src/mappings/ubipool.ts +++ b/packages/subgraph/src/mappings/ubipool.ts @@ -40,15 +40,15 @@ export function handleUBISettingsChange(event: UBISettingsChanged): void { ubiPoolLimits.claimPeriodDays = poolLimits.claimPeriodDays; ubiPoolLimits.cycleLengthDays = poolLimits.cycleLengthDays; ubiPoolLimits.maxClaimAmount = poolLimits.maxClaimAmount; - ubiPoolLimits.maxClaimers = poolLimits.maxClaimers; + ubiPoolLimits.maxClaimers = poolLimits.maxMembers; ubiPoolLimits.minActiveUsers = poolLimits.minActiveUsers; ubiPoolLimits.onlyMembers = poolLimits.onlyMembers; ubiPoolLimits.save(); } export function handleUBIClaim(event: UBIClaimed): void { - const contributors = new Array() - contributors.push(event.params.whitelistedRoot.toHexString()) + const contributors = new Array(); + contributors.push(event.params.whitelistedRoot.toHexString()); const rewardPerContributor = event.params.amount; const poolAddress = event.address.toHexString(); @@ -74,12 +74,11 @@ export function handleUBIClaim(event: UBIClaimed): void { claimEvent.eventType = 0; claimEvent.timestamp = event.block.timestamp.toI32(); claimEvent.quantity = BigInt.fromI32(1); - claimEvent.rewardPerContributor = rewardPerContributor - claimEvent.contributors = contributors - + claimEvent.rewardPerContributor = rewardPerContributor; + claimEvent.contributors = contributors; for (let i = 0; i < contributors.length; i++) { - const stewardAddress = contributors[i] + const stewardAddress = contributors[i]; const stewardCollectiveId = `${stewardAddress}_${poolAddress}`; // update Steward @@ -87,10 +86,12 @@ export function handleUBIClaim(event: UBIClaimed): void { if (steward === null) { steward = new Steward(stewardAddress); steward.actions = 0; + steward.claims = 0; steward.totalEarned = BigInt.fromI32(0); steward.totalUBIEarned = BigInt.fromI32(0); steward.nfts = new Array(); } + steward.claims = (steward.claims || 0) + 1; steward.totalUBIEarned = steward.totalUBIEarned.plus(rewardPerContributor); // update StewardCollective @@ -115,6 +116,6 @@ export function handleUBIClaim(event: UBIClaimed): void { pool.paymentsMade = pool.paymentsMade + contributors.length; claim.save(); - claimEvent.save() + claimEvent.save(); pool.save(); } diff --git a/yarn.lock b/yarn.lock index 57fe4d7f..b4240e15 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4925,7 +4925,7 @@ __metadata: "@types/react-test-renderer": ^18.0.0 "@uniswap/router-sdk": ^1.9.3 "@uniswap/sdk-core": ^5.3.1 - "@uniswap/smart-order-router": ^3.35.12 + "@uniswap/smart-order-router": 3.* "@uniswap/v3-sdk": ^3.13.1 "@usedapp/core": ^1.2.10 "@vitejs/plugin-react": ^4.1.1 @@ -4994,8 +4994,8 @@ __metadata: "@nomicfoundation/hardhat-chai-matchers": ^1.0.0 "@nomicfoundation/hardhat-network-helpers": ^1.0.0 "@nomicfoundation/hardhat-toolbox": 2.* - "@nomicfoundation/hardhat-verify": 2 "@nomiclabs/hardhat-ethers": ^2.0.0 + "@nomiclabs/hardhat-etherscan": ^3.0.0 "@openzeppelin/contracts": ^4.9.2 "@openzeppelin/contracts-upgradeable": 4.8.3 "@openzeppelin/hardhat-upgrades": 1.20.0 @@ -6717,25 +6717,6 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/hardhat-verify@npm:2": - version: 2.1.3 - resolution: "@nomicfoundation/hardhat-verify@npm:2.1.3" - dependencies: - "@ethersproject/abi": ^5.1.2 - "@ethersproject/address": ^5.0.2 - cbor: ^8.1.0 - debug: ^4.1.1 - lodash.clonedeep: ^4.5.0 - picocolors: ^1.1.0 - semver: ^6.3.0 - table: ^6.8.0 - undici: ^5.14.0 - peerDependencies: - hardhat: ^2.26.0 - checksum: b0d8fbdd5522e8c3817e8a2e7538afe8bfb3f27317169871ef30abc51247afbfb52316c84d9dda6e7e796603b55da659432f6bcc52e2708f6fc89d4348a2dddc - languageName: node - linkType: hard - "@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.1": version: 0.1.1 resolution: "@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.1" @@ -6855,6 +6836,26 @@ __metadata: languageName: node linkType: hard +"@nomiclabs/hardhat-etherscan@npm:^3.0.0": + version: 3.1.8 + resolution: "@nomiclabs/hardhat-etherscan@npm:3.1.8" + dependencies: + "@ethersproject/abi": ^5.1.2 + "@ethersproject/address": ^5.0.2 + cbor: ^8.1.0 + chalk: ^2.4.2 + debug: ^4.1.1 + fs-extra: ^7.0.1 + lodash: ^4.17.11 + semver: ^6.3.0 + table: ^6.8.0 + undici: ^5.14.0 + peerDependencies: + hardhat: ^2.0.4 + checksum: 13864380d104705a54668adf2fb37a87d1147a064c1d29dbc356390e7254d5c7501b9b3af9c4ec2f9d9ff642a01417d5d35970d626fe706f5f4830820ae89ecb + languageName: node + linkType: hard + "@npmcli/agent@npm:^2.0.0": version: 2.2.0 resolution: "@npmcli/agent@npm:2.2.0" @@ -7021,6 +7022,13 @@ __metadata: languageName: node linkType: hard +"@openzeppelin/contracts@npm:5.0.2": + version: 5.0.2 + resolution: "@openzeppelin/contracts@npm:5.0.2" + checksum: 0cce6fc284bd1d89e2a447027832a62f1356b44ee31088899453e10349a63a62df2f07da63d76e4c41aad9c86b96b650b2b6fc85439ef276850dda1170a047fd + languageName: node + linkType: hard + "@openzeppelin/defender-base-client@npm:^1.46.0": version: 1.51.0 resolution: "@openzeppelin/defender-base-client@npm:1.51.0" @@ -12783,7 +12791,21 @@ __metadata: languageName: node linkType: hard -"@uniswap/router-sdk@npm:^1.9.2, @uniswap/router-sdk@npm:^1.9.3": +"@uniswap/router-sdk@npm:^1.12.0, @uniswap/router-sdk@npm:^1.14.0": + version: 1.23.0 + resolution: "@uniswap/router-sdk@npm:1.23.0" + dependencies: + "@ethersproject/abi": ^5.5.0 + "@uniswap/sdk-core": ^7.6.0 + "@uniswap/swap-router-contracts": ^1.3.0 + "@uniswap/v2-sdk": ^4.14.0 + "@uniswap/v3-sdk": ^3.24.1 + "@uniswap/v4-sdk": ^1.20.0 + checksum: 979c8ec291c4945992bc5f8d34bfc0ed5e11711719be8d9cb6dbf09b12f25e370325eb243d4d04d7b102b3fd132df0a5c837c6e992617d39d6f65c558a7544d6 + languageName: node + linkType: hard + +"@uniswap/router-sdk@npm:^1.9.3": version: 1.9.3 resolution: "@uniswap/router-sdk@npm:1.9.3" dependencies: @@ -12810,7 +12832,7 @@ __metadata: languageName: node linkType: hard -"@uniswap/sdk-core@npm:^5.3.0, @uniswap/sdk-core@npm:^5.3.1": +"@uniswap/sdk-core@npm:^5.3.1": version: 5.3.1 resolution: "@uniswap/sdk-core@npm:5.3.1" dependencies: @@ -12827,22 +12849,57 @@ __metadata: languageName: node linkType: hard -"@uniswap/smart-order-router@npm:^3.35.12": - version: 3.35.12 - resolution: "@uniswap/smart-order-router@npm:3.35.12" +"@uniswap/sdk-core@npm:^5.4.0, @uniswap/sdk-core@npm:^5.8.0": + version: 5.9.0 + resolution: "@uniswap/sdk-core@npm:5.9.0" + dependencies: + "@ethersproject/address": ^5.0.2 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": 5.7.0 + "@ethersproject/strings": 5.7.0 + big.js: ^5.2.2 + decimal.js-light: ^2.5.0 + jsbi: ^3.1.4 + tiny-invariant: ^1.1.0 + toformat: ^2.0.0 + checksum: 2bb52a473053f50da68254a9521f907fd34c3eb1c67cda9c0cbe1302da245fe5378a31afdad281a20618ec7f4b9be934c3badf8704a9ab2ae5296f90ae4725a8 + languageName: node + linkType: hard + +"@uniswap/sdk-core@npm:^7.10.0, @uniswap/sdk-core@npm:^7.6.0, @uniswap/sdk-core@npm:^7.8.0": + version: 7.10.0 + resolution: "@uniswap/sdk-core@npm:7.10.0" + dependencies: + "@ethersproject/address": ^5.0.2 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": 5.7.0 + "@ethersproject/strings": 5.7.0 + big.js: ^5.2.2 + decimal.js-light: ^2.5.0 + jsbi: ^3.1.4 + tiny-invariant: ^1.1.0 + toformat: ^2.0.0 + checksum: f6386a3905b757cdd0c340d2840cbebc51d39d29556de31c757a7973839aa925cfa9240f364097609b7dd7c1b0d3acbe0808b09202e698e7a94d0d69df56f866 + languageName: node + linkType: hard + +"@uniswap/smart-order-router@npm:3.*": + version: 3.59.0 + resolution: "@uniswap/smart-order-router@npm:3.59.0" dependencies: "@eth-optimism/sdk": ^3.2.2 "@types/brotli": ^1.3.4 "@uniswap/default-token-list": ^11.13.0 "@uniswap/permit2-sdk": ^1.3.0 - "@uniswap/router-sdk": ^1.9.2 - "@uniswap/sdk-core": ^5.3.0 + "@uniswap/router-sdk": ^1.12.0 + "@uniswap/sdk-core": ^5.4.0 "@uniswap/swap-router-contracts": ^1.3.1 "@uniswap/token-lists": ^1.0.0-beta.31 "@uniswap/universal-router": ^1.6.0 - "@uniswap/universal-router-sdk": ^2.2.0 + "@uniswap/universal-router-sdk": ^3.0.2 "@uniswap/v2-sdk": ^4.3.2 "@uniswap/v3-sdk": ^3.13.0 + "@uniswap/v4-sdk": ^1.2.0 async-retry: ^1.3.1 await-timeout: ^1.1.1 axios: ^0.21.1 @@ -12858,7 +12915,7 @@ __metadata: stats-lite: ^2.2.0 peerDependencies: jsbi: ^3.2.0 - checksum: d13f225840c6078111b2eee3e0e6ffe5a9babc5dbe6708d6d67ac6cb8da2661437d33773d8bdad97db01b7b804699b9ed8525874c591ca21a8b09618819bb293 + checksum: ca7dbfbfc614db00faca55702541aa478d124d3654d0a9e5beb1c3c4c2088a2c526e033ba0c7c4a256d6d63d1515e6bae8fc7d8b4254c3c24c3395c5586bb12f languageName: node linkType: hard @@ -12883,23 +12940,38 @@ __metadata: languageName: node linkType: hard -"@uniswap/universal-router-sdk@npm:^2.2.0": - version: 2.2.2 - resolution: "@uniswap/universal-router-sdk@npm:2.2.2" +"@uniswap/universal-router-sdk@npm:^3.0.2": + version: 3.4.0 + resolution: "@uniswap/universal-router-sdk@npm:3.4.0" dependencies: + "@openzeppelin/contracts": 4.7.0 "@uniswap/permit2-sdk": ^1.3.0 - "@uniswap/router-sdk": ^1.9.3 - "@uniswap/sdk-core": ^5.3.1 - "@uniswap/universal-router": 1.6.0 - "@uniswap/v2-sdk": ^4.4.1 - "@uniswap/v3-sdk": ^3.13.1 + "@uniswap/router-sdk": ^1.14.0 + "@uniswap/sdk-core": ^5.8.0 + "@uniswap/universal-router": 2.0.0-beta.1 + "@uniswap/v2-core": ^1.0.1 + "@uniswap/v2-sdk": ^4.6.0 + "@uniswap/v3-core": 1.0.0 + "@uniswap/v3-sdk": ^3.17.0 + "@uniswap/v4-sdk": ^1.6.3 bignumber.js: ^9.0.2 ethers: ^5.7.0 - checksum: 2399ed43d178bf773cbda610c38009c9377a936bc14a33bd296afb52ea4228e76ceeffb2ca064f07663fc8467ba68a0574098b30fc88ee9d3f8be6b205ae16b0 + checksum: 800321d8bc2b5060443dc442140d07bcefc9895bdbe3f8c6e402f79eae7a2c1a8dcc4559833378949cc13c07caa2acc04e10e87141050c8cfdc29e11671037c1 + languageName: node + linkType: hard + +"@uniswap/universal-router@npm:2.0.0-beta.1": + version: 2.0.0-beta.1 + resolution: "@uniswap/universal-router@npm:2.0.0-beta.1" + dependencies: + "@openzeppelin/contracts": 5.0.2 + "@uniswap/v2-core": 1.0.1 + "@uniswap/v3-core": 1.0.0 + checksum: 69a4a294df166f36d07b33f7eb5d519f66574840336d19657c60b42f352d891151258fdb61a6a3266af5fdeafb40f26494a7231605793f526d63f1d5a492f9bb languageName: node linkType: hard -"@uniswap/universal-router@npm:1.6.0, @uniswap/universal-router@npm:^1.6.0": +"@uniswap/universal-router@npm:^1.6.0": version: 1.6.0 resolution: "@uniswap/universal-router@npm:1.6.0" dependencies: @@ -12917,7 +12989,20 @@ __metadata: languageName: node linkType: hard -"@uniswap/v2-sdk@npm:^4.3.2, @uniswap/v2-sdk@npm:^4.4.1": +"@uniswap/v2-sdk@npm:^4.14.0, @uniswap/v2-sdk@npm:^4.6.0": + version: 4.17.0 + resolution: "@uniswap/v2-sdk@npm:4.17.0" + dependencies: + "@ethersproject/address": ^5.0.2 + "@ethersproject/solidity": ^5.0.9 + "@uniswap/sdk-core": ^7.10.0 + tiny-invariant: ^1.1.0 + tiny-warning: ^1.0.3 + checksum: 43dd7b2f7b03d40763ad7145654c91c3b590ddfd37d2c11dfc5ad80b1ab9642406ca49ecdc9b259a16582d7ee97a67f19493239d67415cd7c089fc3d9c070659 + languageName: node + linkType: hard + +"@uniswap/v2-sdk@npm:^4.3.2": version: 4.4.1 resolution: "@uniswap/v2-sdk@npm:4.4.1" dependencies: @@ -12957,6 +13042,22 @@ __metadata: languageName: node linkType: hard +"@uniswap/v3-sdk@npm:3.26.0": + version: 3.26.0 + resolution: "@uniswap/v3-sdk@npm:3.26.0" + dependencies: + "@ethersproject/abi": ^5.5.0 + "@ethersproject/solidity": ^5.0.9 + "@uniswap/sdk-core": ^7.8.0 + "@uniswap/swap-router-contracts": ^1.3.0 + "@uniswap/v3-periphery": ^1.1.1 + "@uniswap/v3-staker": 1.0.0 + tiny-invariant: ^1.1.0 + tiny-warning: ^1.0.3 + checksum: 4e08fd5013b4ba780a4b1c2954aeecc6473daba3947d94671c3b5aa7ff8a596cf58321120b03418dd7078e45b4e4c6a3284af750eba4821b50a7a99918858935 + languageName: node + linkType: hard + "@uniswap/v3-sdk@npm:^3.11.2, @uniswap/v3-sdk@npm:^3.13.0, @uniswap/v3-sdk@npm:^3.13.1": version: 3.13.1 resolution: "@uniswap/v3-sdk@npm:3.13.1" @@ -12973,6 +13074,22 @@ __metadata: languageName: node linkType: hard +"@uniswap/v3-sdk@npm:^3.17.0, @uniswap/v3-sdk@npm:^3.24.1": + version: 3.27.0 + resolution: "@uniswap/v3-sdk@npm:3.27.0" + dependencies: + "@ethersproject/abi": ^5.5.0 + "@ethersproject/solidity": ^5.0.9 + "@uniswap/sdk-core": ^7.10.0 + "@uniswap/swap-router-contracts": ^1.3.0 + "@uniswap/v3-periphery": ^1.1.1 + "@uniswap/v3-staker": 1.0.0 + tiny-invariant: ^1.1.0 + tiny-warning: ^1.0.3 + checksum: 93c72fb45557b8d86ee00ee15c16d0f2bb543eace88664491de791cc36dbb7ba9326de397eb9292b2b4718de90fdd64982e911bc1bce90a7b57a6298395bfd2f + languageName: node + linkType: hard + "@uniswap/v3-staker@npm:1.0.0": version: 1.0.0 resolution: "@uniswap/v3-staker@npm:1.0.0" @@ -12984,6 +13101,19 @@ __metadata: languageName: node linkType: hard +"@uniswap/v4-sdk@npm:^1.2.0, @uniswap/v4-sdk@npm:^1.20.0, @uniswap/v4-sdk@npm:^1.6.3": + version: 1.25.0 + resolution: "@uniswap/v4-sdk@npm:1.25.0" + dependencies: + "@ethersproject/solidity": ^5.0.9 + "@uniswap/sdk-core": ^7.10.0 + "@uniswap/v3-sdk": 3.26.0 + tiny-invariant: ^1.1.0 + tiny-warning: ^1.0.3 + checksum: 181f768ee648d1c690cdc8ca8e1b1903f2e43d1fa4f69dde0812cac406483f19217e7156ac425ae939f3e65068ffb4d5be7ee877972d77b48a2b207b5c3d7564 + languageName: node + linkType: hard + "@usedapp/core@npm:^1.2.10": version: 1.2.13 resolution: "@usedapp/core@npm:1.2.13"