diff --git a/.github/workflows/develop-pipeline.yml b/.github/workflows/develop-pipeline.yml deleted file mode 100644 index f4b1fbb1c..000000000 --- a/.github/workflows/develop-pipeline.yml +++ /dev/null @@ -1,110 +0,0 @@ -name: develop-pipeline - -on: - push: - branches: - - develop - pull_request: - branches: - - develop -jobs: - test: - runs-on: ubuntu-latest - services: - # Label used to access the service container - redis: - # Docker Hub image - image: redis - # Set health checks to wait until redis has started - options: >- - --health-cmd "redis-cli ping" - --health-interval 10s - --health-timeout 5s - --health-retries 5 - ports: - - 6379:6379 - postgres: - # Use this postgres image https://github.com/Giveth/postgres-givethio - image: ghcr.io/giveth/postgres-givethio:latest - env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - POSTGRES_DB: givethio - PGDATA: /var/lib/postgresql/data/pgdata - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - ports: - - 5443:5432 - steps: - - uses: actions/checkout@v1 - - name: Use Node.js - uses: actions/setup-node@v1 - with: - node-version: 20.11.0 - - name: Install dependencies - run: npm ci - - name: Run eslint - run: npm run eslint - - name: Run build - run: npm run build - - name: Run migrations - run: npm run db:migrate:run:test - - name: Run tests - run: npm run test - env: - ETHERSCAN_API_KEY: ${{ secrets.ETHERSCAN_API_KEY }} - XDAI_NODE_HTTP_URL: ${{ secrets.XDAI_NODE_HTTP_URL }} - INFURA_API_KEY: ${{ secrets.INFURA_API_KEY }} - INFURA_ID: ${{ secrets.INFURA_ID }} - POLYGON_SCAN_API_KEY: ${{ secrets.POLYGON_SCAN_API_KEY }} - OPTIMISTIC_SCAN_API_KEY: ${{ secrets.OPTIMISTIC_SCAN_API_KEY }} - CELO_SCAN_API_KEY: ${{ secrets.CELO_SCAN_API_KEY }} - CELO_ALFAJORES_SCAN_API_KEY: ${{ secrets.CELO_ALFAJORES_SCAN_API_KEY }} - ARBITRUM_SCAN_API_KEY: ${{ secrets.ARBITRUM_SCAN_API_KEY }} - ARBITRUM_SEPOLIA_SCAN_API_KEY: ${{ secrets.ARBITRUM_SEPOLIA_SCAN_API_KEY }} - BASE_SCAN_API_KEY: ${{ secrets.BASE_SCAN_API_KEY }} - BASE_SEPOLIA_SCAN_API_KEY: ${{ secrets.BASE_SEPOLIA_SCAN_API_KEY }} - ZKEVM_MAINNET_SCAN_API_KEY: ${{ secrets.ZKEVM_MAINNET_SCAN_API_KEY }} - ZKEVM_CARDONA_SCAN_API_KEY: ${{ secrets.ZKEVM_CARDONA_SCAN_API_KEY }} - MORDOR_ETC_TESTNET: ${{ secrets.MORDOR_ETC_TESTNET }} - ETC_NODE_HTTP_URL: ${{ secrets.ETC_NODE_HTTP_URL }} - SOLANA_TEST_NODE_RPC_URL: ${{ secrets.SOLANA_TEST_NODE_RPC_URL }} - SOLANA_DEVNET_NODE_RPC_URL: ${{ secrets.SOLANA_DEVNET_NODE_RPC_URL }} - SOLANA_MAINNET_NODE_RPC_URL: ${{ secrets.SOLANA_MAINNET_NODE_RPC_URL }} - MPETH_GRAPHQL_PRICES_URL: ${{ secrets.MPETH_GRAPHQL_PRICES_URL }} - - publish: - needs: test - runs-on: ubuntu-latest - if: github.event_name == 'push' - steps: - - name: Check out the repo - uses: actions/checkout@v2 - - name: Build image and push to GitHub Packages - uses: docker/build-push-action@v1 - with: - username: ${{ github.actor }} - password: ${{ github.token }} - registry: ghcr.io - repository: giveth/impact-graph - add_git_labels: true - # Add branch name to docker image tag @see{@link https://github.com/docker/build-push-action/tree/releases/v1#tag_with_ref} - tag_with_ref: true - # Add commit hash to docker image tag @see{@link https://github.com/docker/build-push-action/tree/releases/v1#tag_with_sha} - tag_with_sha: true - - deploy: - needs: publish - runs-on: ubuntu-latest - if: github.event_name == 'push' - steps: - - name: Develop deploy - uses: garygrossgarten/github-action-ssh@v0.6.4 - with: - command: cd impact-graph && git checkout develop && git pull && docker-compose -f docker-compose-develop.yml pull && docker-compose -f docker-compose-develop.yml down && docker-compose -f docker-compose-develop.yml up -d && docker image prune -a --force; - host: ${{ secrets.DEVELOP_HOST }} - username: ${{ secrets.DEVELOP_USERNAME }} - privateKey: ${{ secrets.DEVELOP_PRIVATE_KEY}} diff --git a/.github/workflows/master-pipeline.yml b/.github/workflows/master-pipeline.yml index 14e0b2483..bdb621caa 100644 --- a/.github/workflows/master-pipeline.yml +++ b/.github/workflows/master-pipeline.yml @@ -43,22 +43,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@v1 - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v2 - with: - aws-access-key-id: ${{ secrets.AWS_S3_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_S3_SECRET_ACCESS_KEY }} - aws-region: ${{ secrets.AWS_S3_REGION }} - - - name: Download latest DB backup from S3 - run: | - FILENAME=$(aws s3 ls ${{ secrets.AWS_S3_BUCKET_PATH_PROD }}/ | sort | tail -n 1 | awk '{print $4}') - aws s3 cp ${{ secrets.AWS_S3_BUCKET_PATH_PROD }}/$FILENAME /tmp/db_backup.zip - - - name: Unzip DB backup - run: | - unzip /tmp/db_backup.zip -d /tmp - mv /tmp/backups/givethio-db/*.sql /tmp/backups/givethio-db/db_backup.sql - name: Wait for PostgreSQL to become ready run: | @@ -69,9 +53,6 @@ jobs: sleep 1 done - - name: Restore DB backup - run: PGPASSWORD=postgres psql -h localhost -p 5443 -U postgres -d givethio < /tmp/backups/givethio-db/db_backup.sql - - name: Use Node.js uses: actions/setup-node@v1 with: @@ -127,7 +108,7 @@ jobs: username: ${{ github.actor }} password: ${{ github.token }} registry: ghcr.io - repository: giveth/impact-graph + repository: generalmagicio/qacc-be # todo: check this to be correct, I just set that to be different from giveth/impact-graph add_git_labels: true # Add branch name to docker image tag @see{@link https://github.com/docker/build-push-action/tree/releases/v1#tag_with_ref} tag_with_ref: true diff --git a/.github/workflows/staging-pipeline.yml b/.github/workflows/staging-pipeline.yml index b4d3111c0..c182f9eed 100644 --- a/.github/workflows/staging-pipeline.yml +++ b/.github/workflows/staging-pipeline.yml @@ -68,22 +68,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@v1 - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v2 - with: - aws-access-key-id: ${{ secrets.AWS_S3_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_S3_SECRET_ACCESS_KEY }} - aws-region: ${{ secrets.AWS_S3_REGION }} - - - name: Download latest DB backup from S3 - run: | - FILENAME=$(aws s3 ls ${{ secrets.AWS_S3_BUCKET_PATH_STAGING }}/ | sort | tail -n 1 | awk '{print $4}') - aws s3 cp ${{ secrets.AWS_S3_BUCKET_PATH_STAGING }}/$FILENAME /tmp/db_backup.zip - - - name: Unzip DB backup - run: | - unzip /tmp/db_backup.zip -d /tmp - mv /tmp/backups/givethio-staging/*.sql /tmp/backups/givethio-staging/db_backup.sql - name: Wait for PostgreSQL to become ready run: | @@ -94,9 +78,6 @@ jobs: sleep 1 done - - name: Restore DB backup - run: PGPASSWORD=postgres psql -h localhost -p 5443 -U postgres -d givethio < /tmp/backups/givethio-staging/db_backup.sql - - name: Use Node.js uses: actions/setup-node@v1 with: @@ -117,27 +98,7 @@ jobs: - name: Run tests run: npm run test env: - ETHERSCAN_API_KEY: ${{ secrets.ETHERSCAN_API_KEY }} - XDAI_NODE_HTTP_URL: ${{ secrets.XDAI_NODE_HTTP_URL }} - INFURA_API_KEY: ${{ secrets.INFURA_API_KEY }} - INFURA_ID: ${{ secrets.INFURA_ID }} - POLYGON_SCAN_API_KEY: ${{ secrets.POLYGON_SCAN_API_KEY }} - OPTIMISTIC_SCAN_API_KEY: ${{ secrets.OPTIMISTIC_SCAN_API_KEY }} - CELO_SCAN_API_KEY: ${{ secrets.CELO_SCAN_API_KEY }} - CELO_ALFAJORES_SCAN_API_KEY: ${{ secrets.CELO_ALFAJORES_SCAN_API_KEY }} - ARBITRUM_SCAN_API_KEY: ${{ secrets.ARBITRUM_SCAN_API_KEY }} - ARBITRUM_SEPOLIA_SCAN_API_KEY: ${{ secrets.ARBITRUM_SEPOLIA_SCAN_API_KEY }} - BASE_SCAN_API_KEY: ${{ secrets.BASE_SCAN_API_KEY }} - BASE_SEPOLIA_SCAN_API_KEY: ${{ secrets.BASE_SEPOLIA_SCAN_API_KEY }} - ZKEVM_MAINNET_SCAN_API_KEY: ${{ secrets.ZKEVM_MAINNET_SCAN_API_KEY }} - ZKEVM_CARDONA_SCAN_API_KEY: ${{ secrets.ZKEVM_CARDONA_SCAN_API_KEY }} - MORDOR_ETC_TESTNET: ${{ secrets.MORDOR_ETC_TESTNET }} - ETC_NODE_HTTP_URL: ${{ secrets.ETC_NODE_HTTP_URL }} DROP_DATABASE: ${{ secrets.DROP_DATABASE_DURING_TEST_STAGING }} - SOLANA_TEST_NODE_RPC_URL: ${{ secrets.SOLANA_TEST_NODE_RPC_URL }} - SOLANA_DEVNET_NODE_RPC_URL: ${{ secrets.SOLANA_DEVNET_NODE_RPC_URL }} - SOLANA_MAINNET_NODE_RPC_URL: ${{ secrets.SOLANA_MAINNET_NODE_RPC_URL }} - MPETH_GRAPHQL_PRICES_URL: ${{ secrets.MPETH_GRAPHQL_PRICES_URL }} publish: needs: test diff --git a/.mocharc.all-test.json b/.mocharc.all-test.json index d8010a893..d6065f467 100644 --- a/.mocharc.all-test.json +++ b/.mocharc.all-test.json @@ -3,8 +3,7 @@ "spec": [ "./test/pre-test-scripts.ts", "./src/**/*.test.ts", - "./src/**/**/*.test.ts", - "./migration/tests/*.test.ts" + "./src/**/**/*.test.ts" ], "timeout": 90000, "exit": true, diff --git a/package.json b/package.json index e2ca1d90c..93e7a5d0d 100644 --- a/package.json +++ b/package.json @@ -114,7 +114,6 @@ "eslint:fix": "eslint --fix {src,test,migration}/**/*.ts", "test": "NODE_ENV=test mocha --config ./.mocharc.all-test.json", "test:syncProjectsRequiredForListing": "NODE_ENV=test mocha ./test/pre-test-scripts.ts ./src/services/cronJobs/syncProjectsRequiredForListing.test.ts", - "test:migrations": "NODE_ENV=test mocha ./test/pre-test-scripts.ts migration/tests/*.ts", "test:backupDonationImport": "NODE_ENV=test mocha ./test/pre-test-scripts.ts ./src/services/cronJobs/backupDonationImport.test.ts", "test:projectEntity": "NODE_ENV=test mocha ./test/pre-test-scripts.ts ./src/entities/project.test.ts", "test:projectValidators": "NODE_ENV=test mocha ./test/pre-test-scripts.ts ./src/utils/validators/projectValidator.test.ts", diff --git a/src/provider.ts b/src/provider.ts index aa8062928..9cba2831d 100644 --- a/src/provider.ts +++ b/src/provider.ts @@ -9,52 +9,21 @@ export const NETWORK_IDS = { MAIN_NET: 1, ROPSTEN: 3, GOERLI: 5, - XDAI: 100, POLYGON: 137, OPTIMISTIC: 10, OPTIMISM_SEPOLIA: 11155420, - BSC: 56, - CELO: 42220, - CELO_ALFAJORES: 44787, - ETC: 61, - MORDOR_ETC_TESTNET: 63, - - ARBITRUM_MAINNET: 42161, - ARBITRUM_SEPOLIA: 421614, - - BASE_MAINNET: 8453, - BASE_SEPOLIA: 84532, ZKEVM_MAINNET: 1101, ZKEVM_CARDONA: 2442, - - // https://docs.particle.network/developers/other-services/node-service/solana-api - SOLANA_MAINNET: 101, - SOLANA_TESTNET: 102, - SOLANA_DEVNET: 103, }; export const superTokensToToken = { ETHx: 'ETH', USDCx: 'USDC', - DAIx: 'DAI', OPx: 'OP', - GIVx: 'GIV', }; export const superTokens = [ - { - underlyingToken: { - decimals: 18, - id: '0x2f2c819210191750F2E11F7CfC5664a0eB4fd5e6', - name: 'Giveth', - symbol: 'GIV', - }, - decimals: 18, - id: '0xdfd824f6928b9776c031f7ead948090e2824ce8b', - name: 'fake Super Giveth Token', - symbol: 'GIVx', - }, { underlyingToken: { name: 'Ethereum', @@ -91,30 +60,6 @@ export const superTokens = [ name: 'Super ETH', symbol: 'ETHx', }, - { - underlyingToken: { - decimals: 18, - id: '0x528cdc92eab044e1e39fe43b9514bfdab4412b98', - name: 'Giveth Token', - symbol: 'GIV', - }, - decimals: 18, - id: '0x4cab5b9930210e2edc6a905b9c75d615872a1a7e', - name: 'Super Giveth Token', - symbol: 'GIVx', - }, - { - underlyingToken: { - decimals: 18, - id: '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', - name: 'Dai Stablecoin', - symbol: 'DAI', - }, - decimals: 18, - id: '0x7d342726b69c28d942ad8bfe6ac81b972349d524', - name: 'Super Dai Stablecoin', - symbol: 'DAIx', - }, { underlyingToken: { decimals: 6, @@ -133,88 +78,41 @@ export const NETWORKS_IDS_TO_NAME = { 1: 'MAIN_NET', 3: 'ROPSTEN', 5: 'GOERLI', - 100: 'GNOSIS', - 56: 'BSC', 137: 'POLYGON', - 42220: 'CELO', - 44787: 'CELO_ALFAJORES', 10: 'OPTIMISTIC', 11155420: 'OPTIMISM_SEPOLIA', - 61: 'ETC', - 63: 'MORDOR_ETC_TESTNET', - 42161: 'ARBITRUM_MAINNET', - 421614: 'ARBITRUM_SEPOLIA', - - 8453: 'BASE_MAINNET', - 84532: 'BASE_SEPOLIA', - 1101: 'ZKEVM_MAINNET', 2442: 'ZKEVM_CARDONA', - - 101: 'SOLANA_MAINNET', - 102: 'SOLANA_TESTNET', - 103: 'SOLANA_DEVNET', }; const NETWORK_NAMES = { - BSC: 'bsc', - XDAI: 'xdaichain', MAINNET: 'mainnet', ROPSTEN: 'ropsten', GOERLI: 'goerli', POLYGON: 'polygon-mainnet', OPTIMISTIC: 'optimistic-mainnet', OPTIMISM_SEPOLIA: 'optimism-sepolia-testnet', - CELO: 'Celo', - CELO_ALFAJORES: 'Celo Alfajores', - ETC: 'Ethereum Classic', - MORDOR_ETC_TESTNET: 'Ethereum Classic Testnet', - ARBITRUM_MAINNET: 'Arbitrum Mainnet', - ARBITRUM_SEPOLIA: 'Arbitrum Sepolia', - BASE_MAINNET: 'Base Mainnet', - BASE_SEPOLIA: 'Base Sepolia', - ZKEVM_CARDONA: 'ZKEVM Cardona', ZKEVM_MAINNET: 'ZKEVM Mainnet', }; const NETWORK_NATIVE_TOKENS = { - BSC: 'BNB', - XDAI: 'XDAI', MAINNET: 'ETH', ROPSTEN: 'ETH', GOERLI: 'ETH', POLYGON: 'MATIC', OPTIMISTIC: 'ETH', OPTIMISM_SEPOLIA: 'ETH', - CELO: 'CELO', - CELO_ALFAJORES: 'CELO', - ETC: 'ETC', - MORDOR_ETC_TESTNET: 'mETC', - ARBITRUM_MAINNET: 'ETH', - ARBITRUM_SEPOLIA: 'ETH', - BASE_MAINNET: 'ETH', - BASE_SEPOLIA: 'ETH', ZKEVM_MAINNET: 'ETH', ZKEVM_CARDONA: 'ETH', }; const networkNativeTokensList = [ - { - networkName: NETWORK_NAMES.BSC, - networkId: NETWORK_IDS.BSC, - nativeToken: NETWORK_NATIVE_TOKENS.BSC, - }, { networkName: NETWORK_NAMES.MAINNET, networkId: NETWORK_IDS.MAIN_NET, nativeToken: NETWORK_NATIVE_TOKENS.MAINNET, }, - { - networkName: NETWORK_NAMES.XDAI, - networkId: NETWORK_IDS.XDAI, - nativeToken: NETWORK_NATIVE_TOKENS.XDAI, - }, { networkName: NETWORK_NAMES.ROPSTEN, networkId: NETWORK_IDS.ROPSTEN, @@ -240,46 +138,6 @@ const networkNativeTokensList = [ networkId: NETWORK_IDS.OPTIMISM_SEPOLIA, nativeToken: NETWORK_NATIVE_TOKENS.OPTIMISM_SEPOLIA, }, - { - networkName: NETWORK_NAMES.CELO, - networkId: NETWORK_IDS.CELO, - nativeToken: NETWORK_NATIVE_TOKENS.CELO, - }, - { - networkName: NETWORK_NAMES.CELO_ALFAJORES, - networkId: NETWORK_IDS.CELO_ALFAJORES, - nativeToken: NETWORK_NATIVE_TOKENS.CELO_ALFAJORES, - }, - { - networkName: NETWORK_NAMES.ETC, - networkId: NETWORK_IDS.ETC, - nativeToken: NETWORK_NATIVE_TOKENS.ETC, - }, - { - networkName: NETWORK_NAMES.MORDOR_ETC_TESTNET, - networkId: NETWORK_IDS.MORDOR_ETC_TESTNET, - nativeToken: NETWORK_NATIVE_TOKENS.MORDOR_ETC_TESTNET, - }, - { - networkName: NETWORK_NAMES.ARBITRUM_MAINNET, - networkId: NETWORK_IDS.ARBITRUM_MAINNET, - nativeToken: NETWORK_NATIVE_TOKENS.ARBITRUM_MAINNET, - }, - { - networkName: NETWORK_NAMES.ARBITRUM_SEPOLIA, - networkId: NETWORK_IDS.ARBITRUM_SEPOLIA, - nativeToken: NETWORK_NATIVE_TOKENS.ARBITRUM_SEPOLIA, - }, - { - networkName: NETWORK_NAMES.BASE_MAINNET, - networkId: NETWORK_IDS.BASE_MAINNET, - nativeToken: NETWORK_NATIVE_TOKENS.BASE_MAINNET, - }, - { - networkName: NETWORK_NAMES.BASE_SEPOLIA, - networkId: NETWORK_IDS.BASE_SEPOLIA, - nativeToken: NETWORK_NATIVE_TOKENS.BASE_SEPOLIA, - }, { networkName: NETWORK_NAMES.ZKEVM_MAINNET, networkId: NETWORK_IDS.ZKEVM_MAINNET, @@ -329,64 +187,9 @@ export function getProvider(networkId: number) { let url; let options; switch (networkId) { - case NETWORK_IDS.MORDOR_ETC_TESTNET: - url = - (process.env.MORDOR_ETC_TESTNET as string) || - `https://rpc.mordor.etccooperative.org`; - break; - case NETWORK_IDS.ETC: - url = process.env.ETC_NODE_HTTP_URL as string; - break; - case NETWORK_IDS.XDAI: - url = process.env.XDAI_NODE_HTTP_URL as string; - break; - - case NETWORK_IDS.BSC: - // 'https://bsc-dataseed.binance.org/' - url = process.env.BSC_NODE_HTTP_URL as string; - options = { name: NETWORK_NAMES.BSC, chainId: NETWORK_IDS.BSC }; - break; - - case NETWORK_IDS.CELO: - url = - (process.env.CELO_NODE_HTTP_URL as string) || - `https://celo-mainnet.infura.io/v3/${INFURA_ID}`; - break; - - case NETWORK_IDS.CELO_ALFAJORES: - url = - (process.env.CELO_ALFAJORES_NODE_HTTP_URL as string) || - `https://celo-alfajores.infura.io/v3/${INFURA_ID}`; - break; - case NETWORK_IDS.OPTIMISM_SEPOLIA: url = `https://optimism-sepolia.infura.io/v3/${INFURA_ID}`; break; - - case NETWORK_IDS.ARBITRUM_MAINNET: - url = - (process.env.ARBITRUM_MAINNET_NODE_HTTP_URL as string) || - `https://arbitrum-mainnet.infura.io/v3/${INFURA_ID}`; - break; - - case NETWORK_IDS.ARBITRUM_SEPOLIA: - url = - (process.env.ARBITRUM_SEPOLIA_NODE_HTTP_URL as string) || - `https://arbitrum-sepolia.infura.io/v3/${INFURA_ID}`; - break; - - case NETWORK_IDS.BASE_MAINNET: - url = - (process.env.BASE_MAINNET_NODE_HTTP_URL as string) || - `https://base-mainnet.infura.io/v3/${INFURA_ID}`; - break; - - case NETWORK_IDS.BASE_SEPOLIA: - url = - (process.env.BASE_SEPOLIA_NODE_HTTP_URL as string) || - `https://base-sepolia.infura.io/v3/${INFURA_ID}`; - break; - // Infura doesn support Polygon ZKEVM case NETWORK_IDS.ZKEVM_MAINNET: url = process.env.ZKEVM_MAINNET_NODE_HTTP_URL as string; @@ -425,10 +228,6 @@ export function getBlockExplorerApiUrl(networkId: number): string { let apiUrl; let apiKey; switch (networkId) { - case NETWORK_IDS.XDAI: - apiUrl = config.get('GNOSISSCAN_API_URL'); - apiKey = config.get('GNOSISSCAN_API_KEY'); - break; case NETWORK_IDS.MAIN_NET: apiUrl = config.get('ETHERSCAN_MAINNET_API_URL'); apiKey = config.get('ETHERSCAN_API_KEY'); @@ -445,14 +244,6 @@ export function getBlockExplorerApiUrl(networkId: number): string { apiUrl = config.get('POLYGON_SCAN_API_URL'); apiKey = config.get('POLYGON_SCAN_API_KEY'); break; - case NETWORK_IDS.CELO: - apiUrl = config.get('CELO_SCAN_API_URL'); - apiKey = config.get('CELO_SCAN_API_KEY'); - break; - case NETWORK_IDS.CELO_ALFAJORES: - apiUrl = config.get('CELO_ALFAJORES_SCAN_API_URL'); - apiKey = config.get('CELO_ALFAJORES_SCAN_API_KEY'); - break; case NETWORK_IDS.OPTIMISTIC: apiUrl = config.get('OPTIMISTIC_SCAN_API_URL'); apiKey = config.get('OPTIMISTIC_SCAN_API_KEY'); @@ -461,28 +252,6 @@ export function getBlockExplorerApiUrl(networkId: number): string { apiUrl = config.get('OPTIMISTIC_SEPOLIA_SCAN_API_URL'); apiKey = config.get('OPTIMISTIC_SEPOLIA_SCAN_API_KEY'); break; - case NETWORK_IDS.ETC: - // ETC network doesn't need API key - return config.get('ETC_SCAN_API_URL') as string; - case NETWORK_IDS.MORDOR_ETC_TESTNET: - // ETC network doesn't need API key - return config.get('MORDOR_ETC_TESTNET_SCAN_API_URL') as string; - case NETWORK_IDS.ARBITRUM_MAINNET: - apiUrl = config.get('ARBITRUM_SCAN_API_URL'); - apiKey = config.get('ARBITRUM_SCAN_API_KEY'); - break; - case NETWORK_IDS.ARBITRUM_SEPOLIA: - apiUrl = config.get('ARBITRUM_SEPOLIA_SCAN_API_URL'); - apiKey = config.get('ARBITRUM_SEPOLIA_SCAN_API_KEY'); - break; - case NETWORK_IDS.BASE_MAINNET: - apiUrl = config.get('BASE_SCAN_API_URL'); - apiKey = config.get('BASE_SCAN_API_KEY'); - break; - case NETWORK_IDS.BASE_SEPOLIA: - apiUrl = config.get('BASE_SEPOLIA_SCAN_API_URL'); - apiKey = config.get('BASE_SEPOLIA_SCAN_API_KEY'); - break; case NETWORK_IDS.ZKEVM_MAINNET: apiUrl = config.get('ZKEVM_MAINNET_SCAN_API_URL'); apiKey = config.get('ZKEVM_MAINET_SCAN_API_KEY'); diff --git a/src/repositories/projectAddressRepository.test.ts b/src/repositories/projectAddressRepository.test.ts index 1df448209..57a214f62 100644 --- a/src/repositories/projectAddressRepository.test.ts +++ b/src/repositories/projectAddressRepository.test.ts @@ -87,7 +87,7 @@ function removeRelatedAddressOfProjectTestCases() { assert.isOk( await findProjectRecipientAddressByNetworkId({ projectId: project.id, - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, }), ); await removeRecipientAddressOfProject({ project }); @@ -95,7 +95,7 @@ function removeRelatedAddressOfProjectTestCases() { assert.notOk( await findProjectRecipientAddressByNetworkId({ projectId: project.id, - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, }), ); }); @@ -110,7 +110,7 @@ function removeRelatedAddressOfProjectTestCases() { assert.isOk( await findProjectRecipientAddressByNetworkId({ projectId: project.id, - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, }), ); await removeRecipientAddressOfProject({ project }); @@ -147,7 +147,7 @@ function addNewProjectAddressTestCases() { const newAddress = generateRandomEtheriumAddress(); const newRelatedAddress = await addNewProjectAddress({ address: newAddress, - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, project, user, chainType: ChainType.EVM, @@ -205,7 +205,7 @@ function addBulkNewProjectAddressTestCases() { await addBulkNewProjectAddress([ { address: newAddress, - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, chainType: ChainType.EVM, project, user, @@ -232,22 +232,22 @@ function addBulkNewProjectAddressTestCases() { await addBulkNewProjectAddress([ { address: newAddress1, - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, chainType: ChainType.EVM, project, user, }, { address: newAddress2, - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, chainType: ChainType.EVM, project, user, }, { address: newAddress3, - networkId: 0, - chainType: ChainType.SOLANA, + networkId: NETWORK_IDS.MAIN_NET, + chainType: ChainType.EVM, project, user, }, @@ -276,10 +276,10 @@ function findProjectRecipientAddressByNetworkIdTestCases() { }); const recipientAddress = await findProjectRecipientAddressByNetworkId({ projectId: project.id, - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, }); assert.equal(recipientAddress?.address, walletAddress); - assert.equal(recipientAddress?.networkId, NETWORK_IDS.XDAI); + assert.equal(recipientAddress?.networkId, NETWORK_IDS.MAIN_NET); assert.isTrue(recipientAddress?.isRecipient); }); } diff --git a/src/repositories/projectAddressRepository.ts b/src/repositories/projectAddressRepository.ts index 69adcfc76..bd45acebb 100644 --- a/src/repositories/projectAddressRepository.ts +++ b/src/repositories/projectAddressRepository.ts @@ -44,11 +44,6 @@ export const findRelatedAddressByWalletAddress = async ( let query = ProjectAddress.createQueryBuilder('projectAddress'); switch (chainType) { - case ChainType.SOLANA: - query = query.where(`address = :walletAddress`, { - walletAddress, - }); - break; case ChainType.EVM: default: query = query.where(`LOWER(address) = :walletAddress`, { diff --git a/src/repositories/projectVerificationRepository.test.ts b/src/repositories/projectVerificationRepository.test.ts index b1c60e628..2cb0e86ee 100644 --- a/src/repositories/projectVerificationRepository.test.ts +++ b/src/repositories/projectVerificationRepository.test.ts @@ -28,7 +28,6 @@ import { verifyForm, verifyMultipleForms, } from './projectVerificationRepository'; -import { ChainType } from '../types/network'; describe( 'createProjectVerificationForm test cases', @@ -271,13 +270,12 @@ function updateManagingFundsOfProjectVerificationTestCases() { { title: 'secondAddress', address: generateRandomEtheriumAddress(), - networkId: 100, + networkId: 10, }, { title: 'thirdAddress', address: generateRandomSolanaAddress(), - networkId: 0, - chainType: ChainType.SOLANA, + networkId: 1101, }, ], }; diff --git a/src/resolvers/donationResolver.test.ts b/src/resolvers/donationResolver.test.ts index 1e2c3e6a2..0d3435690 100644 --- a/src/resolvers/donationResolver.test.ts +++ b/src/resolvers/donationResolver.test.ts @@ -13,8 +13,6 @@ import { createDonationData, saveUserDirectlyToDb, generateUserIdLessAccessToken, - generateRandomSolanaAddress, - generateRandomSolanaTxHash, deleteProjectDirectlyFromDb, } from '../../test/testUtils'; import { errorMessages } from '../utils/errorMessages'; @@ -46,8 +44,6 @@ import { generateRandomString } from '../utils/utils'; import { getChainvineAdapter } from '../adapters/adaptersFactory'; import { firstOrCreateReferredEventByUserId } from '../repositories/referredEventRepository'; import { QfRound } from '../entities/qfRound'; -import { ChainType } from '../types/network'; -import { getDefaultSolanaChainId } from '../services/chains'; import { DRAFT_DONATION_STATUS, DraftDonation, @@ -907,7 +903,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), nonce: 1, amount: 10, @@ -929,7 +925,7 @@ function createDonationTestCases() { }); assert.isNotOk(donation?.referrerWallet); }); - it('should create a donation for giveth project on xdai successfully with referralId', async () => { + it('should create a donation for giveth project on MAIN_NET successfully with referralId', async () => { const project = await saveProjectDirectlyToDb(createProjectData()); const referrerId = generateRandomString(); const referrerWalletAddress = @@ -958,7 +954,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), nonce: 1, amount: 10, @@ -1023,7 +1019,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), nonce: 1, amount: 10, @@ -1049,98 +1045,7 @@ function createDonationTestCases() { await qfRound.save(); }); - it('should create a solana donation successfully', async () => { - const project = await saveProjectDirectlyToDb(createProjectData()); - await project.save(); - - const user = await User.create({ - walletAddress: generateRandomSolanaAddress(), - loginType: 'wallet', - firstName: 'first name', - }).save(); - const transactionId = - '5GAnyapzrTdjhc3xNH6Nsf61xcu1vGRBd7MDXZbx8waKEznSjMtqdgTwHBhrBcrkqTfusHAzeoV3kAVpr6aFXU6j'; - - const accessToken = await generateTestAccessToken(user.id); - const saveDonationResponse = await axios.post( - graphqlUrl, - { - query: createDonationMutation, - variables: { - projectId: project.id, - transactionNetworkId: 0, - chainType: ChainType.SOLANA, - transactionId, - nonce: 1, - amount: 10, - token: 'SOL', - tokenAddress: '11111111111111111111111111111111', - }, - }, - { - headers: { - Authorization: `Bearer ${accessToken}`, - }, - }, - ); - assert.isOk(saveDonationResponse.data.data.createDonation); - const donation = await Donation.findOne({ - where: { - id: saveDonationResponse.data.data.createDonation, - }, - }); - assert.equal(donation?.transactionId, transactionId); - assert.equal(donation?.transactionNetworkId, getDefaultSolanaChainId()); - assert.equal(donation?.chainType, ChainType.SOLANA); - }); - - it('should create a solana donation successfully - 2', async () => { - const project = await saveProjectDirectlyToDb(createProjectData()); - await project.save(); - - const user = await User.create({ - walletAddress: generateRandomSolanaAddress(), - loginType: 'wallet', - firstName: 'first name', - }).save(); - // transction id with 87 characters in encoding format - const transactionId = - 'Z5ZmUhg3bavaX7SMTqapCMNUAJEHWRpvZn884QgHHdbgN1vQ29cxKwoZfprMFdPqNYKScrEpJcXf3br82nDwawR'; - - const accessToken = await generateTestAccessToken(user.id); - const saveDonationResponse = await axios.post( - graphqlUrl, - { - query: createDonationMutation, - variables: { - projectId: project.id, - transactionNetworkId: NETWORK_IDS.SOLANA_MAINNET, - chainType: ChainType.SOLANA, - transactionId, - nonce: 0, - amount: 100, - token: 'SOL', - tokenAddress: '11111111111111111111111111111111', - }, - }, - { - headers: { - Authorization: `Bearer ${accessToken}`, - }, - }, - ); - assert.isOk(saveDonationResponse.data.data.createDonation); - const donation = await Donation.findOne({ - where: { - id: saveDonationResponse.data.data.createDonation, - }, - }); - assert.equal(donation?.transactionId, transactionId); - assert.equal(donation?.transactionNetworkId, getDefaultSolanaChainId()); - assert.equal(donation?.chainType, ChainType.SOLANA); - }); - - it('should create a donation in an active qfRound when qfround has network eligiblity on XDAI', async () => { + it('should create a donation in an active qfRound when qfround has network eligiblity on MAIN_NET', async () => { const project = await saveProjectDirectlyToDb(createProjectData()); const qfRound = await QfRound.create({ isActive: true, @@ -1148,7 +1053,7 @@ function createDonationTestCases() { minimumPassportScore: 8, slug: new Date().getTime().toString(), allocatedFund: 100, - eligibleNetworks: [100], // accepts ONLY xdai to mark as part of QFround + eligibleNetworks: [NETWORK_IDS.MAIN_NET], // accepts ONLY MainNet to mark as part of QFround beginDate: new Date(), endDate: moment().add(2, 'day'), }).save(); @@ -1174,15 +1079,15 @@ function createDonationTestCases() { referredEvent.startTime = new Date(); await referredEvent.save(); - // should save Xdai + // should save MainNet const accessToken = await generateTestAccessToken(user.id); - const saveDonationResponseXdai = await axios.post( + const saveDonationResponseMainNet = await axios.post( graphqlUrl, { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), nonce: 1, amount: 10, @@ -1196,23 +1101,23 @@ function createDonationTestCases() { }, }, ); - assert.isOk(saveDonationResponseXdai.data.data.createDonation); + assert.isOk(saveDonationResponseMainNet.data.data.createDonation); const donation = await Donation.findOne({ where: { - id: saveDonationResponseXdai.data.data.createDonation, + id: saveDonationResponseMainNet.data.data.createDonation, }, }); assert.equal(donation?.qfRound?.id as number, qfRound.id); - // should ignore non xdai donations because its not an eligible network - const saveDonationResponseNotXdai = await axios.post( + // should ignore non MAIN_NET donations because its not an eligible network + const saveDonationResponseNotMainNet = await axios.post( graphqlUrl, { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.CELO, + transactionNetworkId: NETWORK_IDS.ZKEVM_MAINNET, transactionId: generateRandomEvmTxHash(), nonce: 1, amount: 10, @@ -1226,10 +1131,10 @@ function createDonationTestCases() { }, }, ); - assert.isOk(saveDonationResponseNotXdai.data.data.createDonation); + assert.isOk(saveDonationResponseNotMainNet.data.data.createDonation); const donationNotFromQF = await Donation.findOne({ where: { - id: saveDonationResponseNotXdai.data.data.createDonation, + id: saveDonationResponseNotMainNet.data.data.createDonation, }, }); assert.isNull(donationNotFromQF?.qfRound); @@ -1278,7 +1183,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), nonce: 1, amount: 10, @@ -1345,7 +1250,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), nonce: 1, amount: 10, @@ -1370,78 +1275,6 @@ function createDonationTestCases() { qfRound.isActive = false; await qfRound.save(); }); - it('should create GIV donation for giveth project on xdai successfully', async () => { - const project = await saveProjectDirectlyToDb(createProjectData()); - const user = await User.create({ - walletAddress: generateRandomEtheriumAddress(), - loginType: 'wallet', - firstName: 'first name', - }).save(); - const accessToken = await generateTestAccessToken(user.id); - const saveDonationResponse = await axios.post( - graphqlUrl, - { - query: createDonationMutation, - variables: { - projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, - transactionId: generateRandomEvmTxHash(), - nonce: 1, - amount: 10, - token: 'GIV', - }, - }, - { - headers: { - Authorization: `Bearer ${accessToken}`, - }, - }, - ); - assert.isOk(saveDonationResponse.data.data.createDonation); - const donation = await Donation.findOne({ - where: { - id: saveDonationResponse.data.data.createDonation, - }, - }); - assert.isTrue(donation?.isTokenEligibleForGivback); - }); - it('should create XDAI StableCoin donation for giveth project on xdai successfully', async () => { - const project = await saveProjectDirectlyToDb(createProjectData()); - const amount = 10; - const user = await User.create({ - walletAddress: generateRandomEtheriumAddress(), - loginType: 'wallet', - firstName: 'first name', - }).save(); - const accessToken = await generateTestAccessToken(user.id); - const saveDonationResponse = await axios.post( - graphqlUrl, - { - query: createDonationMutation, - variables: { - projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, - transactionId: generateRandomEvmTxHash(), - nonce: 1, - amount, - token: 'WXDAI', - }, - }, - { - headers: { - Authorization: `Bearer ${accessToken}`, - }, - }, - ); - assert.isOk(saveDonationResponse.data.data.createDonation); - const donation = await Donation.findOne({ - where: { - id: saveDonationResponse.data.data.createDonation, - }, - }); - assert.isTrue(donation?.isTokenEligibleForGivback); - assert.equal(donation?.amount, amount); - }); it('should create USDT StableCoin donation for giveth project on mainnet successfully', async () => { const project = await saveProjectDirectlyToDb(createProjectData()); const amount = 10; @@ -1688,45 +1521,7 @@ function createDonationTestCases() { assert.isFalse(donation?.isTokenEligibleForGivback); }); - it('should create GIV donation for trace project on xdai successfully', async () => { - const project = await saveProjectDirectlyToDb({ - ...createProjectData(), - organizationLabel: ORGANIZATION_LABELS.TRACE, - }); - const user = await User.create({ - walletAddress: generateRandomEtheriumAddress(), - loginType: 'wallet', - firstName: 'first name', - }).save(); - const accessToken = await generateTestAccessToken(user.id); - const saveDonationResponse = await axios.post( - graphqlUrl, - { - query: createDonationMutation, - variables: { - projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, - transactionId: generateRandomEvmTxHash(), - nonce: 12, - amount: 10, - token: 'GIV', - }, - }, - { - headers: { - Authorization: `Bearer ${accessToken}`, - }, - }, - ); - assert.isOk(saveDonationResponse.data.data.createDonation); - const donation = await Donation.findOne({ - where: { - id: saveDonationResponse.data.data.createDonation, - }, - }); - assert.isTrue(donation?.isTokenEligibleForGivback); - }); - it('should throw error when create GIV donation for endaoment project on xdai', async () => { + it('should throw error when create GIV donation for endaoment project on MAIN_NET', async () => { const project = await saveProjectDirectlyToDb({ ...createProjectData(), organizationLabel: ORGANIZATION_LABELS.ENDAOMENT, @@ -1743,7 +1538,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), nonce: 11, amount: 10, @@ -1915,7 +1710,7 @@ function createDonationTestCases() { ); }); // they do not accept DAI (same would apply for any other random token) - it('should throw error when create DAI donation for CHANGE project on Xdai Chain', async () => { + it('should throw error when create DAI donation for CHANGE project on MAIN_NET Chain', async () => { const project = await saveProjectDirectlyToDb({ ...createProjectData(), organizationLabel: ORGANIZATION_LABELS.CHANGE, @@ -1928,11 +1723,11 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), amount: 10, nonce: 13, - token: 'XDAI', + token: 'ETH', }, }, { @@ -1990,7 +1785,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), nonce: 3, amount: 10, @@ -2016,7 +1811,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), nonce: 3, amount: 10, @@ -2048,7 +1843,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, anonymous: true, transactionId: generateRandomEvmTxHash(), nonce: 4, @@ -2089,7 +1884,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, nonce: 4, amount: 10, token: 'GIV', @@ -2126,7 +1921,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), nonce: 12, amount: 1000, @@ -2164,7 +1959,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), amount: 10, nonce: 6, @@ -2200,7 +1995,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: 999999, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), nonce: 13, amount: 10, @@ -2235,7 +2030,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), nonce: 1, amount: 10, @@ -2274,7 +2069,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), amount: 10, nonce: 11, @@ -2313,7 +2108,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), nonce: 12, amount: 10, @@ -2348,7 +2143,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), amount: 10, nonce: 14, @@ -2383,7 +2178,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), nonce: 15, amount: 10, @@ -2415,7 +2210,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), nonce: 11, amount: 0, @@ -2447,7 +2242,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), nonce: 11, amount: -10, @@ -2479,7 +2274,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: 'fjdahfksj0323423', nonce: 11, amount: 10, @@ -2543,7 +2338,7 @@ function createDonationTestCases() { query: createDonationMutation, variables: { projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: generateRandomEvmTxHash(), nonce: 15, amount: 10, @@ -2564,110 +2359,6 @@ function createDonationTestCases() { }); assert.isOk(donation); }); - it('should throw exception when chainType is SOLANA but send EVM tokenAddress', async () => { - const project = await saveProjectDirectlyToDb(createProjectData()); - const user = await User.create({ - walletAddress: generateRandomSolanaAddress(), - loginType: 'wallet', - firstName: 'first name', - }).save(); - const accessToken = await generateTestAccessToken(user.id); - const tokenAddress = generateRandomEtheriumAddress(); - const saveDonationResponse = await axios.post( - graphqlUrl, - { - query: createDonationMutation, - variables: { - projectId: project.id, - transactionNetworkId: NETWORK_IDS.SOLANA_TESTNET, - transactionId: generateRandomSolanaTxHash(), - tokenAddress, - nonce: 11, - amount: 10, - token: 'GIV', - }, - }, - { - headers: { - Authorization: `Bearer ${accessToken}`, - }, - }, - ); - assert.equal( - saveDonationResponse.data.errors[0].message, - errorMessages.INVALID_TOKEN_ADDRESS, - ); - }); - it('should throw exception when chainType is EVM but send SOLANA tokenAddress #1', async () => { - const project = await saveProjectDirectlyToDb(createProjectData()); - const user = await User.create({ - walletAddress: generateRandomEtheriumAddress(), - loginType: 'wallet', - firstName: 'first name', - }).save(); - const accessToken = await generateTestAccessToken(user.id); - const saveDonationResponse = await axios.post( - graphqlUrl, - { - query: createDonationMutation, - variables: { - projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, - transactionId: generateRandomEvmTxHash(), - // SOLANA token address - tokenAddress: '11111111111111111111111111111111', - chainType: ChainType.EVM, - nonce: 11, - amount: 10, - token: 'GIV', - }, - }, - { - headers: { - Authorization: `Bearer ${accessToken}`, - }, - }, - ); - assert.equal( - saveDonationResponse.data.errors[0].message, - errorMessages.INVALID_TOKEN_ADDRESS, - ); - }); - it('should throw exception when chainType is EVM but send SOLANA tokenAddress #2', async () => { - const project = await saveProjectDirectlyToDb(createProjectData()); - const user = await User.create({ - walletAddress: generateRandomEtheriumAddress(), - loginType: 'wallet', - firstName: 'first name', - }).save(); - const accessToken = await generateTestAccessToken(user.id); - const saveDonationResponse = await axios.post( - graphqlUrl, - { - query: createDonationMutation, - variables: { - projectId: project.id, - transactionNetworkId: NETWORK_IDS.XDAI, - transactionId: generateRandomEvmTxHash(), - // SOLANA token address - tokenAddress: generateRandomSolanaAddress(), - chainType: ChainType.EVM, - nonce: 11, - amount: 10, - token: 'GIV', - }, - }, - { - headers: { - Authorization: `Bearer ${accessToken}`, - }, - }, - ); - assert.equal( - saveDonationResponse.data.errors[0].message, - errorMessages.INVALID_TOKEN_ADDRESS, - ); - }); it('should mark draft donation as matched after donation creation', async () => { const project = await saveProjectDirectlyToDb(createProjectData()); @@ -4240,411 +3931,6 @@ function donationsToWalletsTestCases() { }); } -// -// function updateDonationStatusTestCases() { -// it('should update donation status to verified after calling without sending status', async () => { -// // https://blockscout.com/xdai/mainnet/tx/0xaaf96af4d0634dafcac1b6eca627b77ceb157aad1037033761ed3a4220ebb2b5 -// const transactionInfo = { -// txHash: -// '0xaaf96af4d0634dafcac1b6eca627b77ceb157aad1037033761ed3a4220ebb2b5', -// networkId: NETWORK_IDS.XDAI, -// amount: 1, -// fromAddress: '0x00d18ca9782be1caef611017c2fbc1a39779a57c', -// toAddress: '0x90b31c07fb0310b4b0d88368169dad8fe0cbb6da', -// currency: 'XDAI', -// timestamp: 1647483910, -// }; -// const project = await saveProjectDirectlyToDb({ -// ...createProjectData(), -// walletAddress: transactionInfo.toAddress, -// }); -// const user = await saveUserDirectlyToDb(transactionInfo.fromAddress); -// const donation = await saveDonationDirectlyToDb( -// { -// amount: transactionInfo.amount, -// transactionNetworkId: transactionInfo.networkId, -// transactionId: transactionInfo.txHash, -// currency: transactionInfo.currency, -// fromWalletAddress: transactionInfo.fromAddress, -// toWalletAddress: transactionInfo.toAddress, -// valueUsd: 1, -// anonymous: false, -// createdAt: new Date(transactionInfo.timestamp), -// status: DONATION_STATUS.PENDING, -// }, -// user.id, -// project.id, -// ); -// assert.equal(donation.status, DONATION_STATUS.PENDING); -// const accessToken = await generateTestAccessToken(user.id); -// const result = await axios.post( -// graphqlUrl, -// { -// query: updateDonationStatusMutation, -// variables: { -// donationId: donation.id, -// }, -// }, -// { -// headers: { -// Authorization: `Bearer ${accessToken}`, -// }, -// }, -// ); -// assert.equal( -// result.data.data.updateDonationStatus.status, -// DONATION_STATUS.VERIFIED, -// ); -// }); -// it('should update donation status to failed after calling without sending status ', async () => { -// // https://blockscout.com/xdai/mainnet/tx/0x6c2550e21d57d2c9c7e1cb22c0c4d6581575c77f9be2ef35995466e61c730a08 -// const transactionInfo = { -// txHash: -// '0x6c2550e21d57d2c9c7e1cb22c0c4d6581575c77f9be2ef35995466e61c730a08', -// networkId: NETWORK_IDS.XDAI, -// amount: 1, -// fromAddress: generateRandomEtheriumAddress(), -// toAddress: '0x42a7d872dec08d309f4b93d05e5b9de183765858', -// currency: 'GIV', -// timestamp: 1647069070, -// }; -// const project = await saveProjectDirectlyToDb({ -// ...createProjectData(), -// walletAddress: transactionInfo.toAddress, -// }); -// const user = await saveUserDirectlyToDb(transactionInfo.fromAddress); -// const donation = await saveDonationDirectlyToDb( -// { -// amount: transactionInfo.amount, -// transactionNetworkId: transactionInfo.networkId, -// transactionId: transactionInfo.txHash, -// currency: transactionInfo.currency, -// fromWalletAddress: transactionInfo.fromAddress, -// toWalletAddress: transactionInfo.toAddress, -// valueUsd: 1, -// anonymous: false, -// createdAt: new Date(transactionInfo.timestamp), -// status: DONATION_STATUS.PENDING, -// }, -// user.id, -// project.id, -// ); -// assert.equal(donation.status, DONATION_STATUS.PENDING); -// const accessToken = await generateTestAccessToken(user.id); -// const result = await axios.post( -// graphqlUrl, -// { -// query: updateDonationStatusMutation, -// variables: { -// donationId: donation.id, -// }, -// }, -// { -// headers: { -// Authorization: `Bearer ${accessToken}`, -// }, -// }, -// ); -// assert.equal( -// result.data.data.updateDonationStatus.status, -// DONATION_STATUS.FAILED, -// ); -// assert.equal( -// result.data.data.updateDonationStatus.verifyErrorMessage, -// errorMessages.TRANSACTION_FROM_ADDRESS_IS_DIFFERENT_FROM_SENT_FROM_ADDRESS, -// ); -// }); -// // ROPSTEN CHAIN DECOMMISSIONED use goerli -// // TODO: Rewrite this test with goerli. -// // it('should update donation status to failed when tx is failed on network ', async () => { -// // // https://ropsten.etherscan.io/tx/0x66a7902f3dad318e8d075454e26ee829e9832db0b20922cfd9d916fb792ff724 -// // const transactionInfo = { -// // txHash: -// // '0x66a7902f3dad318e8d075454e26ee829e9832db0b20922cfd9d916fb792ff724', -// // currency: 'DAI', -// // networkId: NETWORK_IDS.ROPSTEN, -// // fromAddress: '0x839395e20bbB182fa440d08F850E6c7A8f6F0780', -// // toAddress: '0x5ac583feb2b1f288c0a51d6cdca2e8c814bfe93b', -// // amount: 0.04, -// // timestamp: 1607360947, -// // }; -// // const project = await saveProjectDirectlyToDb({ -// // ...createProjectData(), -// // walletAddress: transactionInfo.toAddress, -// // }); -// // const user = await saveUserDirectlyToDb(transactionInfo.fromAddress); -// // const donation = await saveDonationDirectlyToDb( -// // { -// // amount: transactionInfo.amount, -// // transactionNetworkId: transactionInfo.networkId, -// // transactionId: transactionInfo.txHash, -// // currency: transactionInfo.currency, -// // fromWalletAddress: transactionInfo.fromAddress, -// // toWalletAddress: transactionInfo.toAddress, -// // valueUsd: 1, -// // anonymous: false, -// // createdAt: new Date(transactionInfo.timestamp), -// // status: DONATION_STATUS.PENDING, -// // }, -// // user.id, -// // project.id, -// // ); -// // assert.equal(donation.status, DONATION_STATUS.PENDING); -// // const accessToken = await generateTestAccessToken(user.id); -// // const result = await axios.post( -// // graphqlUrl, -// // { -// // query: updateDonationStatusMutation, -// // variables: { -// // donationId: donation.id, -// // status: DONATION_STATUS.FAILED, -// // }, -// // }, -// // { -// // headers: { -// // Authorization: `Bearer ${accessToken}`, -// // }, -// // }, -// // ); -// // assert.equal( -// // result.data.data.updateDonationStatus.status, -// // DONATION_STATUS.FAILED, -// // ); -// // assert.equal( -// // result.data.data.updateDonationStatus.verifyErrorMessage, -// // errorMessages.TRANSACTION_STATUS_IS_FAILED_IN_NETWORK, -// // ); -// // }); -// it('should donation status remain pending after calling without sending status (we assume its not mined so far)', async () => { -// const transactionInfo = { -// txHash: generateRandomEvmTxHash(), -// networkId: NETWORK_IDS.XDAI, -// amount: 1, -// fromAddress: generateRandomEtheriumAddress(), -// toAddress: generateRandomEtheriumAddress(), -// currency: 'GIV', -// timestamp: 1647069070, -// }; -// const project = await saveProjectDirectlyToDb({ -// ...createProjectData(), -// walletAddress: transactionInfo.toAddress, -// }); -// const user = await saveUserDirectlyToDb(transactionInfo.fromAddress); -// const donation = await saveDonationDirectlyToDb( -// { -// amount: transactionInfo.amount, -// transactionNetworkId: transactionInfo.networkId, -// transactionId: transactionInfo.txHash, -// currency: transactionInfo.currency, -// fromWalletAddress: transactionInfo.fromAddress, -// toWalletAddress: transactionInfo.toAddress, -// valueUsd: 1, -// nonce: 99999999, -// anonymous: false, -// createdAt: new Date(transactionInfo.timestamp), -// status: DONATION_STATUS.PENDING, -// }, -// user.id, -// project.id, -// ); -// assert.equal(donation.status, DONATION_STATUS.PENDING); -// const accessToken = await generateTestAccessToken(user.id); -// const result = await axios.post( -// graphqlUrl, -// { -// query: updateDonationStatusMutation, -// variables: { -// donationId: donation.id, -// }, -// }, -// { -// headers: { -// Authorization: `Bearer ${accessToken}`, -// }, -// }, -// ); -// assert.equal( -// result.data.data.updateDonationStatus.status, -// DONATION_STATUS.PENDING, -// ); -// }); -// -// it('should update donation status to verified ', async () => { -// // https://etherscan.io/tx/0xe42fd848528dcb06f56fd3b553807354b4bf0ff591454e1cc54070684d519df5 -// const transactionInfo = { -// txHash: -// '0xe42fd848528dcb06f56fd3b553807354b4bf0ff591454e1cc54070684d519df5', -// networkId: NETWORK_IDS.MAIN_NET, -// amount: 500, -// fromAddress: '0x5d28fe1e9f895464aab52287d85ebff32b351674', -// toAddress: '0x0eed1566f46b0421d53d2143a3957bb22016ef4b', -// currency: 'GIV', -// timestamp: 1646704855, -// }; -// const project = await saveProjectDirectlyToDb({ -// ...createProjectData(), -// walletAddress: transactionInfo.toAddress, -// }); -// const user = await saveUserDirectlyToDb(transactionInfo.fromAddress); -// const donation = await saveDonationDirectlyToDb( -// { -// amount: transactionInfo.amount, -// transactionNetworkId: transactionInfo.networkId, -// transactionId: transactionInfo.txHash, -// currency: transactionInfo.currency, -// fromWalletAddress: transactionInfo.fromAddress, -// toWalletAddress: transactionInfo.toAddress, -// valueUsd: 1, -// anonymous: false, -// createdAt: new Date(transactionInfo.timestamp), -// status: DONATION_STATUS.PENDING, -// }, -// user.id, -// project.id, -// ); -// assert.equal(donation.status, DONATION_STATUS.PENDING); -// const accessToken = await generateTestAccessToken(user.id); -// const result = await axios.post( -// graphqlUrl, -// { -// query: updateDonationStatusMutation, -// variables: { -// donationId: donation.id, -// -// // We send faild but because it checks with network first, it ignores sent status -// status: DONATION_STATUS.FAILED, -// }, -// }, -// { -// headers: { -// Authorization: `Bearer ${accessToken}`, -// }, -// }, -// ); -// assert.equal( -// result.data.data.updateDonationStatus.status, -// DONATION_STATUS.VERIFIED, -// ); -// }); -// it('should update donation status to failed', async () => { -// // https://blockscout.com/xdai/mainnet/tx/0x013c3371c1de181439ac51067fd2e417b71b9d462c13417252e2153f80af630f -// const transactionInfo = { -// txHash: -// '0x013c3371c1de181439ac51067fd2e417b71b9d462c13417252e2153f80af630f', -// networkId: NETWORK_IDS.XDAI, -// amount: 2800, -// fromAddress: '0x5d28fe1e9f895464aab52287d85ebff32b351674', -// toAddress: generateRandomEtheriumAddress(), -// currency: 'GIV', -// timestamp: 1646725075, -// }; -// const project = await saveProjectDirectlyToDb({ -// ...createProjectData(), -// walletAddress: transactionInfo.toAddress, -// }); -// const user = await saveUserDirectlyToDb(transactionInfo.fromAddress); -// const donation = await saveDonationDirectlyToDb( -// { -// amount: transactionInfo.amount, -// transactionNetworkId: transactionInfo.networkId, -// transactionId: transactionInfo.txHash, -// currency: transactionInfo.currency, -// fromWalletAddress: transactionInfo.fromAddress, -// toWalletAddress: transactionInfo.toAddress, -// valueUsd: 1, -// anonymous: false, -// createdAt: new Date(transactionInfo.timestamp), -// status: DONATION_STATUS.PENDING, -// }, -// user.id, -// project.id, -// ); -// assert.equal(donation.status, DONATION_STATUS.PENDING); -// const accessToken = await generateTestAccessToken(user.id); -// const result = await axios.post( -// graphqlUrl, -// { -// query: updateDonationStatusMutation, -// variables: { -// donationId: donation.id, -// status: DONATION_STATUS.FAILED, -// }, -// }, -// { -// headers: { -// Authorization: `Bearer ${accessToken}`, -// }, -// }, -// ); -// assert.equal( -// result.data.data.updateDonationStatus.status, -// DONATION_STATUS.FAILED, -// ); -// assert.equal( -// result.data.data.updateDonationStatus.verifyErrorMessage, -// errorMessages.TRANSACTION_TO_ADDRESS_IS_DIFFERENT_FROM_SENT_TO_ADDRESS, -// ); -// }); -// it('should update donation status to failed, tx is not mined and donor says it failed', async () => { -// const transactionInfo = { -// txHash: generateRandomEvmTxHash(), -// networkId: NETWORK_IDS.XDAI, -// amount: 1, -// fromAddress: generateRandomEtheriumAddress(), -// toAddress: generateRandomEtheriumAddress(), -// currency: 'GIV', -// timestamp: 1647069070, -// }; -// const project = await saveProjectDirectlyToDb({ -// ...createProjectData(), -// walletAddress: transactionInfo.toAddress, -// }); -// const user = await saveUserDirectlyToDb(transactionInfo.fromAddress); -// const donation = await saveDonationDirectlyToDb( -// { -// amount: transactionInfo.amount, -// transactionNetworkId: transactionInfo.networkId, -// transactionId: transactionInfo.txHash, -// currency: transactionInfo.currency, -// fromWalletAddress: transactionInfo.fromAddress, -// toWalletAddress: transactionInfo.toAddress, -// nonce: 999999, -// valueUsd: 1, -// anonymous: false, -// createdAt: new Date(transactionInfo.timestamp), -// status: DONATION_STATUS.PENDING, -// }, -// user.id, -// project.id, -// ); -// assert.equal(donation.status, DONATION_STATUS.PENDING); -// const accessToken = await generateTestAccessToken(user.id); -// const result = await axios.post( -// graphqlUrl, -// { -// query: updateDonationStatusMutation, -// variables: { -// donationId: donation.id, -// status: DONATION_STATUS.FAILED, -// }, -// }, -// { -// headers: { -// Authorization: `Bearer ${accessToken}`, -// }, -// }, -// ); -// assert.equal( -// result.data.data.updateDonationStatus.status, -// DONATION_STATUS.FAILED, -// ); -// assert.equal( -// result.data.data.updateDonationStatus.verifyErrorMessage, -// errorMessages.DONOR_REPORTED_IT_AS_FAILED, -// ); -// }); -// } - async function recentDonationsTestCases() { // Clear all other donations beforeEach(async () => { diff --git a/src/resolvers/donationResolver.ts b/src/resolvers/donationResolver.ts index 5ccc9c12b..a243ebe1a 100644 --- a/src/resolvers/donationResolver.ts +++ b/src/resolvers/donationResolver.ts @@ -916,9 +916,6 @@ export class DonationResolver { case NETWORK_IDS.OPTIMISM_SEPOLIA: priceChainId = NETWORK_IDS.OPTIMISTIC; break; - case NETWORK_IDS.MORDOR_ETC_TESTNET: - priceChainId = NETWORK_IDS.ETC; - break; default: priceChainId = networkId; break; diff --git a/src/resolvers/draftDonationResolver.test.ts b/src/resolvers/draftDonationResolver.test.ts index 81abe98b1..4601a8865 100644 --- a/src/resolvers/draftDonationResolver.test.ts +++ b/src/resolvers/draftDonationResolver.test.ts @@ -56,7 +56,7 @@ function createDraftDonationTestCases() { safeTransactionId = generateRandomEvmTxHash(); donationData = { projectId: project.id, - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, amount: 10, token: 'GIV', referrerId, @@ -86,7 +86,7 @@ function createDraftDonationTestCases() { }); expect(draftDonation).deep.contain({ - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, chainType: ChainType.EVM, status: DRAFT_DONATION_STATUS.PENDING, toWalletAddress: project.walletAddress!, @@ -195,7 +195,7 @@ function createDraftRecurringDonationTestCases() { accessToken = await generateTestAccessToken(user.id); donationData = { projectId: project.id, - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, flowRate: '100', currency: 'GIV', toAddress: project.walletAddress, @@ -238,7 +238,7 @@ function createDraftRecurringDonationTestCases() { donationData: { donorId: user.id, projectId: project.id, - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, currency: 'GIV', }, }); diff --git a/src/resolvers/projectResolver.ts b/src/resolvers/projectResolver.ts index 916b91247..3d9d05c3c 100644 --- a/src/resolvers/projectResolver.ts +++ b/src/resolvers/projectResolver.ts @@ -482,7 +482,7 @@ export class ProjectResolver { ) { if (!filtersArray || filtersArray.length === 0) return query; const networkIds: number[] = []; - let acceptFundOnSolanaSeen = false; + const acceptFundOnSolanaSeen = false; filtersArray.forEach(filter => { switch (filter) { @@ -502,31 +502,12 @@ export class ProjectResolver { WHERE project_qf_rounds_qf_round."projectId" = project.id AND qf_round."isActive" = true )`, ); - case FilterField.AcceptFundOnGnosis: - networkIds.push(NETWORK_IDS.XDAI); - return; case FilterField.AcceptFundOnMainnet: networkIds.push(NETWORK_IDS.MAIN_NET); // Add this to make sure works on Staging networkIds.push(NETWORK_IDS.GOERLI); return; - case FilterField.AcceptFundOnCelo: - networkIds.push(NETWORK_IDS.CELO); - - // Add this to make sure works on Staging - networkIds.push(NETWORK_IDS.CELO_ALFAJORES); - return; - - case FilterField.AcceptFundOnArbitrum: - networkIds.push(NETWORK_IDS.ARBITRUM_MAINNET); - networkIds.push(NETWORK_IDS.ARBITRUM_SEPOLIA); - return; - - case FilterField.AcceptFundOnBase: - networkIds.push(NETWORK_IDS.BASE_MAINNET); - networkIds.push(NETWORK_IDS.BASE_SEPOLIA); - return; case FilterField.AcceptFundOnZKEVM: networkIds.push(NETWORK_IDS.ZKEVM_MAINNET); @@ -542,15 +523,6 @@ export class ProjectResolver { // Add this to make sure works on Staging networkIds.push(NETWORK_IDS.OPTIMISM_SEPOLIA); return; - case FilterField.AcceptFundOnETC: - networkIds.push(NETWORK_IDS.ETC); - - // Add this to make sure works on Staging - networkIds.push(NETWORK_IDS.MORDOR_ETC_TESTNET); - return; - case FilterField.AcceptFundOnSolana: - acceptFundOnSolanaSeen = true; - return; default: return query.andWhere(`project.${filter} = true`); @@ -572,17 +544,6 @@ export class ProjectResolver { )`, ); } - if (acceptFundOnSolanaSeen) { - subQuery.orWhere( - `EXISTS ( - SELECT * - FROM project_address - WHERE "isRecipient" = true AND - "projectId" = project.id AND - "chainType" = '${ChainType.SOLANA}' - )`, - ); - } }), ); } diff --git a/src/resolvers/projectVerificationFormResolver.test.ts b/src/resolvers/projectVerificationFormResolver.test.ts index d06773e09..3e4bc4e36 100644 --- a/src/resolvers/projectVerificationFormResolver.test.ts +++ b/src/resolvers/projectVerificationFormResolver.test.ts @@ -4,7 +4,6 @@ import { createProjectData, generateConfirmationEmailToken, generateRandomEtheriumAddress, - generateRandomSolanaAddress, generateTestAccessToken, graphqlUrl, saveProjectDirectlyToDb, @@ -39,8 +38,6 @@ import { NETWORK_IDS } from '../provider'; import { countriesList, generateRandomString } from '../utils/utils'; import { createSocialProfile } from '../repositories/socialProfileRepository'; import { SOCIAL_NETWORKS } from '../entities/socialProfile'; -import { ChainType } from '../types/network'; -import { getDefaultSolanaChainId } from '../services/chains'; describe( 'createProjectVerification test cases', @@ -281,11 +278,6 @@ function updateProjectVerificationFormMutationTestCases() { networkId: NETWORK_IDS.GOERLI, title: 'test title', }, - { - address: generateRandomEtheriumAddress(), - networkId: NETWORK_IDS.XDAI, - title: 'test title', - }, { address: generateRandomEtheriumAddress(), networkId: NETWORK_IDS.OPTIMISTIC, @@ -301,36 +293,6 @@ function updateProjectVerificationFormMutationTestCases() { networkId: NETWORK_IDS.POLYGON, title: 'test title', }, - { - address: generateRandomEtheriumAddress(), - networkId: NETWORK_IDS.CELO_ALFAJORES, - title: 'test title', - }, - { - address: generateRandomEtheriumAddress(), - networkId: NETWORK_IDS.CELO, - title: 'test title', - }, - { - address: generateRandomEtheriumAddress(), - networkId: NETWORK_IDS.ARBITRUM_MAINNET, - title: 'test title', - }, - { - address: generateRandomEtheriumAddress(), - networkId: NETWORK_IDS.ARBITRUM_SEPOLIA, - title: 'test title', - }, - { - address: generateRandomEtheriumAddress(), - networkId: NETWORK_IDS.BASE_MAINNET, - title: 'test title', - }, - { - address: generateRandomEtheriumAddress(), - networkId: NETWORK_IDS.BASE_SEPOLIA, - title: 'test title', - }, { address: generateRandomEtheriumAddress(), networkId: NETWORK_IDS.ZKEVM_MAINNET, @@ -341,30 +303,6 @@ function updateProjectVerificationFormMutationTestCases() { networkId: NETWORK_IDS.ZKEVM_CARDONA, title: 'test title', }, - { - address: generateRandomEtheriumAddress(), - networkId: NETWORK_IDS.ETC, - title: 'test title', - }, - { - address: generateRandomEtheriumAddress(), - networkId: NETWORK_IDS.MORDOR_ETC_TESTNET, - title: 'test title', - chainType: ChainType.EVM, - }, - // { - // address: generateRandomSolanaAddress(), - // networkId: NETWORK_IDS.SOLANA_MAINNET, - // title: 'test title', - // chainType: ChainType.SOLANA, - // }, - { - address: generateRandomSolanaAddress(), - // frontend may not send networkId for solana - networkId: 0, - title: 'test title', - chainType: ChainType.SOLANA, - }, ], }; it('should update project verification with projectContacts form successfully', async () => { @@ -781,14 +719,6 @@ function updateProjectVerificationFormMutationTestCases() { managingFunds.relatedAddresses[0].address, ); - // Make sure that networkId would be getDefaultSolanaChainId() instead of 0 - assert.equal( - result.data.data.updateProjectVerificationForm.managingFunds.relatedAddresses.find( - address => address.chainType === ChainType.SOLANA, - ).networkId, - getDefaultSolanaChainId(), - ); - assert.equal( result.data.data.updateProjectVerificationForm.lastStep, PROJECT_VERIFICATION_STEPS.MANAGING_FUNDS, diff --git a/src/resolvers/recurringDonationResolver.test.ts b/src/resolvers/recurringDonationResolver.test.ts index 48021ebc4..05a2d0931 100644 --- a/src/resolvers/recurringDonationResolver.test.ts +++ b/src/resolvers/recurringDonationResolver.test.ts @@ -355,7 +355,7 @@ function updateRecurringDonationTestCases() { it('should allow to end recurring donation when its active, and archive when its ended', async () => { const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, flowRate: '1000', fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -440,7 +440,7 @@ function updateRecurringDonationTestCases() { it('should not allow to archive recurring donation when its not ended', async () => { const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, flowRate: '1000', fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -501,7 +501,7 @@ function updateRecurringDonationTestCases() { it('should not change isArchived when its already true and we dont send it', async () => { const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, flowRate: '1000', fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -561,7 +561,7 @@ function updateRecurringDonationTestCases() { it('should not change isArchived when its already false and we dont send it', async () => { const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, flowRate: '1000', fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -623,7 +623,7 @@ function updateRecurringDonationTestCases() { const currency = 'GIV'; const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, amount: 1, fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -689,7 +689,7 @@ function updateRecurringDonationTestCases() { const currency = 'GIV'; const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, amount: 1, fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -769,7 +769,7 @@ function updateRecurringDonationTestCases() { const currency = 'GIV'; const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, amount: 1, fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -845,7 +845,7 @@ function updateRecurringDonationTestCases() { const currency = 'GIV'; const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, amount: 1, fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -915,7 +915,7 @@ function updateRecurringDonationTestCases() { const currency = 'GIV'; const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, amount: 1, fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -985,7 +985,7 @@ function updateRecurringDonationTestCases() { const currency = 'GIV'; const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, amount: 1, fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -1110,7 +1110,7 @@ function updateRecurringDonationByIdTestCases() { it('should allow to end recurring donation when its active, and archive when its ended', async () => { const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, flowRate: '1000', fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -1195,7 +1195,7 @@ function updateRecurringDonationByIdTestCases() { it('should not allow to archive recurring donation when its not ended', async () => { const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, flowRate: '1000', fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -1256,7 +1256,7 @@ function updateRecurringDonationByIdTestCases() { it('should not change isArchived when its already true and we dont send it', async () => { const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, flowRate: '1000', fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -1316,7 +1316,7 @@ function updateRecurringDonationByIdTestCases() { it('should not change isArchived when its already false and we dont send it', async () => { const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, flowRate: '1000', fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -1378,7 +1378,7 @@ function updateRecurringDonationByIdTestCases() { const currency = 'GIV'; const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, amount: 1, fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -1444,7 +1444,7 @@ function updateRecurringDonationByIdTestCases() { const currency = 'GIV'; const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, amount: 1, fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -1524,7 +1524,7 @@ function updateRecurringDonationByIdTestCases() { const currency = 'GIV'; const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, amount: 1, fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -1595,7 +1595,7 @@ function updateRecurringDonationByIdTestCases() { const currency = 'GIV'; const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, amount: 1, fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -1666,7 +1666,7 @@ function updateRecurringDonationByIdTestCases() { const currency = 'GIV'; const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, amount: 1, fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -2841,7 +2841,7 @@ function updateRecurringDonationStatusTestCases() { it('should donation status remain pending after calling without sending status (we assume its not mined so far)', async () => { const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, flowRate: '1000', fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), @@ -2890,7 +2890,7 @@ function updateRecurringDonationStatusTestCases() { it('should update donation status to failed, tx is not mined and donor says it failed', async () => { const transactionInfo = { txHash: generateRandomEvmTxHash(), - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, flowRate: '200', fromAddress: generateRandomEtheriumAddress(), toAddress: generateRandomEtheriumAddress(), diff --git a/src/routers/apiGivRoutes.test.ts b/src/routers/apiGivRoutes.test.ts index 380fbe677..1c4ffb938 100644 --- a/src/routers/apiGivRoutes.test.ts +++ b/src/routers/apiGivRoutes.test.ts @@ -18,7 +18,7 @@ describe('createDonation in apiGiv test cases', () => { const donationData = { toWalletAddress: project.walletAddress, currency: 'GIV', - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, fromWalletAddress: generateRandomEtheriumAddress(), amount: 100, priceUsd: 0.3, diff --git a/src/server/adminJs/tabs/donationTab.test.ts b/src/server/adminJs/tabs/donationTab.test.ts index 7d1980822..01c56ad22 100644 --- a/src/server/adminJs/tabs/donationTab.test.ts +++ b/src/server/adminJs/tabs/donationTab.test.ts @@ -6,11 +6,7 @@ import { saveUserDirectlyToDb, } from '../../../../test/testUtils'; import { NETWORK_IDS } from '../../../provider'; -import { - Donation, - DONATION_STATUS, - DONATION_TYPES, -} from '../../../entities/donation'; +import { Donation, DONATION_STATUS } from '../../../entities/donation'; import { createDonation, FillPricesForDonationsWithoutPrice, @@ -105,7 +101,7 @@ function createDonationTestCases() { recordIds: '', }, payload: { - transactionNetworkId: NETWORK_IDS.XDAI, + transactionNetworkId: NETWORK_IDS.MAIN_NET, transactionId: txHash, priceUsd: ethPrice, txType: 'csvAirDrop', @@ -196,69 +192,4 @@ function createDonationTestCases() { ); } }); - it('Should create donations for gnosis safe', async () => { - // https://blockscout.com/xdai/mainnet/tx/0x43f82708d1608aa9355c0738659c658b138d54f618e3322e33a4410af48c200b - - const tokenPrice = 1; - const txHash = - '0x43f82708d1608aa9355c0738659c658b138d54f618e3322e33a4410af48c200b'; - const firstProjectAddress = '0x10E1439455BD2624878b243819E31CfEE9eb721C'; - const firstProject = await saveProjectDirectlyToDb({ - ...createProjectData(), - walletAddress: firstProjectAddress, - }); - await createDonation( - { - query: { - recordIds: '', - }, - payload: { - transactionNetworkId: NETWORK_IDS.XDAI, - transactionId: txHash, - priceUsd: tokenPrice, - txType: 'gnosisSafe', - segmentNotified: true, - isProjectVerified: true, - }, - }, - { - send: () => { - // - }, - }, - ); - - const firstDonation = await Donation.findOne({ - where: { - transactionId: txHash, - toWalletAddress: firstProjectAddress.toLowerCase(), - }, - }); - assert.isOk(firstDonation); - assert.equal(firstDonation?.projectId, firstProject.id); - - const allTxDonations = await Donation.find({ - where: { - transactionId: txHash, - }, - }); - assert.equal(allTxDonations.length, 1); - for (const donation of allTxDonations) { - assert.equal(donation.donationType, DONATION_TYPES.GNOSIS_SAFE); - assert.equal(donation.status, DONATION_STATUS.VERIFIED); - assert.equal(donation.priceUsd, tokenPrice); - assert.equal(donation.segmentNotified, true); - assert.equal(donation.isProjectVerified, true); - assert.equal(donation.amount, 5); - assert.equal( - donation.fromWalletAddress.toLowerCase(), - '0x5f0253950c0a7715CBA25153a6ED5eBcFFEDe48e'.toLowerCase(), - ); - assert.equal(donation.currency, 'USDC'); - assert.equal( - donation.createdAt.getTime(), - new Date('2022-07-04T16:55:30.000Z').getTime(), - ); - } - }); } diff --git a/src/server/adminJs/tabs/donationTab.ts b/src/server/adminJs/tabs/donationTab.ts index b4a3364a9..28ab77c6c 100644 --- a/src/server/adminJs/tabs/donationTab.ts +++ b/src/server/adminJs/tabs/donationTab.ts @@ -644,15 +644,8 @@ export const donationTab = { transactionNetworkId: { availableValues: [ { value: NETWORK_IDS.MAIN_NET, label: 'Mainnet' }, - { value: NETWORK_IDS.XDAI, label: 'Xdai' }, { value: NETWORK_IDS.GOERLI, label: 'Goerli' }, { value: NETWORK_IDS.POLYGON, label: 'Polygon' }, - { value: NETWORK_IDS.CELO, label: 'Celo' }, - { value: NETWORK_IDS.CELO_ALFAJORES, label: 'Alfajores' }, - { value: NETWORK_IDS.ARBITRUM_MAINNET, label: 'Arbitrum' }, - { value: NETWORK_IDS.ARBITRUM_SEPOLIA, label: 'Arbitrum Sepolia' }, - { value: NETWORK_IDS.BASE_MAINNET, label: 'Base' }, - { value: NETWORK_IDS.BASE_SEPOLIA, label: 'Base Sepolia' }, { value: NETWORK_IDS.ZKEVM_MAINNET, label: 'ZKEVM Mainnet' }, { value: NETWORK_IDS.ZKEVM_CARDONA, label: 'ZKEVM Cardona' }, ], diff --git a/src/server/adminJs/tabs/qfRoundTab.ts b/src/server/adminJs/tabs/qfRoundTab.ts index c570ce37f..297fd47c8 100644 --- a/src/server/adminJs/tabs/qfRoundTab.ts +++ b/src/server/adminJs/tabs/qfRoundTab.ts @@ -205,27 +205,9 @@ const availableNetworkValues = [ { value: NETWORK_IDS.GOERLI, label: 'GOERLI' }, { value: NETWORK_IDS.POLYGON, label: 'POLYGON' }, { value: NETWORK_IDS.OPTIMISTIC, label: 'OPTIMISTIC' }, - { value: NETWORK_IDS.ETC, label: 'ETC' }, - { - value: NETWORK_IDS.MORDOR_ETC_TESTNET, - label: 'MORDOR ETC TESTNET', - }, { value: NETWORK_IDS.OPTIMISM_SEPOLIA, label: 'OPTIMISM SEPOLIA' }, - { value: NETWORK_IDS.CELO, label: 'CELO' }, - { - value: NETWORK_IDS.CELO_ALFAJORES, - label: 'ALFAJORES (Test CELO)', - }, - { value: NETWORK_IDS.ARBITRUM_MAINNET, label: 'ARBITRUM MAINNET' }, - { value: NETWORK_IDS.ARBITRUM_SEPOLIA, label: 'ARBITRUM SEPOLIA' }, - { value: NETWORK_IDS.BASE_MAINNET, label: 'BASE MAINNET' }, - { value: NETWORK_IDS.BASE_SEPOLIA, label: 'BASE SEPOLIA' }, { value: NETWORK_IDS.ZKEVM_MAINNET, label: 'ZKEVM Mainnet' }, { value: NETWORK_IDS.ZKEVM_CARDONA, label: 'ZKEVM Cardona' }, - { value: NETWORK_IDS.XDAI, label: 'XDAI' }, - { value: NETWORK_IDS.BSC, label: 'BSC' }, - { value: NETWORK_IDS.SOLANA_MAINNET, label: 'SOLANA' }, - { value: NETWORK_IDS.SOLANA_TESTNET, label: 'SOLALAN TESTNET' }, ]; export const qfRoundTab = { diff --git a/src/server/adminJs/tabs/tokenTab.ts b/src/server/adminJs/tabs/tokenTab.ts index 937e4ecbf..2afc3a083 100644 --- a/src/server/adminJs/tabs/tokenTab.ts +++ b/src/server/adminJs/tabs/tokenTab.ts @@ -192,24 +192,8 @@ export const generateTokenTab = async () => { { value: NETWORK_IDS.POLYGON, label: 'POLYGON' }, { value: NETWORK_IDS.OPTIMISTIC, label: 'OPTIMISTIC' }, { value: NETWORK_IDS.OPTIMISM_SEPOLIA, label: 'OPTIMISM SEPOLIA' }, - { value: NETWORK_IDS.CELO, label: 'CELO' }, - { - value: NETWORK_IDS.CELO_ALFAJORES, - label: 'ALFAJORES (Test CELO)', - }, - { value: NETWORK_IDS.ARBITRUM_MAINNET, label: 'ARBITRUM MAINNET' }, - { value: NETWORK_IDS.ARBITRUM_SEPOLIA, label: 'ARBITRUM SEPOLIA' }, - { value: NETWORK_IDS.BASE_MAINNET, label: 'BASE MAINNET' }, - { value: NETWORK_IDS.BASE_SEPOLIA, label: 'BASE SEPOLIA' }, { value: NETWORK_IDS.ZKEVM_MAINNET, label: 'ZKEVM MAINNET' }, { value: NETWORK_IDS.ZKEVM_CARDONA, label: 'ZKEVM CARDANO' }, - { value: NETWORK_IDS.XDAI, label: 'XDAI' }, - { value: NETWORK_IDS.BSC, label: 'BSC' }, - { value: NETWORK_IDS.ETC, label: 'Ethereum Classic' }, - { - value: NETWORK_IDS.MORDOR_ETC_TESTNET, - label: 'Ethereum Classic Testnet', - }, ], }, symbol: { isVisible: true }, diff --git a/src/services/actualMatchingFundView.test.ts b/src/services/actualMatchingFundView.test.ts index 6c157c5c5..0388c0aac 100644 --- a/src/services/actualMatchingFundView.test.ts +++ b/src/services/actualMatchingFundView.test.ts @@ -36,7 +36,6 @@ function getActualMatchingFundTests() { minimumValidUsdValue: 1, slug: new Date().getTime().toString(), eligibleNetworks: [ - NETWORK_IDS.XDAI, NETWORK_IDS.OPTIMISTIC, NETWORK_IDS.POLYGON, NETWORK_IDS.MAIN_NET, @@ -622,7 +621,7 @@ function getActualMatchingFundTests() { valueUsd: 35, qfRoundId: qfRound.id, status: 'verified', - transactionNetworkId: NETWORK_IDS.ETC, + transactionNetworkId: NETWORK_IDS.POLYGON, }, user2.id, project.id, diff --git a/src/services/chains/evm/draftDonationService.test.ts b/src/services/chains/evm/draftDonationService.test.ts index a192a9a12..dd05cc7f1 100644 --- a/src/services/chains/evm/draftDonationService.test.ts +++ b/src/services/chains/evm/draftDonationService.test.ts @@ -39,7 +39,7 @@ const draftSaveTimeStampMS = Math.min( nativeDonationDraftSaveTime, erc20DonationDraftSaveTime, ); -const networkId = NETWORK_IDS.XDAI; +const networkId = NETWORK_IDS.MAIN_NET; const anonymous = false; const sharedDonationData: Partial = { diff --git a/src/services/chains/evm/transactionService.test.ts b/src/services/chains/evm/transactionService.test.ts index 90ad60ef8..3687b5558 100644 --- a/src/services/chains/evm/transactionService.test.ts +++ b/src/services/chains/evm/transactionService.test.ts @@ -1,9 +1,5 @@ -import { assert } from 'chai'; import 'mocha'; -import { - getDisperseTransactions, - getEvmTransactionTimestamp, -} from './transactionService'; +import { getEvmTransactionTimestamp } from './transactionService'; import { assertThrowsAsync } from '../../../../test/testUtils'; import { NETWORK_IDS } from '../../../provider'; describe( @@ -16,45 +12,44 @@ describe( ); function getDisperseTransactionsTestCases() { - it('Should return transactions, for disperseEther on xdai', async () => { - // https://blockscout.com/xdai/mainnet/tx/0xfef76283e0ed4d58e0e7982b5f4ccc6867e7d4ef85b9dc78f37ee202064fd1df - const transactions = await getDisperseTransactions( - '0xfef76283e0ed4d58e0e7982b5f4ccc6867e7d4ef85b9dc78f37ee202064fd1df', - NETWORK_IDS.XDAI, - ); - assert.isArray(transactions); - assert.equal(transactions.length, 7); - assert.equal( - transactions[0].from, - '0x839395e20bbb182fa440d08f850e6c7a8f6f0780', - ); - assert.equal( - transactions[6].to, - '0xf2f03516e4bf21dadffc69a4c8e858497fe4edbc', - ); - assert.equal(transactions[1].amount, 1760); - assert.equal(transactions[3].currency, 'XDAI'); - }); - it('Should return transactions, for disperseToken USDC on xdai', async () => { - // https://blockscout.com/xdai/mainnet/tx/0x44efb6052ac0496ee96aa6d3dae5e99b5c3896b8db90cad866fc25e8958173a9 - const transactions = await getDisperseTransactions( - '0x44efb6052ac0496ee96aa6d3dae5e99b5c3896b8db90cad866fc25e8958173a9', - NETWORK_IDS.XDAI, - ); - assert.isArray(transactions); - assert.equal(transactions.length, 9); - assert.equal( - transactions[0].from, - '0x7da9a33d15413f499299687cc9d81de84684e28e', - ); - assert.equal( - transactions[8].to, - '0xa8243199049357763784ca3411090dcf3c0cc14d', - ); - assert.equal(transactions[2].amount, 7.17); - assert.equal(transactions[3].currency, 'USDC'); - }); - + // it('Should return transactions, for disperseEther on xdai', async () => { + // // https://blockscout.com/xdai/mainnet/tx/0xfef76283e0ed4d58e0e7982b5f4ccc6867e7d4ef85b9dc78f37ee202064fd1df + // const transactions = await getDisperseTransactions( + // '0xfef76283e0ed4d58e0e7982b5f4ccc6867e7d4ef85b9dc78f37ee202064fd1df', + // NETWORK_IDS.XDAI, + // ); + // assert.isArray(transactions); + // assert.equal(transactions.length, 7); + // assert.equal( + // transactions[0].from, + // '0x839395e20bbb182fa440d08f850e6c7a8f6f0780', + // ); + // assert.equal( + // transactions[6].to, + // '0xf2f03516e4bf21dadffc69a4c8e858497fe4edbc', + // ); + // assert.equal(transactions[1].amount, 1760); + // assert.equal(transactions[3].currency, 'XDAI'); + // }); + // it('Should return transactions, for disperseToken USDC on xdai', async () => { + // // https://blockscout.com/xdai/mainnet/tx/0x44efb6052ac0496ee96aa6d3dae5e99b5c3896b8db90cad866fc25e8958173a9 + // const transactions = await getDisperseTransactions( + // '0x44efb6052ac0496ee96aa6d3dae5e99b5c3896b8db90cad866fc25e8958173a9', + // NETWORK_IDS.XDAI, + // ); + // assert.isArray(transactions); + // assert.equal(transactions.length, 9); + // assert.equal( + // transactions[0].from, + // '0x7da9a33d15413f499299687cc9d81de84684e28e', + // ); + // assert.equal( + // transactions[8].to, + // '0xa8243199049357763784ca3411090dcf3c0cc14d', + // ); + // assert.equal(transactions[2].amount, 7.17); + // assert.equal(transactions[3].currency, 'USDC'); + // }); // it('Should return transactions, for disperseEther on mainnet', async () => { // // https://etherscan.io/tx/0x716a32c18bd487ea75db1838e7d778a95dfc602dca651beeae65b801cb975c99 // const transactions = await getDisperseTransactions( @@ -74,7 +69,6 @@ function getDisperseTransactionsTestCases() { // assert.equal(transactions[0].amount, 0.2); // assert.equal(transactions[1].currency, 'ETH'); // }); - // it('Should return transactions, for disperseToken USDC on mainnet', async () => { // // https://etherscan.io/tx/0x613ab48576971933f8745e867d38fe9ac468e4b893bdd0c71cdaac34c474d18c // const transactions = await getDisperseTransactions( @@ -97,21 +91,21 @@ function getDisperseTransactionsTestCases() { } function getEvmTransactionTimestampTestCases() { - it('Should return the transaction time from the blockchain', async () => { - // https://blockscout.com/xdai/mainnet/tx/0x42c0f15029557ec35e61515a89366297fc239a334e3ba22fab15a3f1d04ad53f - const transactionTime = await getEvmTransactionTimestamp({ - txHash: - '0x42c0f15029557ec35e61515a89366297fc239a334e3ba22fab15a3f1d04ad53f', - networkId: NETWORK_IDS.XDAI, - }); - assert.equal(transactionTime, 1702091620 * 1000); - }); + // it('Should return the transaction time from the blockchain', async () => { + // // https://blockscout.com/xdai/mainnet/tx/0x42c0f15029557ec35e61515a89366297fc239a334e3ba22fab15a3f1d04ad53f + // const transactionTime = await getEvmTransactionTimestamp({ + // txHash: + // '0x42c0f15029557ec35e61515a89366297fc239a334e3ba22fab15a3f1d04ad53f', + // networkId: NETWORK_IDS.XDAI, + // }); + // assert.equal(transactionTime, 1702091620 * 1000); + // }); it('Should throw error if the transaction is not found', async () => { await assertThrowsAsync(async () => { await getEvmTransactionTimestamp({ txHash: '0x', - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, }); }, 'Transaction not found'); }); diff --git a/src/services/chains/evm/transactionService.ts b/src/services/chains/evm/transactionService.ts index 135892d7b..b22144fd4 100644 --- a/src/services/chains/evm/transactionService.ts +++ b/src/services/chains/evm/transactionService.ts @@ -15,7 +15,6 @@ import { getBlockExplorerApiUrl, getNetworkNativeToken, getProvider, - NETWORK_IDS, } from '../../../provider'; import { logger } from '../../../utils/logger'; import { gnosisSafeL2ABI } from '../../../assets/gnosisSafeL2ABI'; @@ -453,7 +452,7 @@ export const getDisperseTransactions = async ( ); if (transactionData.name === 'disperseEther') { token = { - symbol: networkId === NETWORK_IDS.XDAI ? 'XDAI' : 'ETH', + symbol: 'ETH', decimals: 18, }; recipients = transactionData.params[0].value; diff --git a/src/services/chains/index.test.ts b/src/services/chains/index.test.ts index e7145b44c..0e800de36 100644 --- a/src/services/chains/index.test.ts +++ b/src/services/chains/index.test.ts @@ -1,225 +1,13 @@ import { assert } from 'chai'; -import moment from 'moment'; import { NETWORK_IDS } from '../../provider'; import { assertThrowsAsync } from '../../../test/testUtils'; import { errorMessages } from '../../utils/errorMessages'; -import { ChainType } from '../../types/network'; import { closeTo, getTransactionInfoFromNetwork } from './index'; -const ONE_DAY = 60 * 60 * 24; - describe('getTransactionDetail test cases', getTransactionDetailTestCases); describe('closeTo test cases', closeToTestCases); function getTransactionDetailTestCases() { - // it('should return transaction detail for normal transfer on gnosis when it belongs to a multisig', async () => { - // // https://etc.blockscout.com/tx/0xb31720ed83098a5ef7f8dd15f345c5a1e643c3b7debb98afab9fb7b96eec23b1 - // const amount = 0.01; - // const transactionInfo = await getTransactionInfoFromNetwork({ - // txHash: - // '0xac9a229d772623137e5bb809e2cd09c2ffa6d75dce391ffefef5c50398d706d5', - // symbol: 'XDAI', - // networkId: NETWORK_IDS.XDAI, - // fromAddress: '0xad2386a6F21F028CC0D167411e59C5C3F9829B2c', - // toAddress: '0x9924285ff2207d6e36642b6832a515a6a3aedcab', - // timestamp: 1696324809, - // safeTxHash: 'xxxxxx', - // amount, - // }); - // assert.isOk(transactionInfo); - // assert.equal(transactionInfo.currency, 'XDAI'); - // assert.equal(transactionInfo.amount, 0.01); - // }); - - it('should return transaction detail for token transfer on gnosis when it belongs to a multisig', async () => { - // https://etc.blockscout.com/tx/0xb31720ed83098a5ef7f8dd15f345c5a1e643c3b7debb98afab9fb7b96eec23b1 - const amount = 0.1; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '0x42c0f15029557ec35e61515a89366297fc239a334e3ba22fab15a3f1d04ad53f', - symbol: 'GIV', - networkId: NETWORK_IDS.XDAI, - fromAddress: '0x76884f5147f7b6d1f3d15cd8224235ea84036f9e', - toAddress: '0x9924285ff2207d6e36642b6832a515a6a3aedcab', - timestamp: 1696324809, - safeTxHash: 'xxxxx', - amount, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'GIV'); - assert.equal(transactionInfo.amount, amount); - }); - - // it('should return transaction detail for token transfer on gnosis when it belongs to a multisig', async () => { - // // https://etc.blockscout.com/tx/0xb31720ed83098a5ef7f8dd15f345c5a1e643c3b7debb98afab9fb7b96eec23b1 - // const amount = 1.0204004980625; - // const transactionInfo = await getTransactionInfoFromNetwork({ - // txHash: - // '0xb31720ed83098a5ef7f8dd15f345c5a1e643c3b7debb98afab9fb7b96eec23b1', - // symbol: 'ETC', - // networkId: NETWORK_IDS.XDAI, - // fromAddress: '0x8d0846e68a457D457c71124d14D2b43988a17E4f', - // toAddress: '0x216D44960291E4129435c719217a7ECAe8c29927', - // timestamp: 1696324809, - // amount, - // }); - // assert.isOk(transactionInfo); - // assert.equal(transactionInfo.currency, 'ETC'); - // assert.equal(transactionInfo.amount, amount); - // }); - - it('should return transaction when transactionHash is wrong because of speedup in ethereum classic', async () => { - const amount = 1.0204004980625; - const txHash = - '0xb31720ed83098a5ef7f8dd15f345c5a1e643c3b7debb98afab9fb7b96eec1111'; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash, - symbol: 'ETC', - networkId: NETWORK_IDS.ETC, - fromAddress: '0x8d0846e68a457D457c71124d14D2b43988a17E4f', - toAddress: '0x216D44960291E4129435c719217a7ECAe8c29927', - timestamp: 1696324809, - nonce: 28, - amount, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'ETC'); - assert.equal(transactionInfo.amount, amount); - assert.notEqual(transactionInfo.hash, txHash); - }); - it('should return transaction detail for DAI transfer on ethereum classic', async () => { - // https://etc.blockscout.com/tx/0x48e0c03ed99996fac3a7ecaaf05a1582a9191d8e37b6ebdbdd630b83350faf63 - // eslint-disable-next-line @typescript-eslint/no-loss-of-precision - const amount = 4492.059297640078891631; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '0x48e0c03ed99996fac3a7ecaaf05a1582a9191d8e37b6ebdbdd630b83350faf63', - symbol: 'DAI', - networkId: NETWORK_IDS.ETC, - fromAddress: '0x1a50354Cb666BD015760399D49b4b4D8a8f4a978', - toAddress: '0x40E3780e5Bec58629ac4C5Dc3bcA3dF2d7FD0C35', - timestamp: 1668186000, - amount, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'DAI'); - assert.equal(transactionInfo.amount, amount); - }); - it('should return error when transactionHash is wrong on ethereum classic', async () => { - // https://etc.blockscout.com/tx/0x48e0c03ed99996fac3a7ecaaf05a1582a9191d8e37b6ebdbdd630b83350faf63 - const badFunc = async () => { - await getTransactionInfoFromNetwork({ - amount: 0.04, - txHash: - '0x48e0c03ed99996fac3a7ecaaf05a1582a9191d8e37b6ebdbdd630b83350f1111', - symbol: 'DAI', - networkId: NETWORK_IDS.ETC, - fromAddress: '0x1a50354Cb666BD015760399D49b4b4D8a8f4a978', - toAddress: '0x40E3780e5Bec58629ac4C5Dc3bcA3dF2d7FD0C35', - timestamp: 1668186000, - - nonce: 99999999, - }); - }; - await assertThrowsAsync( - badFunc, - errorMessages.TRANSACTION_WITH_THIS_NONCE_IS_NOT_MINED_ALREADY, - ); - }); - - it('should return transaction detail for normal transfer on ethereum classic testnet', async () => { - // https://etc-mordor.blockscout.com/tx/0xdf0581ead2dce7f6b4fd13bf075892245edbf513d96ef03e98e54adbc81c64c2 - const amount = 0.07; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '0xdf0581ead2dce7f6b4fd13bf075892245edbf513d96ef03e98e54adbc81c64c2', - symbol: 'mETC', - networkId: NETWORK_IDS.MORDOR_ETC_TESTNET, - fromAddress: '0xBF012CE0BBA042aCFfA89d0a2f29407644d46A0c', - toAddress: '0x1f88F255d9218e0Bd441C72422A3E40a0408ff53', - timestamp: 1696924970, - amount, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'mETC'); - assert.equal(transactionInfo.amount, amount); - }); - it('should return transaction when transactionHash is wrong because of speedup in ethereum classic testnet', async () => { - // https://etc-mordor.blockscout.com/tx/0xdf0581ead2dce7f6b4fd13bf075892245edbf513d96ef03e98e54adbc81c64c2 - const amount = 0.07; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '0xdf0581ead2dce7f6b4fd13bf075892245edbf513d96ef03e98e54adbc81c6111', - symbol: 'mETC', - networkId: NETWORK_IDS.MORDOR_ETC_TESTNET, - fromAddress: '0xBF012CE0BBA042aCFfA89d0a2f29407644d46A0c', - toAddress: '0x1f88F255d9218e0Bd441C72422A3E40a0408ff53', - timestamp: 1696924970, - nonce: 5, - amount, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'mETC'); - assert.equal(transactionInfo.amount, amount); - }); - it('should return error when transactionHash is wrong on ethereum classic testnet', async () => { - // https://etc.blockscout.com/tx/0x48e0c03ed99996fac3a7ecaaf05a1582a9191d8e37b6ebdbdd630b83350faf63 - const badFunc = async () => { - await getTransactionInfoFromNetwork({ - amount: 0.04, - txHash: - '0x48e0c03ed99996fac3a7ecaaf05a1582a9191d8e37b6ebdbdd630b83350f1111', - symbol: 'mETC', - networkId: NETWORK_IDS.MORDOR_ETC_TESTNET, - fromAddress: '0x1a50354Cb666BD015760399D49b4b4D8a8f4a978', - toAddress: '0x40E3780e5Bec58629ac4C5Dc3bcA3dF2d7FD0C35', - timestamp: 1668186000, - - nonce: 99999999, - }); - }; - await assertThrowsAsync( - badFunc, - errorMessages.TRANSACTION_WITH_THIS_NONCE_IS_NOT_MINED_ALREADY, - ); - }); - - // it('should return transaction detail for normal transfer on mainnet', async () => { - // // https://etherscan.io/tx/0x37765af1a7924fb6ee22c83668e55719c9ecb1b79928bd4b208c42dfff44da3a - // const amount = 0.04; - // const transactionInfo = await getTransactionInfoFromNetwork({ - // txHash: - // '0x37765af1a7924fb6ee22c83668e55719c9ecb1b79928bd4b208c42dfff44da3a', - // symbol: 'ETH', - // networkId: NETWORK_IDS.MAIN_NET, - // fromAddress: '0x839395e20bbB182fa440d08F850E6c7A8f6F0780', - // toAddress: '0x5ac583feb2b1f288c0a51d6cdca2e8c814bfe93b', - // timestamp: 1607360947, - // amount, - // }); - // assert.isOk(transactionInfo); - // assert.equal(transactionInfo.currency, 'ETH'); - // assert.equal(transactionInfo.amount, amount); - // }); - - // it('should return transaction detail for Gitcoin transfer on mainnet', async () => { - // // https://etherscan.io/tx/0x860bd7499393a02e0e732bffec4b2cc52ac04220989f053770aa05c63dbf9725 - // const amount = 2; - // const transactionInfo = await getTransactionInfoFromNetwork({ - // txHash: - // '0x860bd7499393a02e0e732bffec4b2cc52ac04220989f053770aa05c63dbf9725', - // symbol: 'GTC', - // networkId: NETWORK_IDS.MAIN_NET, - // fromAddress: '0xed8db37778804a913670d9367aaf4f043aad938b', - // toAddress: '0x236daa98f115caa9991a3894ae387cdc13eaad1b', - // timestamp: 1638994045, - // amount, - // }); - // assert.isOk(transactionInfo); - // assert.equal(transactionInfo.currency, 'GTC'); - // assert.equal(transactionInfo.amount, amount); - // }); - it('should return error when transactionHash is wrong on mainnet', async () => { // https://etherscan.io/tx/0x37765af1a7924fb6ee22c83668e55719c9ecb1b79928bd4b208c42dfff44da3a const badFunc = async () => { @@ -241,170 +29,6 @@ function getTransactionDetailTestCases() { ); }); - // it('should return error when fromAddress of transaction is different from donation fromAddress', async () => { - // const amount = 0.04; - // // https://etherscan.io/tx/0x37765af1a7924fb6ee22c83668e55719c9ecb1b79928bd4b208c42dfff44da3a - // const badFunc = async () => { - // await getTransactionInfoFromNetwork({ - // txHash: - // '0x37765af1a7924fb6ee22c83668e55719c9ecb1b79928bd4b208c42dfff44da3a', - // symbol: 'ETH', - // networkId: NETWORK_IDS.MAIN_NET, - // fromAddress: '0x2ea846dc38c6b6451909f1e7ff2bf613a96dc1f3', - // toAddress: '0x5ac583feb2b1f288c0a51d6cdca2e8c814bfe93b', - // amount, - // timestamp: 1607360947, - // }); - // }; - // await assertThrowsAsync( - // badFunc, - // errorMessages.TRANSACTION_FROM_ADDRESS_IS_DIFFERENT_FROM_SENT_FROM_ADDRESS, - // ); - // }); - - // it('should return error when fromAddress of transaction is different from donation fromAddress', async () => { - // const amount = 0.04; - // // https://etherscan.io/tx/0x37765af1a7924fb6ee22c83668e55719c9ecb1b79928bd4b208c42dfff44da3a - // const badFunc = async () => { - // await getTransactionInfoFromNetwork({ - // txHash: - // '0x37765af1a7924fb6ee22c83668e55719c9ecb1b79928bd4b208c42dfff44da3a', - // symbol: 'ETH', - // networkId: NETWORK_IDS.MAIN_NET, - // fromAddress: '0x2ea846dc38c6b6451909f1e7ff2bf613a96dc1f3', - // toAddress: '0x5ac583feb2b1f288c0a51d6cdca2e8c814bfe93b', - // amount, - // timestamp: 1607360947, - // }); - // }; - // await assertThrowsAsync( - // badFunc, - // errorMessages.TRANSACTION_FROM_ADDRESS_IS_DIFFERENT_FROM_SENT_FROM_ADDRESS, - // ); - // }); - - // it('should return error when transaction time is newer than sent timestamp on mainnet', async () => { - // const amount = 0.04; - // // https://etherscan.io/tx/0x37765af1a7924fb6ee22c83668e55719c9ecb1b79928bd4b208c42dfff44da3a - // const badFunc = async () => { - // await getTransactionInfoFromNetwork({ - // txHash: - // '0x37765af1a7924fb6ee22c83668e55719c9ecb1b79928bd4b208c42dfff44da3a', - // symbol: 'ETH', - // networkId: NETWORK_IDS.MAIN_NET, - // fromAddress: '0x839395e20bbB182fa440d08F850E6c7A8f6F0780', - // toAddress: '0x5ac583feb2b1f288c0a51d6cdca2e8c814bfe93b', - // amount, - // timestamp: 1607360950 + ONE_DAY, - // }); - // }; - // await assertThrowsAsync( - // badFunc, - // errorMessages.TRANSACTION_CANT_BE_OLDER_THAN_DONATION, - // ); - // }); - - // it('should return transaction when transactionHash is wrong because of speedup in mainnet', async () => { - // const amount = 0.04; - // // https://etherscan.io/tx/0x37765af1a7924fb6ee22c83668e55719c9ecb1b79928bd4b208c42dfff44da3a - // const txHash = - // '0x37765af1a7924fb6ee22c83668e55719c9ecb1b79928bd4b208c42dfff44da21'; - // const transactionInfo = await getTransactionInfoFromNetwork({ - // txHash, - // symbol: 'ETH', - // networkId: NETWORK_IDS.MAIN_NET, - // fromAddress: '0x839395e20bbB182fa440d08F850E6c7A8f6F0780', - // toAddress: '0x5ac583feb2b1f288c0a51d6cdca2e8c814bfe93b', - // nonce: 3938, - // amount, - // timestamp: 1607360947, - // }); - // assert.isOk(transactionInfo); - // assert.equal(transactionInfo.currency, 'ETH'); - // assert.equal(transactionInfo.amount, amount); - // assert.notEqual(transactionInfo.hash, txHash); - // }); - - // it('should return transaction detail for DAI token transfer on mainnet', async () => { - // // https://etherscan.io/tx/0x5b80133493a5be96385f00ce22a69c224e66fa1fc52b3b4c33e9057f5e873f49 - // const amount = 1760; - // const transactionInfo = await getTransactionInfoFromNetwork({ - // txHash: - // '0x5b80133493a5be96385f00ce22a69c224e66fa1fc52b3b4c33e9057f5e873f49', - // symbol: 'DAI', - // networkId: NETWORK_IDS.MAIN_NET, - // fromAddress: '0x5ac583feb2b1f288c0a51d6cdca2e8c814bfe93b', - // toAddress: '0x2Ea846Dc38C6b6451909F1E7ff2bF613a96DC1F3', - // amount, - // timestamp: 1624772582, - // }); - // assert.isOk(transactionInfo); - // assert.equal(transactionInfo.currency, 'DAI'); - // assert.equal(transactionInfo.amount, amount); - // }); - - // it('should return transaction detail for DAI token transfer on mainnet, when amount difference is tiny', async () => { - // // https://etherscan.io/tx/0x5b80133493a5be96385f00ce22a69c224e66fa1fc52b3b4c33e9057f5e873f49 - // const amount = 1760.001; - // const transactionInfo = await getTransactionInfoFromNetwork({ - // txHash: - // '0x5b80133493a5be96385f00ce22a69c224e66fa1fc52b3b4c33e9057f5e873f49', - // symbol: 'DAI', - // networkId: NETWORK_IDS.MAIN_NET, - // fromAddress: '0x5ac583feb2b1f288c0a51d6cdca2e8c814bfe93b', - // toAddress: '0x2Ea846Dc38C6b6451909F1E7ff2bF613a96DC1F3', - // amount, - // timestamp: 1624772582, - // }); - // assert.isOk(transactionInfo); - // assert.equal(transactionInfo.currency, 'DAI'); - // assert.equal(transactionInfo.amount, 1760); - // }); - - // it('should return error when fromAddress of transaction is different from donation fromAddress for DAI in mainnet', async () => { - // const amount = 1760; - // // https://etherscan.io/tx/0x5b80133493a5be96385f00ce22a69c224e66fa1fc52b3b4c33e9057f5e873f49 - // const badFunc = async () => { - // await getTransactionInfoFromNetwork({ - // txHash: - // '0x5b80133493a5be96385f00ce22a69c224e66fa1fc52b3b4c33e9057f5e873f49', - // symbol: 'DAI', - // networkId: NETWORK_IDS.MAIN_NET, - // fromAddress: '0x2ea846dc38c6b6451909f1e7ff2bf613a96dc1f3', - // toAddress: '0x2Ea846Dc38C6b6451909F1E7ff2bF613a96DC1F3', - // amount, - // nonce: 4, - // timestamp: 1624772582, - // }); - // }; - // await assertThrowsAsync( - // badFunc, - // errorMessages.TRANSACTION_FROM_ADDRESS_IS_DIFFERENT_FROM_SENT_FROM_ADDRESS, - // ); - // }); - - // it('should return error when toAddress of transaction is different to donation toAddress for DAI in mainnet', async () => { - // const amount = 1760; - // // https://etherscan.io/tx/0x5b80133493a5be96385f00ce22a69c224e66fa1fc52b3b4c33e9057f5e873f49 - // const badFunc = async () => { - // await getTransactionInfoFromNetwork({ - // txHash: - // '0x5b80133493a5be96385f00ce22a69c224e66fa1fc52b3b4c33e9057f5e873f49', - // symbol: 'DAI', - // networkId: NETWORK_IDS.MAIN_NET, - // fromAddress: '0x5ac583feb2b1f288c0a51d6cdca2e8c814bfe93b', - // toAddress: '0x2Ea846Dc38C6b6451909F1E7ff2bF613a96DC1F4', - // amount, - // nonce: 4, - // timestamp: 1624772582, - // }); - // }; - // await assertThrowsAsync( - // badFunc, - // errorMessages.TRANSACTION_TO_ADDRESS_IS_DIFFERENT_FROM_SENT_TO_ADDRESS, - // ); - // }); - it('should return error when sent nonce didnt mine already', async () => { const amount = 1760; const badFunc = async () => { @@ -464,120 +88,6 @@ function getTransactionDetailTestCases() { assert.equal(transactionInfo.amount, amount); }); - it('should return transaction detail for normal transfer on CELO', async () => { - // https://celoscan.io/tx/0xa2a282cf6a7dec8b166aa52ac3d00fcd15a370d414615e29a168cfbb592e3637 - - const amount = 0.999; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '0xa2a282cf6a7dec8b166aa52ac3d00fcd15a370d414615e29a168cfbb592e3637', - symbol: 'CELO', - networkId: NETWORK_IDS.CELO, - fromAddress: '0xf6436829cf96ea0f8bc49d300c536fcc4f84c4ed', - toAddress: '0x95b75068b8bc97716a458bedcf4df1cace802c12', - amount, - timestamp: 1680072295, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'CELO'); - assert.equal(transactionInfo.amount, amount); - }); - - it('should return transaction detail for normal transfer on CELO Alfajores', async () => { - // https://alfajores.celoscan.io/tx/0x6d983cd5223ca37ffce727b5222dfc382c2856b604b5848c91564bdfe132c376 - - const amount = 0.05; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '0x6d983cd5223ca37ffce727b5222dfc382c2856b604b5848c91564bdfe132c376', - symbol: 'CELO', - networkId: NETWORK_IDS.CELO_ALFAJORES, - fromAddress: '0x54b6ce742fbc89632d5bf94828b7caba6f8e3d65', - toAddress: '0xffcf8fdee72ac11b5c542428b35eef5769c409f0', - amount, - timestamp: 1680081702, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'CELO'); - assert.equal(transactionInfo.amount, amount); - }); - - it('should return transaction detail for normal transfer on Arbitrum Mainnet', async () => { - // https://arbiscan.io/tx/0xdaca7d68e784a60a6975fa9937abb6b287d7fe992ff806f8c375cb4c3b2152f3 - - const amount = 0.0038; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '0xdaca7d68e784a60a6975fa9937abb6b287d7fe992ff806f8c375cb4c3b2152f3', - symbol: 'ETH', - networkId: NETWORK_IDS.ARBITRUM_MAINNET, - fromAddress: '0x015e6fbce5119c32db66e7c544365749bb26cf8b', - toAddress: '0x5c66fef6ea22f37e7c1f7eee49e4e116d3fbfc68', - amount, - timestamp: 1708342629, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'ETH'); - assert.equal(transactionInfo.amount, amount); - }); - - it('should return transaction detail for normal transfer on Arbitrum Sepolia', async () => { - // https://sepolia.arbiscan.io/tx/0x25f17541ccb7248d931f2a1e11058a51ffb4db4968ed3e1d4a019ddc2d44802c - - const amount = 0.0069; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '0x25f17541ccb7248d931f2a1e11058a51ffb4db4968ed3e1d4a019ddc2d44802c', - symbol: 'ETH', - networkId: NETWORK_IDS.ARBITRUM_SEPOLIA, - fromAddress: '0xefc58dbf0e606c327868b55334998aacb27f9ef2', - toAddress: '0xc11c479473cd06618fc75816dd6b56be4ac80efd', - amount, - timestamp: 1708344659, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'ETH'); - assert.equal(transactionInfo.amount, amount); - }); - - it('should return transaction detail for normal transfer on Base Mainnet', async () => { - // https://basescan.org/tx/0x1cbf53e5a9a0874b9ad97316e4f2e1782e24bec318bacd183d3f48052bfe1523 - - const amount = 0.0032; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '0x1cbf53e5a9a0874b9ad97316e4f2e1782e24bec318bacd183d3f48052bfe1523', - symbol: 'ETH', - networkId: NETWORK_IDS.BASE_MAINNET, - fromAddress: '0xbaed383ede0e5d9d72430661f3285daa77e9439f', - toAddress: '0xa5401000d255dbb154deb756b82dd5105486d8c9', - amount, - timestamp: 1716445331, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'ETH'); - assert.equal(transactionInfo.amount, amount); - }); - - it('should return transaction detail for normal transfer on Base Sepolia', async () => { - // https://sepolia.basescan.org/tx/0x66fdfe46de46fa1fbb77de642cc778cafc85943204039f69694aee6121f764f4 - - const amount = 0.001; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '0x66fdfe46de46fa1fbb77de642cc778cafc85943204039f69694aee6121f764f4', - symbol: 'ETH', - networkId: NETWORK_IDS.BASE_SEPOLIA, - fromAddress: '0x9cab0c7ff1c6250e641f4dcd4d9cd9db83bffb71', - toAddress: '0xd7eedf8422ababfbcafc0797e809ceae742fc142', - amount, - timestamp: 1716445488, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'ETH'); - assert.equal(transactionInfo.amount, amount); - }); - // it('should return transaction detail for normal transfer on ZKEVM Mainnet', async () => { // // https://zkevm.polygonscan.com/tx/0xeba6b0325a2406fe8223bccc187eb7a34692be3a0c4ef76e940e13342e50a897 @@ -651,374 +161,6 @@ function getTransactionDetailTestCases() { assert.equal(transactionInfo.currency, 'ETH'); assert.equal(transactionInfo.amount, amount); }); - - it('should return transaction detail for normal transfer on xdai', async () => { - // https://blockscout.com/xdai/mainnet/tx/0x57b913ac40b2027a08655bdb495befc50612b72a9dd1f2be81249c970503c734 - const amount = 0.001; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '0x57b913ac40b2027a08655bdb495befc50612b72a9dd1f2be81249c970503c734', - symbol: 'XDAI', - networkId: NETWORK_IDS.XDAI, - fromAddress: '0xb20a327c9b4da091f454b1ce0e2e4dc5c128b5b4', - toAddress: '0x7ee789b7e6fa20eab7ecbce44626afa7f58a94b7', - amount, - timestamp: 1621241124, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'XDAI'); - assert.equal(transactionInfo.amount, amount); - }); - - it('should return transaction detail for normal transfer on xdai', async () => { - // https://blockscout.com/xdai/mainnet/tx/0x410796933522fdab4e909e53bc3c825e94ca0afb8bed12ee9b34dc82bfa31bd2 - const amount = 0.01; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '0x410796933522fdab4e909e53bc3c825e94ca0afb8bed12ee9b34dc82bfa31bd2', - symbol: 'XDAI', - networkId: NETWORK_IDS.XDAI, - fromAddress: '0x57748ecb251f2ec36027bf8b7b2c13b69b8e5222', - toAddress: '0x2c0d12ecee29f36c39510ac41d6dd1287d4fbf8a', - amount, - timestamp: 1659325170, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'XDAI'); - assert.equal(transactionInfo.amount, amount); - }); - - it('should return error when transactionHash is wrong on xdai', async () => { - const amount = 0.001; - const badFunc = async () => { - await getTransactionInfoFromNetwork({ - txHash: - '0x57b913ac40b2027a08655bdb495befc50612b72a9dd1f2be81249c970503c722', - symbol: 'XDAI', - networkId: NETWORK_IDS.XDAI, - fromAddress: '0xb20a327c9b4da091f454b1ce0e2e4dc5c128b5b4', - toAddress: '0x7ee789b7e6fa20eab7ecbce44626afa7f58a94b7', - amount, - nonce: 99999, - timestamp: 1621241124, - }); - }; - await assertThrowsAsync( - badFunc, - errorMessages.TRANSACTION_WITH_THIS_NONCE_IS_NOT_MINED_ALREADY, - ); - }); - - it('should return transaction detail for HNY token transfer on XDAI', async () => { - // https://blockscout.com/xdai/mainnet/tx/0x99e70642fe1aa03cb2db35c3e3909466e66b233840b7b1e0dd47296c878c16b4 - const amount = 0.001; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '0x99e70642fe1aa03cb2db35c3e3909466e66b233840b7b1e0dd47296c878c16b4', - symbol: 'HNY', - networkId: NETWORK_IDS.XDAI, - fromAddress: '0x826976d7c600d45fb8287ca1d7c76fc8eb732030', - toAddress: '0x5A5a0732c1231D99DB8FFcA38DbEf1c8316fD3E1', - amount, - timestamp: 1617903449, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'HNY'); - assert.equal(transactionInfo.amount, amount); - }); - - it('should return transaction detail for GIV token transfer on XDAI', async () => { - // https://blockscout.com/xdai/mainnet/tx/0x05a6e9dcab0e9561061e9b3be9dff36edda82d250468ad19c93e2926a5e97562 - const amount = 23000.000000000004; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '0x05a6e9dcab0e9561061e9b3be9dff36edda82d250468ad19c93e2926a5e97562', - symbol: 'GIV', - networkId: NETWORK_IDS.XDAI, - fromAddress: '0x5D28FE1e9F895464aab52287d85Ebff32B351674', - toAddress: '0x1079F830C09A886122eA11b46f450d9e4C4c0150', - amount, - timestamp: 1658953955, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'GIV'); - assert.equal(transactionInfo.amount, amount); - }); - - it('should return transaction detail for GIV token transfer on XDAI', async () => { - // https://blockscout.com/xdai/mainnet/tx/0xe3b05b89f71b63e385c4971be872a9becd18f696b1e8abaddbc29c1cce59da63 - const amount = 1500; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '0xe3b05b89f71b63e385c4971be872a9becd18f696b1e8abaddbc29c1cce59da63', - symbol: 'GIV', - networkId: NETWORK_IDS.XDAI, - fromAddress: '0x89E12F054526B985188b946063dDc874a62fEd45', - toAddress: '0xECb179EA5910D652eDa6988E919c7930F5Ffcf11', - amount, - timestamp: 1640408645, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'GIV'); - assert.equal(transactionInfo.amount, amount); - }); - - it('should return transaction detail for USDC token transfer on XDAI', async () => { - // https://blockscout.com/xdai/mainnet/tx/0x00aef89fc40cea0cc0cb7ae5ac18c0e586dccb200b230a9caabca0e08ff7a36b - const amount = 1; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '0x00aef89fc40cea0cc0cb7ae5ac18c0e586dccb200b230a9caabca0e08ff7a36b', - symbol: 'USDC', - networkId: NETWORK_IDS.XDAI, - fromAddress: '0x826976d7c600d45fb8287ca1d7c76fc8eb732030', - toAddress: '0x87f1c862c166b0ceb79da7ad8d0864d53468d076', - amount, - timestamp: 1626278641, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'USDC'); - assert.equal(transactionInfo.amount, amount); - }); - it('should return error when transaction time is newer than sent timestamp for HNY token transfer on XDAI', async () => { - // https://blockscout.com/xdai/mainnet/tx/0x99e70642fe1aa03cb2db35c3e3909466e66b233840b7b1e0dd47296c878c16b4 - const amount = 0.001; - const badFunc = async () => { - await getTransactionInfoFromNetwork({ - txHash: - '0x99e70642fe1aa03cb2db35c3e3909466e66b233840b7b1e0dd47296c878c16b4', - symbol: 'HNY', - networkId: NETWORK_IDS.XDAI, - fromAddress: '0x826976d7c600d45fb8287ca1d7c76fc8eb732030', - toAddress: '0x5A5a0732c1231D99DB8FFcA38DbEf1c8316fD3E1', - amount, - timestamp: 1617903450 + ONE_DAY, - }); - }; - await assertThrowsAsync( - badFunc, - errorMessages.TRANSACTION_CANT_BE_OLDER_THAN_DONATION, - ); - }); - it('should return transaction_not_found when it has not being mined before an hour', async () => { - const amount = 0.001; - const badFunc = async () => { - await getTransactionInfoFromNetwork({ - txHash: - '0x57b913ac40b2027a08655bdb495befc50612b72a9dd1f2be81249c970503c722', - symbol: 'XDAI', - networkId: NETWORK_IDS.XDAI, - fromAddress: '0xb20a327c9b4da091f454b1ce0e2e4dc5c128b5b4', - toAddress: '0x7ee789b7e6fa20eab7ecbce44626afa7f58a94b7', - amount, - nonce: 0, // for it to skip nonce if - timestamp: new Date().getTime() / 1000, - }); - }; - await assertThrowsAsync(badFunc, errorMessages.TRANSACTION_NOT_FOUND); - }); - it('should return transaction_not_found_and_nonce_is_used when it has not been mined after an hour', async () => { - const amount = 0.001; - const badFunc = async () => { - await getTransactionInfoFromNetwork({ - txHash: - '0x57b913ac40b2027a08655bdb495befc50612b72a9dd1f2be81249c970503c722', - symbol: 'XDAI', - networkId: NETWORK_IDS.XDAI, - fromAddress: '0xb20a327c9b4da091f454b1ce0e2e4dc5c128b5b4', - toAddress: '0x7ee789b7e6fa20eab7ecbce44626afa7f58a94b7', - amount, - nonce: 0, // for it to skip nonce if - timestamp: moment().add(2, 'hour').toDate().getTime() / 1000, - }); - }; - await assertThrowsAsync( - badFunc, - errorMessages.TRANSACTION_NOT_FOUND_AND_NONCE_IS_USED, - ); - }); - - // Two below test cases are failing in github actions sometimes because blockscout is down, so I commented them for now - - // it('should return transaction when transactionHash is wrong because of speedup in xdai', async () => { - // // https://blockscout.com/xdai/mainnet/tx/0x57b913ac40b2027a08655bdb495befc50612b72a9dd1f2be81249c970503c734 - // const amount = 0.001; - // const transactionInfo = await getTransactionInfoFromNetwork({ - // txHash: - // '0x57b913ac40b2027a08655bdb495befc50612b72a9dd1f2be81249c970503c722', - // symbol: 'XDAI', - // networkId: NETWORK_IDS.XDAI, - // fromAddress: '0xb20a327c9b4da091f454b1ce0e2e4dc5c128b5b4', - // toAddress: '0x7ee789b7e6fa20eab7ecbce44626afa7f58a94b7', - // amount, - // nonce: 10, - // timestamp: 1621241124, - // }); - // assert.isOk(transactionInfo); - // assert.equal(transactionInfo.currency, 'XDAI'); - // assert.equal(transactionInfo.amount, amount); - // }); - - // it('should return transaction detail for HNY token transfer on when transaction is invalid but speedup ', async () => { - // // https://blockscout.com/xdai/mainnet/tx/0x99e70642fe1aa03cb2db35c3e3909466e66b233840b7b1e0dd47296c878c16b4 - // const amount = 0.001; - // const transactionInfo = await getTransactionInfoFromNetwork({ - // txHash: - // '0x99e70642fe1aa03cb2db35c3e3909466e66b233840b7b1e0dd47296c878c1234', - // symbol: 'HNY', - // networkId: NETWORK_IDS.XDAI, - // fromAddress: '0x826976d7c600d45fb8287ca1d7c76fc8eb732030', - // toAddress: '0x5A5a0732c1231D99DB8FFcA38DbEf1c8316fD3E1', - // amount, - // nonce: 41, - // timestamp: 1617903449, - // }); - // assert.isOk(transactionInfo); - // assert.equal(transactionInfo.currency, 'HNY'); - // assert.equal(transactionInfo.amount, amount); - // }); - - /// SOLANA - it('should return transaction detail for SOL transfer on Solana #1', async () => { - // https://explorer.solana.com/tx/5GQGAgGfMNypB5GN4Pp2t3mEMky89bbpZwNDaDh1LJXopVm3bgSxFUgEJ4tEjf2NdibxX4NiiA752Ya2hzg2nqj8?cluster=devnet - const amount = 0.001; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '5GQGAgGfMNypB5GN4Pp2t3mEMky89bbpZwNDaDh1LJXopVm3bgSxFUgEJ4tEjf2NdibxX4NiiA752Ya2hzg2nqj8', - symbol: 'SOL', - chainType: ChainType.SOLANA, - networkId: NETWORK_IDS.SOLANA_DEVNET, - fromAddress: '5GECDSGSWmMuw6nMfmdBLapa91ZHDZeHqRP1fqvQokjY', - toAddress: 'DvWdrYYkwyM9mnTetpr3HBHUBKZ22QdbFEXQ8oquE7Zb', - timestamp: 1702931400, - amount, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'SOL'); - assert.equal(transactionInfo.amount, amount); - }); - - it('should return transaction detail for SOL transfer on Solana #2', async () => { - // https://explorer.solana.com/tx/3nzHwgxAu7mKw1dhGTVmqzY8Yet3kGWWqP5kr5D2fw1HzqPjqDGDe6xT5PguKXk8nAJcK4GpBEKWw7EzoLykKkCx?cluster=devnet - const amount = 1; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '3nzHwgxAu7mKw1dhGTVmqzY8Yet3kGWWqP5kr5D2fw1HzqPjqDGDe6xT5PguKXk8nAJcK4GpBEKWw7EzoLykKkCx', - symbol: 'SOL', - chainType: ChainType.SOLANA, - networkId: NETWORK_IDS.SOLANA_DEVNET, - fromAddress: '9B5XszUGdMaxCZ7uSQhPzdks5ZQSmWxrmzCSvtJ6Ns6g', - toAddress: 'GEhUKKZeENY1TmaavqvLJ5GbbQs9GkzECFSE2bpjzz3k', - timestamp: 1701289800, - amount, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'SOL'); - assert.equal(transactionInfo.amount, amount); - }); - - it('should return error when transaction time is newer than sent timestamp for SOL transfer on Solana', async () => { - // https://explorer.solana.com/tx/5GQGAgGfMNypB5GN4Pp2t3mEMky89bbpZwNDaDh1LJXopVm3bgSxFUgEJ4tEjf2NdibxX4NiiA752Ya2hzg2nqj8?cluster=devnet - - const amount = 0.001; - const badFunc = async () => { - await getTransactionInfoFromNetwork({ - txHash: - '5GQGAgGfMNypB5GN4Pp2t3mEMky89bbpZwNDaDh1LJXopVm3bgSxFUgEJ4tEjf2NdibxX4NiiA752Ya2hzg2nqj8', - symbol: 'SOL', - chainType: ChainType.SOLANA, - networkId: NETWORK_IDS.SOLANA_DEVNET, - fromAddress: '5GECDSGSWmMuw6nMfmdBLapa91ZHDZeHqRP1fqvQokjY', - toAddress: 'DvWdrYYkwyM9mnTetpr3HBHUBKZ22QdbFEXQ8oquE7Zb', - timestamp: 1702931400 + ONE_DAY, - amount, - }); - }; - await assertThrowsAsync( - badFunc, - errorMessages.TRANSACTION_CANT_BE_OLDER_THAN_DONATION, - ); - }); - - it('should return transaction detail for spl-token transfer on Solana devnet #1', async () => { - // https://solscan.io/tx/2tm14GVsDwXpMzxZzpEWyQnfzcUEv1DZQVQb6VdbsHcV8StoMbBtuQTkW1LJ8RhKKrAL18gbm181NgzuusiQfZ16?cluster=devnet - const amount = 7; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '2tm14GVsDwXpMzxZzpEWyQnfzcUEv1DZQVQb6VdbsHcV8StoMbBtuQTkW1LJ8RhKKrAL18gbm181NgzuusiQfZ16', - symbol: 'TEST-SPL-TOKEN', - chainType: ChainType.SOLANA, - networkId: NETWORK_IDS.SOLANA_DEVNET, - fromAddress: 'BxUK9tDLeMT7AkTR2jBTQQYUxGGw6nuWbQqGtiHHfftn', - toAddress: 'FAMREy7d73N5jPdoKowQ4QFm6DKPWuYxZh6cwjNAbpkY', - timestamp: 1704357745, - amount, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'TEST-SPL-TOKEN'); - assert.equal(transactionInfo.amount, amount); - }); - - it('should return transaction detail for spl-token transfer on Solana devnet #2', async () => { - // https://solscan.io/tx/3m6f1g2YK6jtbfVfuYsfDbhVzNAqozF8JJyjp1VuFDduecojqeCVK4htKnLTSk3qBwSqYUvgLpBTVpeLJRvNmeTg?cluster=devnet - const amount = 0.00000005; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '3m6f1g2YK6jtbfVfuYsfDbhVzNAqozF8JJyjp1VuFDduecojqeCVK4htKnLTSk3qBwSqYUvgLpBTVpeLJRvNmeTg', - symbol: 'TEST-SPL-TOKEN2', - chainType: ChainType.SOLANA, - networkId: NETWORK_IDS.SOLANA_DEVNET, - fromAddress: '26Aks2rN6mfqxdYRXKZbn8CS4GBv6fCMGFYfGWvfFfcx', - toAddress: '7TJgw4hDHh5wdKep3EsBkGMSvtf9LsxdXf89LA48uHoq', - timestamp: 1704699701, - amount, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'TEST-SPL-TOKEN2'); - assert.equal(transactionInfo.amount, amount); - }); - - it('should return transaction detail for RAY spl token transfer on Solana mainnet', async () => { - // https://solscan.io/tx/4ApdD7usYH5Cp7hsaWGKjnJW3mfyNpRw4S4NJbzwa2CQfnUkjY11sR2G1W3rvXmCzXwu3yNLz2CfkCHY5sQPdWzq - const amount = 0.005; - const transactionInfo = await getTransactionInfoFromNetwork({ - txHash: - '4ApdD7usYH5Cp7hsaWGKjnJW3mfyNpRw4S4NJbzwa2CQfnUkjY11sR2G1W3rvXmCzXwu3yNLz2CfkCHY5sQPdWzq', - symbol: 'RAY', - chainType: ChainType.SOLANA, - networkId: NETWORK_IDS.SOLANA_MAINNET, - fromAddress: 'FAMREy7d73N5jPdoKowQ4QFm6DKPWuYxZh6cwjNAbpkY', - toAddress: '6U29tmuvaGsTQqamf9Vt4o15JHTNq5RdJxoRW6NJxRdx', - timestamp: 1706429516, - amount, - }); - assert.isOk(transactionInfo); - assert.equal(transactionInfo.currency, 'RAY'); - assert.equal(transactionInfo.amount, amount); - }); - - it('should return error when transaction time is newer than sent timestamp for spl-token transfer on Solana', async () => { - // https://explorer.solana.com/tx/2tm14GVsDwXpMzxZzpEWyQnfzcUEv1DZQVQb6VdbsHcV8StoMbBtuQTkW1LJ8RhKKrAL18gbm181NgzuusiQfZ16?cluster=devnet - - const amount = 7; - const badFunc = async () => { - await getTransactionInfoFromNetwork({ - txHash: - '2tm14GVsDwXpMzxZzpEWyQnfzcUEv1DZQVQb6VdbsHcV8StoMbBtuQTkW1LJ8RhKKrAL18gbm181NgzuusiQfZ16', - symbol: 'TEST-SPL-TOKEN', - chainType: ChainType.SOLANA, - networkId: NETWORK_IDS.SOLANA_DEVNET, - fromAddress: 'BxUK9tDLeMT7AkTR2jBTQQYUxGGw6nuWbQqGtiHHfftn', - toAddress: 'FAMREy7d73N5jPdoKowQ4QFm6DKPWuYxZh6cwjNAbpkY', - timestamp: 1704357745 + ONE_DAY, - amount, - }); - }; - await assertThrowsAsync( - badFunc, - errorMessages.TRANSACTION_CANT_BE_OLDER_THAN_DONATION, - ); - }); } function closeToTestCases() { diff --git a/src/services/chains/index.ts b/src/services/chains/index.ts index fb11ef0ef..36ab901fa 100644 --- a/src/services/chains/index.ts +++ b/src/services/chains/index.ts @@ -1,9 +1,7 @@ import { ChainType } from '../../types/network'; -import { getSolanaTransactionInfoFromNetwork } from './solana/transactionService'; import { getEvmTransactionInfoFromNetwork } from './evm/transactionService'; import { i18n, translationErrorMessagesKeys } from '../../utils/errorMessages'; import { logger } from '../../utils/logger'; -import { NETWORK_IDS } from '../../provider'; export interface NetworkTransactionInfo { hash: string; @@ -79,25 +77,15 @@ export function validateTransactionWithInputData( export async function getTransactionInfoFromNetwork( input: TransactionDetailInput, ): Promise { - if (input.chainType === ChainType.SOLANA) { - return getSolanaTransactionInfoFromNetwork(input); - } - // If chain is not Solana, it's EVM for sure return getEvmTransactionInfoFromNetwork(input); } -export function getDefaultSolanaChainId(): number { - return Number(process.env.SOLANA_CHAIN_ID) || NETWORK_IDS.SOLANA_DEVNET; -} - export function getAppropriateNetworkId(params: { chainType?: ChainType; networkId: number; }): number { - return params.chainType === ChainType.SOLANA - ? getDefaultSolanaChainId() - : params.networkId; + return params.networkId; } // This function is used to compare two numbers with a delta as a margin of error diff --git a/src/services/chains/solana/transactionService.ts b/src/services/chains/solana/transactionService.ts deleted file mode 100644 index 8c92325c1..000000000 --- a/src/services/chains/solana/transactionService.ts +++ /dev/null @@ -1,155 +0,0 @@ -import SolanaWeb3, { ParsedInstruction } from '@solana/web3.js'; -import { logger } from '../../../utils/logger'; -import { - NetworkTransactionInfo, - TransactionDetailInput, - validateTransactionWithInputData, -} from '../index'; -import { normalizeAmount } from '../../../utils/utils'; -import { - i18n, - translationErrorMessagesKeys, -} from '../../../utils/errorMessages'; -import { findTokenByNetworkAndSymbol } from '../../../utils/tokenUtils'; -import { NETWORK_IDS } from '../../../provider'; - -const solanaProviders = new Map(); - -const getSolanaWebProvider = (chainId: number) => { - if (solanaProviders.has(chainId)) { - return solanaProviders.get(chainId); - } - switch (chainId) { - case NETWORK_IDS.SOLANA_MAINNET: - solanaProviders[chainId] = new SolanaWeb3.Connection( - process.env.SOLANA_MAINNET_NODE_RPC_URL as string, - ); - break; - case NETWORK_IDS.SOLANA_TESTNET: - solanaProviders[chainId] = new SolanaWeb3.Connection( - process.env.SOLANA_TEST_NODE_RPC_URL as string, - ); - break; - default: - // DEVNET - solanaProviders[chainId] = new SolanaWeb3.Connection( - process.env.SOLANA_DEVNET_NODE_RPC_URL as string, - ); - } - return solanaProviders[chainId]; -}; - -export const getSolanaTransactionDetailForSolanaTransfer = async ( - params: TransactionDetailInput, -): Promise => { - const TRANSFER_INSTRUCTION_TYPE = 'transfer'; - const SOL_CURRENCY_TYPE = 'SOL'; - - try { - const result = await getSolanaWebProvider( - params.networkId, - ).getParsedTransaction(params.txHash); - const data = result?.transaction?.message?.instructions?.find( - instruction => - instruction?.parsed?.type === TRANSFER_INSTRUCTION_TYPE && - instruction?.parsed?.info.source === params.fromAddress && - instruction?.parsed?.info.destination === params.toAddress, - ); - if (!data) { - return null; - } - const parsedData = data as ParsedInstruction; - - const txInfo = parsedData.parsed.info; - if (!txInfo) { - return null; - } - return { - from: txInfo.source, - to: txInfo.destination, - // SOLANA default decimal is 9 - amount: normalizeAmount(txInfo.lamports, 9), - currency: SOL_CURRENCY_TYPE, - timestamp: result!.blockTime as number, - hash: params.txHash, - }; - } catch (e) { - logger.error('getSolanaTransactionDetailForNormalTransfer error', e); - return null; - } -}; - -async function getTransactionDetailForSplTokenTransfer( - params: TransactionDetailInput, -): Promise { - try { - const SPL_TOKEN_TRANSFER_INSTRUCTION_TYPE = 'spl-token'; - const result = await getSolanaWebProvider( - params.networkId, - ).getParsedTransaction(params.txHash); - const token = await findTokenByNetworkAndSymbol( - params.networkId, - params.symbol, - ); - - const data = result?.transaction?.message?.instructions?.find( - instruction => - instruction?.program === SPL_TOKEN_TRANSFER_INSTRUCTION_TYPE && - instruction?.parsed?.info.authority === params.fromAddress, - ); - const toAddressPostBalance = result?.meta?.postTokenBalances?.find( - balance => - balance.owner === params.toAddress && balance.mint === token?.address, - ); - const toAddressPreBalance = result?.meta?.preTokenBalances?.find( - balance => - balance.owner === params.toAddress && balance.mint === token?.address, - ); - if (!data || !toAddressPostBalance) { - return null; - } - - // toAddressBalance might be null if this is first time that destination wallet receives this token - const amount = - toAddressPostBalance.uiTokenAmount?.uiAmount - - (toAddressPreBalance?.uiTokenAmount?.uiAmount || 0); - const parsedData = data as ParsedInstruction; - - const txInfo = parsedData.parsed.info; - if (!txInfo) { - return null; - } - return { - from: txInfo.authority, - - // we already check toAddressBalance.owner === params.toAddress - to: toAddressPostBalance?.owner, - amount, - currency: params.symbol, - timestamp: result!.blockTime as number, - hash: params.txHash, - }; - } catch (e) { - logger.error('getSolanaTransactionDetailForNormalTransfer error', e); - return null; - } -} - -export async function getSolanaTransactionInfoFromNetwork( - input: TransactionDetailInput, -): Promise { - const nativeToken = 'SOL'; - let txData; - if (nativeToken.toLowerCase() === input.symbol.toLowerCase()) { - txData = await getSolanaTransactionDetailForSolanaTransfer(input); - } else { - txData = await getTransactionDetailForSplTokenTransfer(input); - } - if (!txData) { - throw new Error( - i18n.__(translationErrorMessagesKeys.TRANSACTION_NOT_FOUND), - ); - } - validateTransactionWithInputData(txData, input); - return txData; -} diff --git a/src/services/cronJobs/backupDonationImport.test.ts b/src/services/cronJobs/backupDonationImport.test.ts index 1fecba3d7..1c74dbf3d 100644 --- a/src/services/cronJobs/backupDonationImport.test.ts +++ b/src/services/cronJobs/backupDonationImport.test.ts @@ -23,11 +23,14 @@ function createBackupDonationTestCases() { loginType: 'wallet', firstName: 'first name', }).save(); - const token = await findTokenByNetworkAndSymbol(NETWORK_IDS.XDAI, 'GIV'); + const token = await findTokenByNetworkAndSymbol( + NETWORK_IDS.MAIN_NET, + 'GIV', + ); const donation = await createBackupDonation({ projectId: project.id, - chainId: NETWORK_IDS.XDAI, + chainId: NETWORK_IDS.MAIN_NET, txHash: generateRandomEvmTxHash(), nonce: 1, amount: 10, @@ -35,7 +38,7 @@ function createBackupDonationTestCases() { token: { symbol: token.symbol, address: token.address, - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, }, anonymous: false, symbol: 'GIV', @@ -57,12 +60,15 @@ function createBackupDonationTestCases() { loginType: 'wallet', firstName: 'first name', }).save(); - const token = await findTokenByNetworkAndSymbol(NETWORK_IDS.XDAI, 'GIV'); + const token = await findTokenByNetworkAndSymbol( + NETWORK_IDS.MAIN_NET, + 'GIV', + ); const badFunc = async () => { await createBackupDonation({ projectId: 99999999, - chainId: NETWORK_IDS.XDAI, + chainId: NETWORK_IDS.MAIN_NET, txHash: generateRandomEvmTxHash(), nonce: 1, amount: 10, @@ -70,7 +76,7 @@ function createBackupDonationTestCases() { token: { symbol: token.symbol, address: token.address, - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, }, anonymous: false, symbol: 'GIV', diff --git a/src/services/donationService.test.ts b/src/services/donationService.test.ts index 792063aa3..dc47407d5 100644 --- a/src/services/donationService.test.ts +++ b/src/services/donationService.test.ts @@ -125,226 +125,6 @@ function syncDonationStatusWithBlockchainNetworkTestCases() { assert.equal(updateDonation.status, DONATION_STATUS.VERIFIED); }); - it('should verify a Celo donation', async () => { - // https://celoscan.io/tx/0xa2a282cf6a7dec8b166aa52ac3d00fcd15a370d414615e29a168cfbb592e3637 - - const amount = 0.999; - - const transactionInfo = { - txHash: - '0xa2a282cf6a7dec8b166aa52ac3d00fcd15a370d414615e29a168cfbb592e3637', - currency: 'CELO', - networkId: NETWORK_IDS.CELO, - fromAddress: '0xf6436829cf96ea0f8bc49d300c536fcc4f84c4ed', - toAddress: '0x95b75068b8bc97716a458bedcf4df1cace802c12', - amount, - timestamp: 1680072295 * 1000, - }; - const user = await saveUserDirectlyToDb(transactionInfo.fromAddress); - const project = await saveProjectDirectlyToDb({ - ...createProjectData(), - walletAddress: transactionInfo.toAddress, - }); - const donation = await saveDonationDirectlyToDb( - { - amount: transactionInfo.amount, - transactionNetworkId: transactionInfo.networkId, - transactionId: transactionInfo.txHash, - currency: transactionInfo.currency, - fromWalletAddress: transactionInfo.fromAddress, - toWalletAddress: transactionInfo.toAddress, - valueUsd: 100, - anonymous: false, - createdAt: new Date(transactionInfo.timestamp), - status: DONATION_STATUS.PENDING, - }, - user.id, - project.id, - ); - const updateDonation = await syncDonationStatusWithBlockchainNetwork({ - donationId: donation.id, - }); - assert.isOk(updateDonation); - assert.equal(updateDonation.id, donation.id); - assert.isTrue(updateDonation.segmentNotified); - assert.equal(updateDonation.status, DONATION_STATUS.VERIFIED); - }); - it('should verify a Arbitrum donation', async () => { - // https://arbiscan.io/tx/0xdaca7d68e784a60a6975fa9937abb6b287d7fe992ff806f8c375cb4c3b2152f3 - - const amount = 0.0038; - - const transactionInfo = { - txHash: - '0xdaca7d68e784a60a6975fa9937abb6b287d7fe992ff806f8c375cb4c3b2152f3', - currency: 'ETH', - networkId: NETWORK_IDS.ARBITRUM_MAINNET, - fromAddress: '0x015e6fbce5119c32db66e7c544365749bb26cf8b', - toAddress: '0x5c66fef6ea22f37e7c1f7eee49e4e116d3fbfc68', - amount, - timestamp: 1708342629 * 1000, - }; - const user = await saveUserDirectlyToDb(transactionInfo.fromAddress); - const project = await saveProjectDirectlyToDb({ - ...createProjectData(), - walletAddress: transactionInfo.toAddress, - }); - const donation = await saveDonationDirectlyToDb( - { - amount: transactionInfo.amount, - transactionNetworkId: transactionInfo.networkId, - transactionId: transactionInfo.txHash, - currency: transactionInfo.currency, - fromWalletAddress: transactionInfo.fromAddress, - toWalletAddress: transactionInfo.toAddress, - valueUsd: 100, - anonymous: false, - createdAt: new Date(transactionInfo.timestamp), - status: DONATION_STATUS.PENDING, - }, - user.id, - project.id, - ); - const updateDonation = await syncDonationStatusWithBlockchainNetwork({ - donationId: donation.id, - }); - assert.isOk(updateDonation); - assert.equal(updateDonation.id, donation.id); - assert.isTrue(updateDonation.segmentNotified); - assert.equal(updateDonation.status, DONATION_STATUS.VERIFIED); - }); - it('should verify a erc20 Arbitrum donation', async () => { - // https://arbiscan.io/tx/0xd7ba5a5d8149432217a161559e357904965620b58e776c4482b8b501e092e495 - - const amount = 999.2; - - const transactionInfo = { - txHash: - '0xd7ba5a5d8149432217a161559e357904965620b58e776c4482b8b501e092e495', - currency: 'USDT', - networkId: NETWORK_IDS.ARBITRUM_MAINNET, - fromAddress: '0x62383739d68dd0f844103db8dfb05a7eded5bbe6', - toAddress: '0x513b8c84fb6e36512b641b67de55a18704118fe7', - amount, - timestamp: 1708343905 * 1000, - }; - const user = await saveUserDirectlyToDb(transactionInfo.fromAddress); - const project = await saveProjectDirectlyToDb({ - ...createProjectData(), - walletAddress: transactionInfo.toAddress, - }); - const donation = await saveDonationDirectlyToDb( - { - amount: transactionInfo.amount, - transactionNetworkId: transactionInfo.networkId, - transactionId: transactionInfo.txHash, - currency: transactionInfo.currency, - fromWalletAddress: transactionInfo.fromAddress, - toWalletAddress: transactionInfo.toAddress, - valueUsd: 1000, - anonymous: false, - createdAt: new Date(transactionInfo.timestamp), - status: DONATION_STATUS.PENDING, - }, - user.id, - project.id, - ); - const updateDonation = await syncDonationStatusWithBlockchainNetwork({ - donationId: donation.id, - }); - assert.isOk(updateDonation); - assert.equal(updateDonation.id, donation.id); - assert.isTrue(updateDonation.segmentNotified); - assert.equal(updateDonation.status, DONATION_STATUS.VERIFIED); - }); - it('should verify a Arbitrum Sepolia donation', async () => { - // https://sepolia.arbiscan.io/tx/0x25f17541ccb7248d931f2a1e11058a51ffb4db4968ed3e1d4a019ddc2d44802c - - const amount = 0.0069; - - const transactionInfo = { - txHash: - '0x25f17541ccb7248d931f2a1e11058a51ffb4db4968ed3e1d4a019ddc2d44802c', - currency: 'ETH', - networkId: NETWORK_IDS.ARBITRUM_SEPOLIA, - fromAddress: '0xefc58dbf0e606c327868b55334998aacb27f9ef2', - toAddress: '0xc11c479473cd06618fc75816dd6b56be4ac80efd', - amount, - timestamp: 1708344659 * 1000, - }; - const user = await saveUserDirectlyToDb(transactionInfo.fromAddress); - const project = await saveProjectDirectlyToDb({ - ...createProjectData(), - walletAddress: transactionInfo.toAddress, - }); - const donation = await saveDonationDirectlyToDb( - { - amount: transactionInfo.amount, - transactionNetworkId: transactionInfo.networkId, - transactionId: transactionInfo.txHash, - currency: transactionInfo.currency, - fromWalletAddress: transactionInfo.fromAddress, - toWalletAddress: transactionInfo.toAddress, - valueUsd: 100, - anonymous: false, - createdAt: new Date(transactionInfo.timestamp), - status: DONATION_STATUS.PENDING, - }, - user.id, - project.id, - ); - const updateDonation = await syncDonationStatusWithBlockchainNetwork({ - donationId: donation.id, - }); - assert.isOk(updateDonation); - assert.equal(updateDonation.id, donation.id); - assert.isTrue(updateDonation.segmentNotified); - assert.equal(updateDonation.status, DONATION_STATUS.VERIFIED); - }); - it('should verify a erc20 Arbitrum Sepolia donation', async () => { - // https://sepolia.arbiscan.io/tx/0x5bcce1bac54ee92ff28e9913e8a002e6e8efc8e8632fdb8e6ebaa16d8c6fd4cb - - const amount = 100; - - const transactionInfo = { - txHash: - '0x5bcce1bac54ee92ff28e9913e8a002e6e8efc8e8632fdb8e6ebaa16d8c6fd4cb', - currency: 'cETH', - networkId: NETWORK_IDS.ARBITRUM_SEPOLIA, - fromAddress: '0x6a446d9d0d153aa07811de2ac8096b87baad305b', - toAddress: '0xf888186663aae1600282c6fb23b764a61937b913', - amount, - timestamp: 1708344801 * 1000, - }; - const user = await saveUserDirectlyToDb(transactionInfo.fromAddress); - const project = await saveProjectDirectlyToDb({ - ...createProjectData(), - walletAddress: transactionInfo.toAddress, - }); - const donation = await saveDonationDirectlyToDb( - { - amount: transactionInfo.amount, - transactionNetworkId: transactionInfo.networkId, - transactionId: transactionInfo.txHash, - currency: transactionInfo.currency, - fromWalletAddress: transactionInfo.fromAddress, - toWalletAddress: transactionInfo.toAddress, - valueUsd: 1000, - anonymous: false, - createdAt: new Date(transactionInfo.timestamp), - status: DONATION_STATUS.PENDING, - }, - user.id, - project.id, - ); - const updateDonation = await syncDonationStatusWithBlockchainNetwork({ - donationId: donation.id, - }); - assert.isOk(updateDonation); - assert.equal(updateDonation.id, donation.id); - assert.isTrue(updateDonation.segmentNotified); - assert.equal(updateDonation.status, DONATION_STATUS.VERIFIED); - }); it('should verify a Optimistic donation', async () => { // https://optimistic.etherscan.io/tx/0xc645bd4ebcb1cb249be4b3e4dad46075c973fd30649a39f27f5328ded15074e7 @@ -477,50 +257,6 @@ function syncDonationStatusWithBlockchainNetworkTestCases() { // assert.isTrue(updateDonation.segmentNotified); // }); - it('should verify a gnosis donation', async () => { - // https://blockscout.com/xdai/mainnet/tx/0x57b913ac40b2027a08655bdb495befc50612b72a9dd1f2be81249c970503c734 - - const transactionInfo = { - txHash: - '0x57b913ac40b2027a08655bdb495befc50612b72a9dd1f2be81249c970503c734', - currency: 'XDAI', - networkId: NETWORK_IDS.XDAI, - fromAddress: '0xb20a327c9b4da091f454b1ce0e2e4dc5c128b5b4', - toAddress: '0x7ee789b7e6fa20eab7ecbce44626afa7f58a94b7', - amount: 0.001, - timestamp: 1621241124 * 1000, - }; - - const user = await saveUserDirectlyToDb(transactionInfo.fromAddress); - const project = await saveProjectDirectlyToDb({ - ...createProjectData(), - walletAddress: transactionInfo.toAddress, - }); - const donation = await saveDonationDirectlyToDb( - { - amount: transactionInfo.amount, - transactionNetworkId: transactionInfo.networkId, - transactionId: transactionInfo.txHash, - currency: transactionInfo.currency, - fromWalletAddress: transactionInfo.fromAddress, - toWalletAddress: transactionInfo.toAddress, - valueUsd: 100, - anonymous: false, - createdAt: new Date(transactionInfo.timestamp), - status: DONATION_STATUS.PENDING, - }, - user.id, - project.id, - ); - const updateDonation = await syncDonationStatusWithBlockchainNetwork({ - donationId: donation.id, - }); - assert.isOk(updateDonation); - assert.equal(updateDonation.id, donation.id); - assert.equal(updateDonation.status, DONATION_STATUS.VERIFIED); - assert.isTrue(updateDonation.segmentNotified); - }); - it('should change status to failed when donation fromAddress is different with transaction fromAddress', async () => { // https://blockscout.com/xdai/mainnet/tx/0x99e70642fe1aa03cb2db35c3e3909466e66b233840b7b1e0dd47296c878c16b4 @@ -528,7 +264,7 @@ function syncDonationStatusWithBlockchainNetworkTestCases() { txHash: '0x99e70642fe1aa03cb2db35c3e3909466e66b233840b7b1e0dd47296c878c16b4', currency: 'HNY', - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, fromAddress: '0x826976d7c600d45fb8287ca1d7c76fc8eb732000', toAddress: '0x5A5a0732c1231D99DB8FFcA38DbEf1c8316fD3E1', amount: 0.001, @@ -574,7 +310,7 @@ function syncDonationStatusWithBlockchainNetworkTestCases() { txHash: '0xe3b05b89f71b63e385c4971be872a9becd18f696b1e8abaddbc29c1cce59da63', currency: 'GIV', - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, fromAddress: '0x89E12F054526B985188b946063dDc874a62fEd45', toAddress: '0xECb179EA5910D652eDa6988E919c7930F5Ffcf00', amount: 1500, @@ -620,7 +356,7 @@ function syncDonationStatusWithBlockchainNetworkTestCases() { txHash: '0x00aef89fc40cea0cc0cb7ae5ac18c0e586dccb200b230a9caabca0e08ff7a36b', currency: 'USDC', - networkId: NETWORK_IDS.XDAI, + networkId: NETWORK_IDS.MAIN_NET, fromAddress: '0x826976d7c600d45fb8287ca1d7c76fc8eb732030', toAddress: '0x87f1c862c166b0ceb79da7ad8d0864d53468d076', amount: 1, @@ -660,20 +396,6 @@ function syncDonationStatusWithBlockchainNetworkTestCases() { } function isProjectAcceptTokenTestCases() { - it('should return true for giveth projects accepting GIV on xdai', async () => { - const token = await Token.findOne({ - where: { - symbol: 'GIV', - networkId: NETWORK_IDS.XDAI, - }, - }); - const project = await saveProjectDirectlyToDb(createProjectData()); - const result = await isTokenAcceptableForProject({ - projectId: project.id, - tokenId: token?.id as number, - }); - assert.isTrue(result); - }); it('should return true for giveth projects accepting GIV on mainnet', async () => { const token = await Token.findOne({ where: { @@ -688,37 +410,6 @@ function isProjectAcceptTokenTestCases() { }); assert.isTrue(result); }); - it('should return true for giveth projects accepting WETH on xdai', async () => { - const token = await Token.findOne({ - where: { - symbol: 'WETH', - networkId: NETWORK_IDS.XDAI, - }, - }); - const project = await saveProjectDirectlyToDb(createProjectData()); - const result = await isTokenAcceptableForProject({ - projectId: project.id, - tokenId: token?.id as number, - }); - assert.isTrue(result); - }); - it('should return true for trace projects accepting GIV on xdai', async () => { - const token = await Token.findOne({ - where: { - symbol: 'GIV', - networkId: NETWORK_IDS.XDAI, - }, - }); - const project = await saveProjectDirectlyToDb({ - ...createProjectData(), - organizationLabel: ORGANIZATION_LABELS.TRACE, - }); - const result = await isTokenAcceptableForProject({ - projectId: project.id, - tokenId: token?.id as number, - }); - assert.isTrue(result); - }); it('should return true for trace projects accepting GIV on mainnet', async () => { const token = await Token.findOne({ where: { @@ -736,74 +427,6 @@ function isProjectAcceptTokenTestCases() { }); assert.isTrue(result); }); - it('should return true for trace projects accepting WETH on xdai', async () => { - const token = await Token.findOne({ - where: { - symbol: 'WETH', - networkId: NETWORK_IDS.XDAI, - }, - }); - const project = await saveProjectDirectlyToDb({ - ...createProjectData(), - organizationLabel: ORGANIZATION_LABELS.TRACE, - }); - const result = await isTokenAcceptableForProject({ - projectId: project.id, - tokenId: token?.id as number, - }); - assert.isTrue(result); - }); - it('should return true for endaoment projects accepting ETH on mainnet', async () => { - const token = await Token.findOne({ - where: { - symbol: 'ETH', - networkId: NETWORK_IDS.MAIN_NET, - }, - }); - const project = await saveProjectDirectlyToDb({ - ...createProjectData(), - organizationLabel: ORGANIZATION_LABELS.ENDAOMENT, - }); - const result = await isTokenAcceptableForProject({ - projectId: project.id, - tokenId: token?.id as number, - }); - assert.isTrue(result); - }); - it('should return false for endaoment projects accepting GIV on xdai', async () => { - const token = await Token.findOne({ - where: { - symbol: 'GIV', - networkId: NETWORK_IDS.XDAI, - }, - }); - const project = await saveProjectDirectlyToDb({ - ...createProjectData(), - organizationLabel: ORGANIZATION_LABELS.ENDAOMENT, - }); - const result = await isTokenAcceptableForProject({ - projectId: project.id, - tokenId: token?.id as number, - }); - assert.isFalse(result); - }); - it('should return false for endaoment projects accepting XDAI on xdai', async () => { - const token = await Token.findOne({ - where: { - symbol: 'XDAI', - networkId: NETWORK_IDS.XDAI, - }, - }); - const project = await saveProjectDirectlyToDb({ - ...createProjectData(), - organizationLabel: ORGANIZATION_LABELS.ENDAOMENT, - }); - const result = await isTokenAcceptableForProject({ - projectId: project.id, - tokenId: token?.id as number, - }); - assert.isFalse(result); - }); it('should return false for endaoment projects accepting GIV on mainnet', async () => { const token = await Token.findOne({ where: { diff --git a/src/services/projectViewService.test.ts b/src/services/projectViewService.test.ts index 675e10668..4867e9f1c 100644 --- a/src/services/projectViewService.test.ts +++ b/src/services/projectViewService.test.ts @@ -35,7 +35,6 @@ function getQfRoundActualDonationDetailsTestCases() { minimumValidUsdValue: 1, slug: new Date().getTime().toString(), eligibleNetworks: [ - NETWORK_IDS.XDAI, NETWORK_IDS.OPTIMISTIC, NETWORK_IDS.POLYGON, NETWORK_IDS.MAIN_NET, @@ -88,7 +87,6 @@ function getQfRoundActualDonationDetailsTestCases() { minimumValidUsdValue: 1, slug: new Date().getTime().toString(), eligibleNetworks: [ - NETWORK_IDS.XDAI, NETWORK_IDS.OPTIMISTIC, NETWORK_IDS.POLYGON, NETWORK_IDS.MAIN_NET, @@ -142,7 +140,6 @@ function getQfRoundActualDonationDetailsTestCases() { minimumValidUsdValue: 1, slug: new Date().getTime().toString(), eligibleNetworks: [ - NETWORK_IDS.XDAI, NETWORK_IDS.OPTIMISTIC, NETWORK_IDS.POLYGON, NETWORK_IDS.MAIN_NET, @@ -217,7 +214,6 @@ function getQfRoundActualDonationDetailsTestCases() { minimumValidUsdValue: 1, slug: new Date().getTime().toString(), eligibleNetworks: [ - NETWORK_IDS.XDAI, NETWORK_IDS.OPTIMISTIC, NETWORK_IDS.POLYGON, NETWORK_IDS.MAIN_NET, diff --git a/src/types/network.ts b/src/types/network.ts index de3cc0dcc..0197644a4 100644 --- a/src/types/network.ts +++ b/src/types/network.ts @@ -1,4 +1,3 @@ export enum ChainType { EVM = 'EVM', - SOLANA = 'SOLANA', } diff --git a/src/utils/networks.test.ts b/src/utils/networks.test.ts deleted file mode 100644 index 17693c18b..000000000 --- a/src/utils/networks.test.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { assert } from 'chai'; -import { detectAddressChainType } from './networks'; -import { ChainType } from '../types/network'; - -describe('networks - ' + detectAddressChainType.name, () => { - it('detect solana address - 1', () => { - assert.equal( - detectAddressChainType('GEhUKKZeENY1TmaavqvLJ5GbbQs9GkzECFSE2bpjzz3k'), - ChainType.SOLANA, - ); - }); -}); diff --git a/src/utils/networks.ts b/src/utils/networks.ts index 53f26a561..a824d9b2e 100644 --- a/src/utils/networks.ts +++ b/src/utils/networks.ts @@ -22,8 +22,6 @@ export const detectAddressChainType = ( address: string, ): ChainType | undefined => { switch (true) { - case isSolanaAddress(address): - return ChainType.SOLANA; case isEvmAddress(address): return ChainType.EVM; default: diff --git a/src/utils/validators/graphqlQueryValidators.ts b/src/utils/validators/graphqlQueryValidators.ts index 0d0f6f0a0..4b542c55c 100644 --- a/src/utils/validators/graphqlQueryValidators.ts +++ b/src/utils/validators/graphqlQueryValidators.ts @@ -19,8 +19,6 @@ const resourcePerDateRegex = new RegExp( const ethereumWalletAddressRegex = /^0x[a-fA-F0-9]{40}$/; const solanaWalletAddressRegex = /^[A-Za-z0-9]{43,44}$/; -const solanaProgramIdRegex = - /^(11111111111111111111111111111111|[1-9A-HJ-NP-Za-km-z]{43,44})$/; const txHashRegex = /^0x[a-fA-F0-9]{64}$/; const solanaTxRegex = /^[A-Za-z0-9]{86,88}$/; // TODO: Is this enough? We are using the signature to fetch transactions // const tokenSymbolRegex = /^[a-zA-Z0-9]{2,10}$/; // OPTIMISTIC OP token is 2 chars long @@ -95,9 +93,8 @@ export const createDonationQueryValidator = Joi.object({ .required() .valid(...Object.values(NETWORK_IDS)), tokenAddress: Joi.when('chainType', { - is: ChainType.SOLANA, - then: Joi.string().pattern(solanaProgramIdRegex), - otherwise: Joi.string().pattern(ethereumWalletAddressRegex), + is: ChainType.EVM, + then: Joi.string().pattern(ethereumWalletAddressRegex), }).messages({ 'string.pattern.base': i18n.__( translationErrorMessagesKeys.INVALID_TOKEN_ADDRESS, @@ -130,9 +127,8 @@ export const createDraftDonationQueryValidator = Joi.object({ .required() .valid(...Object.values(NETWORK_IDS)), tokenAddress: Joi.when('chainType', { - is: ChainType.SOLANA, - then: Joi.string().pattern(solanaProgramIdRegex), - otherwise: Joi.string().pattern(ethereumWalletAddressRegex), + is: ChainType.EVM, + then: Joi.string().pattern(ethereumWalletAddressRegex), }).messages({ 'string.pattern.base': i18n.__( translationErrorMessagesKeys.INVALID_TOKEN_ADDRESS, @@ -225,30 +221,16 @@ const managingFundsValidator = Joi.object({ ), networkId: Joi.number()?.valid( 0, // frontend may send 0 as a network id for solana, so we should allow it - NETWORK_IDS.SOLANA_MAINNET, // Solana - NETWORK_IDS.SOLANA_DEVNET, // Solana - NETWORK_IDS.SOLANA_TESTNET, // Solana NETWORK_IDS.MAIN_NET, NETWORK_IDS.ROPSTEN, NETWORK_IDS.GOERLI, NETWORK_IDS.POLYGON, - NETWORK_IDS.CELO, - NETWORK_IDS.CELO_ALFAJORES, - NETWORK_IDS.ARBITRUM_MAINNET, - NETWORK_IDS.ARBITRUM_SEPOLIA, - NETWORK_IDS.BASE_MAINNET, - NETWORK_IDS.BASE_SEPOLIA, NETWORK_IDS.ZKEVM_MAINNET, NETWORK_IDS.ZKEVM_CARDONA, NETWORK_IDS.OPTIMISTIC, NETWORK_IDS.OPTIMISM_SEPOLIA, - NETWORK_IDS.XDAI, - NETWORK_IDS.ETC, - NETWORK_IDS.MORDOR_ETC_TESTNET, ), - chainType: Joi.string() - .valid(ChainType.EVM, ChainType.SOLANA) - .default(ChainType.EVM), + chainType: Joi.string().valid(ChainType.EVM).default(ChainType.EVM), }), ), }); diff --git a/src/utils/validators/projectValidator.test.ts b/src/utils/validators/projectValidator.test.ts index 1b541ad27..14257f80d 100644 --- a/src/utils/validators/projectValidator.test.ts +++ b/src/utils/validators/projectValidator.test.ts @@ -9,7 +9,6 @@ import { assertThrowsAsync, createProjectData, generateRandomEtheriumAddress, - generateRandomSolanaAddress, saveProjectDirectlyToDb, SEED_DATA, } from '../../../test/testUtils'; @@ -131,21 +130,6 @@ function validateProjectWalletAddressTestCases() { }, errorMessages.INVALID_WALLET_ADDRESS); await saveProjectDirectlyToDb(createProjectData()); }); - it('should throw exception when address is not valid - Solana', async () => { - await assertThrowsAsync(async () => { - await validateProjectWalletAddress(SEED_DATA.MALFORMED_SOLANA_ADDRESS); - }, errorMessages.INVALID_WALLET_ADDRESS); - - const project = await saveProjectDirectlyToDb(createProjectData()); - - await assertThrowsAsync(async () => { - await validateProjectWalletAddress( - SEED_DATA.MALFORMED_SOLANA_ADDRESS, - project.id, - ChainType.SOLANA, - ); - }, errorMessages.INVALID_WALLET_ADDRESS); - }); it('should return true for valid address - Ethereum', async () => { const valid = await validateProjectWalletAddress( @@ -153,13 +137,6 @@ function validateProjectWalletAddressTestCases() { ); assert.isTrue(valid); }); - - it('should return true for valid address - Solana', async () => { - const valid = await validateProjectWalletAddress( - generateRandomSolanaAddress(), - ); - assert.isTrue(valid); - }); } function isWalletAddressValidTestCases() { it('should return true for valid address', () => { @@ -175,14 +152,6 @@ function isWalletAddressValidTestCases() { ), ); }); - it('should return false for valid Ethereum address when chainType is wrong', () => { - assert.isFalse( - isWalletAddressValid( - '0x5AC583Feb2b1f288C0A51d6Cdca2e8c814BFE93B', - ChainType.SOLANA, - ), - ); - }); it('should return false for valid Solana address when chainType is wrong', () => { assert.isFalse( isWalletAddressValid( @@ -202,12 +171,4 @@ function isWalletAddressValidTestCases() { isWalletAddressValid('7Qg4Nj7y6YV1iRQ6jQZn7hLQ7L4r1L7Xb1Y7JZrR9Q7g'), ); }); - it('should return true for valid solana address - chainType defined', () => { - assert.isTrue( - isWalletAddressValid( - '7Qg4Nj7y6YV1iRQ6jQZn7hLQ7L4r1L7Xb1Y7JZrR9Q7g', - ChainType.SOLANA, - ), - ); - }); } diff --git a/src/utils/validators/projectValidator.ts b/src/utils/validators/projectValidator.ts index 27fec6e16..e2b8ce961 100644 --- a/src/utils/validators/projectValidator.ts +++ b/src/utils/validators/projectValidator.ts @@ -135,14 +135,7 @@ export const isWalletAddressSmartContract = async ( ): Promise => { const networkIds = [ NETWORK_IDS.MAIN_NET, - NETWORK_IDS.XDAI, NETWORK_IDS.POLYGON, - NETWORK_IDS.CELO, - NETWORK_IDS.CELO_ALFAJORES, - NETWORK_IDS.ARBITRUM_MAINNET, - NETWORK_IDS.ARBITRUM_SEPOLIA, - NETWORK_IDS.BASE_MAINNET, - NETWORK_IDS.BASE_SEPOLIA, NETWORK_IDS.ZKEVM_MAINNET, NETWORK_IDS.ZKEVM_CARDONA, ]; diff --git a/src/workers/draftDonationMatchWorker.test.ts b/src/workers/draftDonationMatchWorker.test.ts index 98911bd1a..685e14ad0 100644 --- a/src/workers/draftDonationMatchWorker.test.ts +++ b/src/workers/draftDonationMatchWorker.test.ts @@ -18,7 +18,7 @@ import { User } from '../entities/user'; const RandomAddress1 = '0xf3ddeb5022a6f06b61488b48c90315087ca2beef'; const RandomAddress2 = '0xc42a4791735ae1253c50c6226832e37ede3669f5'; const draftSaveTimeStampMS = 1707567300 * 1000; -const networkId = NETWORK_IDS.XDAI; +const networkId = NETWORK_IDS.MAIN_NET; const anonymous = false; const sharedDonationData: Partial = { diff --git a/test/pre-test-scripts.ts b/test/pre-test-scripts.ts index f62fb7a15..05890f945 100644 --- a/test/pre-test-scripts.ts +++ b/test/pre-test-scripts.ts @@ -22,8 +22,6 @@ import { NETWORK_IDS } from '../src/provider'; import { MainCategory } from '../src/entities/mainCategory'; import { redis } from '../src/redis'; import { logger } from '../src/utils/logger'; -import { ChainType } from '../src/types/network'; -import { COINGECKO_TOKEN_IDS } from '../src/adapters/price/CoingeckoPriceAdapter'; async function seedDb() { await seedUsers(); @@ -40,21 +38,6 @@ async function seedDb() { } async function seedTokens() { - for (const token of SEED_DATA.TOKENS.xdai) { - const tokenData = { - ...token, - networkId: 100, - isGivbackEligible: true, - }; - if (token.symbol === 'GIV') { - (tokenData as any).order = 1; - } else if (token.symbol === 'XDAI') { - (tokenData as any).order = 2; - } else if (token.symbol === 'WETH') { - (tokenData as any).order = 3; - } - await Token.create(tokenData).save(); - } for (const token of SEED_DATA.TOKENS.mainnet) { const tokenData = { ...token, @@ -108,90 +91,6 @@ async function seedTokens() { } await Token.create(tokenData as Token).save(); } - for (const token of SEED_DATA.TOKENS.celo) { - const tokenData = { - ...token, - networkId: 42220, - isGivbackEligible: true, - }; - if (token.symbol === 'GIV') { - // TODO I'm not sure whether we support GIV or not - (tokenData as any).order = 1; - } else if (token.symbol === 'CELO') { - (tokenData as any).order = 2; - } - await Token.create(tokenData as Token).save(); - } - for (const token of SEED_DATA.TOKENS.celo_alfajores) { - const tokenData = { - ...token, - networkId: 44787, - isGivbackEligible: true, - }; - if (token.symbol === 'GIV') { - // TODO I'm not sure whether we support GIV or not - (tokenData as any).order = 1; - } else if (token.symbol === 'CELO') { - (tokenData as any).order = 2; - } - await Token.create(tokenData as Token).save(); - } - for (const token of SEED_DATA.TOKENS.arbitrum_mainnet) { - const tokenData = { - ...token, - networkId: 42161, - isGivbackEligible: true, - }; - if (token.symbol === 'GIV') { - // TODO I'm not sure whether we support GIV or not - (tokenData as any).order = 1; - } else if (token.symbol === 'ETH') { - (tokenData as any).order = 2; - } - await Token.create(tokenData as Token).save(); - } - for (const token of SEED_DATA.TOKENS.arbitrum_sepolia) { - const tokenData = { - ...token, - networkId: 421614, - isGivbackEligible: true, - }; - if (token.symbol === 'GIV') { - // TODO I'm not sure whether we support GIV or not - (tokenData as any).order = 1; - } else if (token.symbol === 'ETH') { - (tokenData as any).order = 2; - } - await Token.create(tokenData as Token).save(); - } - for (const token of SEED_DATA.TOKENS.base_mainnet) { - const tokenData = { - ...token, - networkId: NETWORK_IDS.BASE_MAINNET, - isGivbackEligible: true, - }; - if (token.symbol === 'GIV') { - // TODO I'm not sure whether we support GIV or not - (tokenData as any).order = 1; - } else if (token.symbol === 'ETH') { - (tokenData as any).order = 2; - } - await Token.create(tokenData as Token).save(); - } - for (const token of SEED_DATA.TOKENS.base_sepolia) { - const tokenData = { - ...token, - networkId: NETWORK_IDS.BASE_SEPOLIA, - isGivbackEligible: true, - }; - if (token.symbol === 'GIV') { - // TODO I'm not sure whether we support GIV or not - (tokenData as any).order = 1; - } else if (token.symbol === 'ETH') { - (tokenData as any).order = 2; - } - await Token.create(tokenData as Token).save(); - } for (const token of SEED_DATA.TOKENS.zkevm_mainnet) { const tokenData = { ...token, @@ -250,62 +149,6 @@ async function seedTokens() { } await Token.create(tokenData as Token).save(); } - for (const token of SEED_DATA.TOKENS.etc) { - const tokenData = { - ...token, - networkId: 61, - isGivbackEligible: true, - }; - if (token.symbol === 'GIV') { - // TODO I'm not sure whether we support GIV or not - (tokenData as any).order = 1; - } else if (token.symbol === 'ETC') { - (tokenData as any).order = 2; - } - await Token.create(tokenData as Token).save(); - } - for (const token of SEED_DATA.TOKENS.morderEtc) { - const tokenData = { - ...token, - networkId: 63, - isGivbackEligible: true, - }; - if (token.symbol === 'GIV') { - // TODO I'm not sure whether we support GIV or not - (tokenData as any).order = 1; - } else if (token.symbol === 'mETC') { - (tokenData as any).order = 2; - } - await Token.create(tokenData as Token).save(); - } - for (const token of SEED_DATA.TOKENS.solana_mainnet) { - const tokenData = { - ...token, - networkId: NETWORK_IDS.SOLANA_MAINNET, - isGivbackEligible: false, - chainType: ChainType.SOLANA, - coingeckoId: COINGECKO_TOKEN_IDS.SOLANA, - }; - await Token.create(tokenData as Token).save(); - } - for (const token of SEED_DATA.TOKENS.solana_devnet) { - const tokenData = { - ...token, - networkId: NETWORK_IDS.SOLANA_DEVNET, - isGivbackEligible: false, - chainType: ChainType.SOLANA, - }; - await Token.create(tokenData as Token).save(); - } - for (const token of SEED_DATA.TOKENS.solana_testnet) { - const tokenData = { - ...token, - networkId: NETWORK_IDS.SOLANA_TESTNET, - isGivbackEligible: false, - chainType: ChainType.SOLANA, - }; - await Token.create(tokenData as Token).save(); - } } async function seedOrganizations() { @@ -346,23 +189,13 @@ async function relateOrganizationsToTokens() { networkId: NETWORK_IDS.MAIN_NET, }, })) as Token; - const baseMainnetToken = (await Token.findOne({ - where: { - symbol: 'ETH', - networkId: NETWORK_IDS.BASE_MAINNET, - }, - })) as Token; const optimismMainnetToken = (await Token.findOne({ where: { symbol: 'ETH', networkId: NETWORK_IDS.OPTIMISTIC, }, })) as Token; - endaoment.tokens = [ - etherMainnetToken, - baseMainnetToken, - optimismMainnetToken, - ]; + endaoment.tokens = [etherMainnetToken, optimismMainnetToken]; await endaoment?.save(); const changeTokens = await Token.find({ where: [ diff --git a/test/testUtils.ts b/test/testUtils.ts index 99c5aee6e..b9e1c584f 100644 --- a/test/testUtils.ts +++ b/test/testUtils.ts @@ -555,9 +555,7 @@ export const SEED_DATA = { description: 'drafted description', }, ], - DAI_SMART_CONTRACT_ADDRESS: '0x6b175474e89094c44da98b954eedeac495271d0f', MALFORMED_ETHEREUM_ADDRESS: '0x5AC583Feb2b1f288C0A51d6Cdca2e8c814BFE93A', // changed last character - MALFORMED_SOLANA_ADDRESS: 'CdLgY2DCG36HXCySCHoBnEb2cXWpar8BKhp8Nbxpnww0', // changed last character ORGANIZATIONS: [ { name: 'Giveth', @@ -1411,28 +1409,6 @@ export const SEED_DATA = { coingeckoId: 'mpeth', }, ], - etc: [ - { - name: 'ETHEREUM CLASSIC native token', - symbol: 'ETC', - address: '0x0000000000000000000000000000000000000000', - decimals: 18, - }, - { - name: 'Dai Stablecoin', - symbol: 'DAI', - address: '0x2C78f1b70Ccf63CDEe49F9233e9fAa99D43AA07e', - decimals: 18, - }, - ], - morderEtc: [ - { - name: 'ETHEREUM CLASSIC Testnet native token', - symbol: 'mETC', - address: '0x0000000000000000000000000000000000000000', - decimals: 18, - }, - ], optimism_sepolia: [ { name: 'OPTIMISM native token', @@ -1441,90 +1417,6 @@ export const SEED_DATA = { decimals: 18, }, ], - solana_mainnet: [ - { - name: 'Solana native token', - symbol: 'SOL', - address: '11111111111111111111111111111111', - decimals: 9, - }, - { - name: 'Marinade staked SOL', - symbol: 'mSOL', - address: 'mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So', - decimals: 9, - }, - { - name: 'USDC', - symbol: 'USDC', - address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', - decimals: 6, - }, - { - name: 'Tether', - symbol: 'USDCT', - address: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB', - decimals: 6, - }, - { - name: 'Raydium', - symbol: 'RAY', - address: '4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R', - decimals: 6, - }, - { - name: 'BlazeStake Staked SOL', - symbol: 'BSOL', - address: 'bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1', - decimals: 9, - }, - { - name: 'Audius (Wormhole)', - symbol: 'AUDIO', - address: '9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM', - decimals: 8, - }, - { - name: 'Mango', - symbol: 'MANGO', - address: 'MangoCzJ36AjZyKwVj3VnYU4GTonjfVEnJmvvWaxLac', - decimals: 6, - }, - { - name: 'Coin98', - symbol: 'C98', - address: 'C98A4nkJXhpVZNAZdHUA95RpTF3T4whtQubL3YobiUX9', - decimals: 6, - }, - ], - solana_devnet: [ - { - name: 'Solana native token', - symbol: 'SOL', - address: '11111111111111111111111111111111', - decimals: 9, - }, - { - name: 'TEST-SPL-TOKEN', - symbol: 'TEST-SPL-TOKEN', - address: 'BrEahxkTrCKfjVy36pLD2gvVoMCUMEb1PinrAFtvJqPX', - decimals: 9, - }, - { - name: 'TEST-SPL-TOKEN2', - symbol: 'TEST-SPL-TOKEN2', - address: '8LDBhHJB7oMAjkJaetXa4njjetUVWDRTqvzkmhFQjgeK', - decimals: 9, - }, - ], - solana_testnet: [ - { - name: 'Solana native token', - symbol: 'SOL', - address: '11111111111111111111111111111111', - decimals: 9, - }, - ], goerli: [ { name: 'Ethereum native token', @@ -1546,239 +1438,6 @@ export const SEED_DATA = { decimals: 18, }, ], - xdai: [ - { - name: 'XDAI native token', - symbol: 'XDAI', - address: '0x0000000000000000000000000000000000000000', - decimals: 18, - isStableCoin: true, - }, - { - name: 'Giveth Token', - symbol: 'GIV', - coingeckoId: 'giveth', - address: '0x4f4F9b8D5B4d0Dc10506e5551B0513B61fD59e75', - decimals: 18, - }, - { - address: '0x1337BedC9D22ecbe766dF105c9623922A27963EC', - symbol: 'CRV', - name: 'Curve DAO Token', - decimals: 18, - }, - { - address: '0xc60e38C6352875c051B481Cbe79Dd0383AdB7817', - symbol: 'XNODE', - name: 'dAppNode on xDAI', - decimals: 18, - }, - { - address: '0x981fb9ba94078a2275a8fc906898ea107b9462a8', - symbol: 'PAN', - name: 'Panvala', - decimals: 18, - }, - { - address: '0x71850b7E9Ee3f13Ab46d67167341E4bDc905Eef9', - symbol: 'HNY', - name: 'Honey', - decimals: 18, - }, - { - address: '0xb7D311E2Eb55F2f68a9440da38e7989210b9A05e', - symbol: 'STAKE', - name: 'STAKE on xDai', - decimals: 18, - }, - { - address: '0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83', - symbol: 'USDC', - name: 'USDC on xDai', - decimals: 6, - }, - { - address: '0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1', - symbol: 'WETH', - name: 'Wrapped Ether on xDai', - decimals: 18, - }, - { - address: '0xE2e73A1c69ecF83F464EFCE6A5be353a37cA09b2', - symbol: 'LINK', - name: 'ChainLink Token on xDai', - decimals: 18, - }, - { - address: '0x1e16aa4Df73d29C029d94CeDa3e3114EC191E25A', - symbol: 'xMOON', - name: 'Moons on xDai', - decimals: 18, - }, - { - address: '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', - symbol: 'WXDAI', - name: 'Wrapped XDAI', - decimals: 18, - isStableCoin: true, - }, - { - address: '0x4ECaBa5870353805a9F068101A40E0f32ed605C6', - symbol: 'USDT', - name: 'Tether USD on xDai', - decimals: 6, - isStableCoin: true, - }, - { - address: '0x8e5bBbb09Ed1ebdE8674Cda39A0c169401db4252', - symbol: 'WBTC', - name: 'Wrapped BTC on xDai', - decimals: 8, - }, - { - address: '0x3a97704a1b25F08aa230ae53B352e2e72ef52843', - symbol: 'AGVE', - name: 'Agave Token', - decimals: 18, - }, - { - address: '0x38Fb649Ad3d6BA1113Be5F57B927053E97fC5bF7', - symbol: 'XCOMB', - name: 'xDAI Native Comb', - decimals: 18, - }, - { - address: '0xb0C5f3100A4d9d9532a4CfD68c55F1AE8da987Eb', - symbol: 'HAUS', - name: 'DAOhaus', - decimals: 18, - }, - { - address: '0x21a42669643f45Bc0e086b8Fc2ed70c23D67509d', - symbol: 'FOX', - name: 'Fox Token', - decimals: 18, - }, - { - address: '0x83FF60E2f93F8eDD0637Ef669C69D5Fb4f64cA8E', - symbol: 'BRIGHT', - name: 'Bright on xDAI', - decimals: 18, - }, - ], - celo: [ - { - symbol: 'CELO', - name: 'Celo Native', - address: '0x0000000000000000000000000000000000000000', - // address: '0x471EcE3750Da237f93B8E339c536989b8978a438', - decimals: 18, - }, - { - symbol: 'cUSD', - name: 'Celo Dollar', - address: '0x765DE816845861e75A25fCA122bb6898B8B1282a', - decimals: 18, - isStableCoin: true, - }, - { - symbol: 'cEUR', - name: 'Celo Euro', - address: '0xD8763CBa276a3738E6DE85b4b3bF5FDed6D6cA73', - decimals: 18, - }, - { - symbol: 'cREAL', - name: 'Celo Brazilian Real', - address: '0xe8537a3d056DA446677B9E9d6c5dB704EaAb4787', - decimals: 18, - }, - { - name: 'GLO', - symbol: 'GLO', - address: '0x4f604735c1cf31399c6e711d5962b2b3e0225ad3', - decimals: 18, - isStableCoin: true, - }, - ], - celo_alfajores: [ - { - symbol: 'CELO', - name: 'Celo Native', - address: '0x0000000000000000000000000000000000000000', - // address: '0xF194afDf50B03e69Bd7D057c1Aa9e10c9954E4C9', - decimals: 18, - }, - { - symbol: 'cUSD', - name: 'Celo Dollar', - address: '0x874069Fa1Eb16D44d622F2e0Ca25eeA172369bC1', - decimals: 18, - isStableCoin: true, - }, - { - symbol: 'cEUR', - name: 'Celo Euro', - address: '0x10c892A6EC43a53E45D0B916B4b7D383B1b78C0F', - decimals: 18, - }, - { - symbol: 'cREAL', - name: 'Celo Brazilian Real', - address: '0xE4D517785D091D3c54818832dB6094bcc2744545', - decimals: 18, - }, - ], - arbitrum_mainnet: [ - { - name: 'Arbitrum ETH', - symbol: 'ETH', - address: '0x0000000000000000000000000000000000000000', - decimals: 18, - coingeckoId: 'ethereum', - }, - { - name: 'usdt', - symbol: 'USDT', - address: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', - decimals: 6, - coingeckoId: 'tether', - }, - ], - arbitrum_sepolia: [ - { - name: 'Arbitrum Sepolia native token', - symbol: 'ETH', - address: '0x0000000000000000000000000000000000000000', - decimals: 18, - coingeckoId: 'ethereum', - }, - { - name: 'Chromatic test Eth', - symbol: 'cETH', - address: '0x93252009E644138b906aE1a28792229E577239B9', - decimals: 18, - coingeckoId: 'weth', - }, - ], - base_mainnet: [ - { - name: 'Base ETH', - symbol: 'ETH', - address: '0x0000000000000000000000000000000000000000', - decimals: 18, - coingeckoId: 'ethereum', - }, - ], - base_sepolia: [ - { - name: 'Base Sepolia native token', - symbol: 'ETH', - address: '0x0000000000000000000000000000000000000000', - decimals: 18, - coingeckoId: 'ethereum', - }, - ], zkevm_mainnet: [ { name: 'ZKEVM ETH',