diff --git a/.env.example b/.env.example
index 8df547e37..76b0825a0 100644
--- a/.env.example
+++ b/.env.example
@@ -1,7 +1,7 @@
COMPOSE_PROJECT_NAME=ghostfolio-development
# CACHE
-REDIS_HOST=localhost
+REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=
@@ -11,5 +11,5 @@ POSTGRES_USER=user
POSTGRES_PASSWORD=
ACCESS_TOKEN_SALT=
-DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?connect_timeout=300&sslmode=prefer
+DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?connect_timeout=300&sslmode=prefer
JWT_SECRET_KEY=
diff --git a/.eslintrc.json b/.eslintrc.json
deleted file mode 100644
index 75e362465..000000000
--- a/.eslintrc.json
+++ /dev/null
@@ -1,151 +0,0 @@
-{
- "root": true,
- "ignorePatterns": ["**/*"],
- "plugins": ["@nx"],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {
- "@nx/enforce-module-boundaries": [
- "warn",
- {
- "enforceBuildableLibDependency": true,
- "allow": [],
- "depConstraints": [
- {
- "sourceTag": "*",
- "onlyDependOnLibsWithTags": ["*"]
- }
- ]
- }
- ],
- "@typescript-eslint/no-extra-semi": "error",
- "no-extra-semi": "off"
- }
- },
- {
- "files": ["*.ts", "*.tsx"],
- "extends": ["plugin:@nx/typescript"]
- },
- {
- "files": ["*.js", "*.jsx"],
- "extends": ["plugin:@nx/javascript"]
- },
- {
- "files": ["*.ts"],
- "plugins": ["eslint-plugin-import", "@typescript-eslint"],
- "extends": [
- "plugin:@typescript-eslint/recommended-type-checked",
- "plugin:@typescript-eslint/stylistic-type-checked"
- ],
- "rules": {
- "@typescript-eslint/consistent-indexed-object-style": "off",
- "@typescript-eslint/dot-notation": "off",
- "@typescript-eslint/explicit-member-accessibility": [
- "off",
- {
- "accessibility": "explicit"
- }
- ],
- "@typescript-eslint/member-ordering": "warn",
- "@typescript-eslint/naming-convention": [
- "off",
- {
- "selector": "default",
- "format": ["camelCase"],
- "leadingUnderscore": "allow",
- "trailingUnderscore": "allow"
- },
- {
- "selector": ["variable", "classProperty", "typeProperty"],
- "format": ["camelCase", "UPPER_CASE"],
- "leadingUnderscore": "allow",
- "trailingUnderscore": "allow"
- },
- {
- "selector": "objectLiteralProperty",
- "format": null
- },
- {
- "selector": "enumMember",
- "format": ["camelCase", "UPPER_CASE", "PascalCase"]
- },
- {
- "selector": "typeLike",
- "format": ["PascalCase"]
- }
- ],
- "@typescript-eslint/no-empty-interface": "warn",
- "@typescript-eslint/no-inferrable-types": [
- "warn",
- {
- "ignoreParameters": true
- }
- ],
- "@typescript-eslint/no-non-null-assertion": "warn",
- "@typescript-eslint/no-shadow": [
- "warn",
- {
- "hoist": "all"
- }
- ],
- "@typescript-eslint/unified-signatures": "error",
- "@typescript-eslint/no-loss-of-precision": "warn",
- "@typescript-eslint/no-var-requires": "warn",
- "@typescript-eslint/ban-types": "warn",
- "arrow-body-style": "off",
- "constructor-super": "error",
- "eqeqeq": ["error", "smart"],
- "guard-for-in": "warn",
- "id-blacklist": "off",
- "id-match": "off",
- "import/no-deprecated": "warn",
- "no-bitwise": "error",
- "no-caller": "error",
- "no-debugger": "error",
- "no-empty": "off",
- "no-eval": "error",
- "no-fallthrough": "error",
- "no-new-wrappers": "error",
- "no-restricted-imports": ["error", "rxjs/Rx"],
- "no-undef-init": "error",
- "no-underscore-dangle": "off",
- "no-var": "error",
- "radix": "error",
- "no-unsafe-optional-chaining": "warn",
- "no-extra-boolean-cast": "warn",
- "no-empty-pattern": "warn",
- "no-useless-catch": "warn",
- "no-unsafe-finally": "warn",
- "no-prototype-builtins": "warn",
- "no-async-promise-executor": "warn",
- "no-constant-condition": "warn",
-
- // The following rules are part of @typescript-eslint/recommended-type-checked
- // and can be remove once solved
- "@typescript-eslint/await-thenable": "warn",
- "@typescript-eslint/ban-ts-comment": "warn",
- "@typescript-eslint/no-base-to-string": "warn",
- "@typescript-eslint/no-explicit-any": "warn",
- "@typescript-eslint/no-floating-promises": "warn",
- "@typescript-eslint/no-misused-promises": "warn",
- "@typescript-eslint/no-redundant-type-constituents": "warn",
- "@typescript-eslint/no-unnecessary-type-assertion": "warn",
- "@typescript-eslint/no-unsafe-argument": "warn",
- "@typescript-eslint/no-unsafe-assignment": "warn",
- "@typescript-eslint/no-unsafe-enum-comparison": "warn",
- "@typescript-eslint/no-unsafe-member-access": "warn",
- "@typescript-eslint/no-unsafe-return": "warn",
- "@typescript-eslint/no-unsafe-call": "warn",
- "@typescript-eslint/require-await": "warn",
- "@typescript-eslint/restrict-template-expressions": "warn",
- "@typescript-eslint/unbound-method": "warn",
-
- // The following rules are part of @typescript-eslint/stylistic-type-checked
- // and can be remove once solved
- "@typescript-eslint/prefer-nullish-coalescing": "warn" // TODO: Requires strictNullChecks: true
- }
- }
- ],
- "extends": ["plugin:storybook/recommended"]
-}
diff --git a/.github/workflows/extract-locales.yml b/.github/workflows/extract-locales.yml
new file mode 100644
index 000000000..c17eac5b6
--- /dev/null
+++ b/.github/workflows/extract-locales.yml
@@ -0,0 +1,40 @@
+name: Extract locales
+
+on:
+ push:
+ branches:
+ - main
+
+permissions:
+ contents: write
+ pull-requests: write
+
+jobs:
+ extract_locales:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Extract locales
+ run: npm run extract-locales
+
+ - name: Check changes
+ id: verify-changed-files
+ uses: tj-actions/verify-changed-files@v20
+
+ - name: Create pull request
+ if: steps.verify-changed-files.outputs.files_changed == 'true'
+ uses: peter-evans/create-pull-request@v7
+ with:
+ author: 'github-actions[bot] '
+ branch: 'feature/update-locales'
+ commit-message: 'Update locales'
+ delete-branch: true
+ title: 'Feature/update locales'
+ token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 33f1064ba..de1ef0182 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -94,12 +94,233 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## 2.115.0 - 2024-10-14
+### Added
+
+- Set up a _GitHub Action_ to automatically extract locales when the `main` branch changes
+
+### Changed
+
+- Extended the _Financial Modeling Prep_ service
+- Improved the language localization for Ukrainian (`uk`)
+- Refreshed the cryptocurrencies list
+- Upgraded `date-fns` from version `3.6.0` to `4.1.0`
+- Upgraded `rxjs` from version `7.5.6` to `7.8.1`
+
+### Fixed
+
+- Fixed an issue with the MIME type detection in the scraper configuration
+
+## 2.135.0 - 2025-01-19
+
+### Changed
+
+- Moved the language localization for Polski (`pl`) from experimental to general availability
+- Extended the _Financial Modeling Prep_ service
+- Switched to _ESLint_’s flat config format
+- Upgraded `chart.js` from version `4.2.0` to `4.4.7`
+- Upgraded `chartjs-chart-treemap` from version `2.3.1` to `3.1.0`
+- Upgraded `chartjs-plugin-annotation` from version `2.1.2` to `3.1.0`
+- Upgraded `eslint` dependencies
+- Upgraded `nestjs` from version `10.1.3` to `10.4.15`
+- Upgraded `Nx` from version `20.3.0` to `20.3.2`
+- Upgraded `reflect-metadata` from version `0.1.13` to `0.2.2`
+- Upgraded `uuid` from version `11.0.2` to `11.0.5`
+
+## 2.134.0 - 2025-01-15
+
+### Added
+
+- Set up the language localization for Українська (`uk`)
+
+### Changed
+
+- Extended the health check endpoint to include database and cache operations (experimental)
+- Refactored various `lodash` functions with native JavaScript equivalents
+- Improved the language localization for German (`de`)
+- Upgraded `prisma` from version `6.1.0` to `6.2.1`
+
+### Fixed
+
+- Fixed an issue with the import of activities with type `FEE` (where unit price is `0`)
+- Fixed an issue with the renaming of activities with type `FEE`, `INTEREST`, `ITEM` or `LIABILITY`
+- Handled an exception in the scraper configuration introduced by the migration from `got` to `fetch`
+
+## 2.133.1 - 2025-01-09
+
+### Added
+
+- Added a _Copy AI prompt to clipboard_ action to the analysis page (experimental)
+
### Changed
+- Improved the usability of the _Copy link to clipboard_ action by adding a confirmation on success in the access table to share the portfolio
+- Improved the endpoint to fetch the logo of an asset or a platform by sending the original MIME type
+- Eliminated `got` in favor of using `fetch`
+- Changed the `REDIS_HOST` from `localhost` to `redis` in `.env.example`
+- Changed the _Postgres_ host from `localhost` to `postgres` in `.env.example`
+- Changed the _Postgres_ image from `postgres:15` to `postgres:15-alpine` in the `docker-compose` files
+- Introduced `extends` in the `docker-compose` files
+- Improved the language localization for German (`de`)
+- Refreshed the cryptocurrencies list
+- Upgraded `envalid` from version `7.3.1` to `8.0.0`
+- Upgraded `replace-in-file` from version `7.0.1` to `8.3.0`
+
+### Fixed
+
+- Improved the handling of a missing url in the endpoint to fetch the logo of an asset or a platform
+- Fixed the _Storybook_ setup
+
+## 2.132.0 - 2024-12-30
+
+### Added
+
+- Added the user interface for received access from others
+
+### Changed
+
+- Improved support for automatic deletion of unused asset profiles when deleting activities
+- Migrated the coupon redemption to the notification service for prompt dialogs
+- Refactored `got` calls to use `AbortSignal.timeout()` without `AbortController()`
+- Improved the language localization for German (`de`)
+- Eliminated `body-parser` in favor of using `@nestjs/platform-express`
+- Upgraded the _Stripe_ dependencies
+- Upgraded `angular` from version `18.2.8` to `19.0.5`
+- Upgraded `husky` from version `9.1.6` to `9.1.7`
+- Upgraded `marked` from version `12.0.2` to `15.0.4`
+- Upgraded `ng-extract-i18n-merge` from version `2.12.0` to `2.13.1`
+- Upgraded `ngx-device-detector` from version `8.0.0` to `9.0.0`
+- Upgraded `ngx-markdown` from version `18.0.0` to `19.0.0`
+- Upgraded `Nx` from version `20.1.2` to `20.3.0`
+- Upgraded `prisma` from version `6.0.1` to `6.1.0`
+- Upgraded `storybook` from version `8.2.5` to `8.4.7`
+- Upgraded `zone.js` from version `0.14.10` to `0.15.0`
+
+### Fixed
+
+- Fixed an issue with the algebraic sign in the twitter bot service
+
+## 2.131.0 - 2024-12-25
+
+### Changed
+
+- Improved the search for asset profiles with `MANUAL` data source in the create or update activity dialog
+- Improved the usability of the link to manage access with a new icon
+- Improved support to import activities by `isin` in the _Yahoo Finance_ service
+- Improved the language localization for Polish (`pl`)
+
+## 2.130.0 - 2024-12-21
+
+### Added
+
+- Added a new static portfolio analysis rule: _Asset Class Cluster Risk_ (Equity)
+- Added a new static portfolio analysis rule: _Asset Class Cluster Risk_ (Fixed Income)
+- Set up a notification service for prompt dialogs
+
+### Changed
+
+- Improved the usability to edit the emergency fund
+- Extracted the market data management from the admin control panel endpoint to a dedicated endpoint
+- Improved the language localization for German (`de`)
+- Improved the language localization for Polish (`pl`)
+- Upgraded `big.js` from version `6.2.1` to `6.2.2`
+
+## 2.129.0 - 2024-12-14
+
+### Added
+
+- Added `userId` to the `SymbolProfile` database schema
+
+### Changed
+
+- Improved the usability of the _X-ray_ page by hiding empty rule categories
+- Improved the language localization for German (`de`)
+
+## 2.128.0 - 2024-12-12
+
+### Changed
+
+- Optimized the holding selector in the assistant
+- Improved the language localization for German (`de`)
+- Upgraded `@internationalized/number` from version `3.5.2` to `3.6.0`
+
+### Fixed
+
+- Fixed an exception in the caching of the portfolio snapshot in the portfolio calculator
+- Fixed the import of `jsonpath` to support REST APIs (`JSON`) via the scraper configuration
+
+## 2.127.0 - 2024-12-08
+
+### Added
+
+- Extended the _X-ray_ page by a summary
+
+### Fixed
+
+- Fixed an exception in the caching of the portfolio snapshot in the portfolio calculator
+
+## 2.126.1 - 2024-12-07
+
+### Added
+
+- Added pagination to the users table of the admin control panel
+
+### Changed
+
+- Improved the labels of the assistant
+- Improved the caching of the portfolio snapshot in the portfolio calculator by expiring cache entries immediately in case of errors
+- Extracted the historical market data editor to a reusable component
+- Upgraded `prettier` from version `3.3.3` to `3.4.2`
+- Upgraded `prisma` from version `6.0.0` to `6.0.1`
+
+## 2.125.0 - 2024-11-30
+
+### Changed
+
+- Improved the style of the symbol search component
+- Extended the users table in the admin control panel
+- Refreshed the cryptocurrencies list
+- Increased the default request timeout (`REQUEST_TIMEOUT`)
+- Upgraded `cheerio` from version `1.0.0-rc.12` to `1.0.0`
+- Upgraded `prisma` from version `5.22.0` to `6.0.0`
+
+## 2.124.1 - 2024-11-25
+
+### Fixed
+
+- Fixed the tables style related to sticky columns
+
+## 2.124.0 - 2024-11-24
+
+### Added
+
+- Added pagination parameters (`skip`, `take`) to the endpoint `GET api/v1/admin/user`
+- Added pagination response (`count`) to the endpoint `GET api/v1/admin/user`
+- Added `GHOSTFOLIO` as a new data source type
+
+### Changed
+
+- Extended the allocations by ETF holding on the allocations page by the parent ETFs (experimental)
+- Improved the language localization for German (`de`)
+- Upgraded `countries-and-timezones` from version `3.4.1` to `3.7.2`
+- Upgraded `Nx` from version `20.0.6` to `20.1.2`
+
+## 2.123.0 - 2024-11-16
+
+### Added
+
+- Added a blog post: _Black Weeks 2024_
+
+### Changed
+
+- Moved the chart of the holdings tab on the home page from experimental to general availability
- Extended the assistant by a holding selector
- Separated the _FIRE_ / _X-ray_ page
+- Improved the usability to customize the rule thresholds in the _X-ray_ page by introducing range sliders (experimental)
+- Improved the language localization for German (`de`)
- Improved the language localization for Italian (`it`)
- Upgraded `ngx-skeleton-loader` from version `7.0.0` to `9.0.0`
+- Upgraded `prisma` from version `5.21.1` to `5.22.0`
+- Upgraded `uuid` from version `9.0.1` to `11.0.2`
## 2.122.0 - 2024-11-07
diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md
index b009679ac..9e32b56eb 100644
--- a/DEVELOPMENT.md
+++ b/DEVELOPMENT.md
@@ -12,7 +12,7 @@
### Setup
1. Run `npm install`
-1. Run `docker compose --env-file ./.env -f docker/docker-compose.dev.yml up -d` to start [PostgreSQL](https://www.postgresql.org) and [Redis](https://redis.io)
+1. Run `docker compose -f docker/docker-compose.dev.yml up -d` to start [PostgreSQL](https://www.postgresql.org) and [Redis](https://redis.io)
1. Run `npm run database:setup` to initialize the database schema
1. Start the [server](#start-server) and the [client](#start-client)
1. Open https://localhost:4200/en in your browser
diff --git a/Dockerfile b/Dockerfile
index 0e5c0d275..e2c1e47f4 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -25,13 +25,13 @@ RUN npm install
COPY ./decorate-angular-cli.js decorate-angular-cli.js
RUN node decorate-angular-cli.js
-COPY ./nx.json nx.json
-COPY ./replace.build.js replace.build.js
-COPY ./jest.preset.js jest.preset.js
+COPY ./apps apps
+COPY ./libs libs
COPY ./jest.config.ts jest.config.ts
+COPY ./jest.preset.js jest.preset.js
+COPY ./nx.json nx.json
+COPY ./replace.build.mjs replace.build.mjs
COPY ./tsconfig.base.json tsconfig.base.json
-COPY ./libs libs
-COPY ./apps apps
RUN npm run build:production
diff --git a/README.md b/README.md
index dca360c39..14477ea9a 100644
--- a/README.md
+++ b/README.md
@@ -118,7 +118,7 @@ We provide official container images hosted on [Docker Hub](https://hub.docker.c
Run the following command to start the Docker images from [Docker Hub](https://hub.docker.com/r/ghostfolio/ghostfolio):
```bash
-docker compose --env-file ./.env -f docker/docker-compose.yml up -d
+docker compose -f docker/docker-compose.yml up -d
```
#### b. Build and run environment
@@ -126,8 +126,8 @@ docker compose --env-file ./.env -f docker/docker-compose.yml up -d
Run the following commands to build and start the Docker images:
```bash
-docker compose --env-file ./.env -f docker/docker-compose.build.yml build
-docker compose --env-file ./.env -f docker/docker-compose.build.yml up -d
+docker compose -f docker/docker-compose.build.yml build
+docker compose -f docker/docker-compose.build.yml up -d
```
#### Setup
@@ -137,9 +137,19 @@ docker compose --env-file ./.env -f docker/docker-compose.build.yml up -d
#### Upgrade Version
-1. Increase the version of the `ghostfolio/ghostfolio` Docker image in `docker/docker-compose.yml`
-1. Run the following command to start the new Docker image: `docker compose --env-file ./.env -f docker/docker-compose.yml up -d`
- At each start, the container will automatically apply the database schema migrations if needed.
+1. Update the _Ghostfolio_ Docker image
+
+ - Increase the version of the `ghostfolio/ghostfolio` Docker image in `docker/docker-compose.yml`
+ - Run the following command if `ghostfolio:latest` is set:
+ ```bash
+ docker compose -f docker/docker-compose.yml pull
+ ```
+
+1. Run the following command to start the new Docker image:
+ ```bash
+ docker compose -f docker/docker-compose.yml up -d
+ ```
+ The container will automatically apply any required database schema migrations during startup.
### Home Server Systems (Community)
@@ -296,6 +306,6 @@ If you like to support this project, get [**Ghostfolio Premium**](https://ghostf
## License
-© 2021 - 2024 [Ghostfolio](https://ghostfol.io)
+© 2021 - 2025 [Ghostfolio](https://ghostfol.io)
Licensed under the [AGPLv3 License](https://www.gnu.org/licenses/agpl-3.0.html).
diff --git a/apps/api/.eslintrc.json b/apps/api/.eslintrc.json
deleted file mode 100644
index 9263d0065..000000000
--- a/apps/api/.eslintrc.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "extends": "../../.eslintrc.json",
- "ignorePatterns": ["!**/*"],
- "rules": {},
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "parserOptions": {
- "project": ["apps/api/tsconfig.*?.json"]
- },
- "rules": {}
- },
- {
- "files": ["*.ts", "*.tsx"],
- "rules": {}
- },
- {
- "files": ["*.js", "*.jsx"],
- "rules": {}
- }
- ]
-}
diff --git a/apps/api/eslint.config.cjs b/apps/api/eslint.config.cjs
new file mode 100644
index 000000000..043802a0d
--- /dev/null
+++ b/apps/api/eslint.config.cjs
@@ -0,0 +1,31 @@
+const baseConfig = require('../../eslint.config.cjs');
+
+module.exports = [
+ {
+ ignores: ['**/dist']
+ },
+ ...baseConfig,
+ {
+ rules: {}
+ },
+ {
+ files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],
+ // Override or add rules here
+ rules: {},
+ languageOptions: {
+ parserOptions: {
+ project: ['apps/api/tsconfig.*?.json']
+ }
+ }
+ },
+ {
+ files: ['**/*.ts', '**/*.tsx'],
+ // Override or add rules here
+ rules: {}
+ },
+ {
+ files: ['**/*.js', '**/*.jsx'],
+ // Override or add rules here
+ rules: {}
+ }
+];
diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts
index 1c8cd55c0..2832c1493 100644
--- a/apps/api/src/app/admin/admin.controller.ts
+++ b/apps/api/src/app/admin/admin.controller.ts
@@ -246,6 +246,9 @@ export class AdminController {
});
}
+ /**
+ * @deprecated
+ */
@Get('market-data/:dataSource/:symbol')
@HasPermission(permissions.accessAdminControl)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
@@ -282,6 +285,9 @@ export class AdminController {
}
}
+ /**
+ * @deprecated
+ */
@HasPermission(permissions.accessAdminControl)
@Post('market-data/:dataSource/:symbol')
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
@@ -390,7 +396,13 @@ export class AdminController {
@Get('user')
@HasPermission(permissions.accessAdminControl)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
- public async getUsers(): Promise {
- return this.adminService.getUsers();
+ public async getUsers(
+ @Query('skip') skip?: number,
+ @Query('take') take?: number
+ ): Promise {
+ return this.adminService.getUsers({
+ skip: isNaN(skip) ? undefined : skip,
+ take: isNaN(take) ? undefined : take
+ });
}
}
diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts
index 112d774e7..8a09dbdcb 100644
--- a/apps/api/src/app/admin/admin.service.ts
+++ b/apps/api/src/app/admin/admin.service.ts
@@ -140,7 +140,7 @@ export class AdminService {
const [settings, transactionCount, userCount] = await Promise.all([
this.propertyService.get(),
this.prismaService.order.count(),
- this.prismaService.user.count()
+ this.countUsersWithAnalytics()
]);
return {
@@ -433,8 +433,19 @@ export class AdminService {
};
}
- public async getUsers(): Promise {
- return { users: await this.getUsersWithAnalytics() };
+ public async getUsers({
+ skip,
+ take = Number.MAX_SAFE_INTEGER
+ }: {
+ skip?: number;
+ take?: number;
+ }): Promise {
+ const [count, users] = await Promise.all([
+ this.countUsersWithAnalytics(),
+ this.getUsersWithAnalytics({ skip, take })
+ ]);
+
+ return { count, users };
}
public async patchAssetProfileData({
@@ -514,6 +525,22 @@ export class AdminService {
return response;
}
+ private async countUsersWithAnalytics() {
+ let where: Prisma.UserWhereInput;
+
+ if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
+ where = {
+ NOT: {
+ Analytics: null
+ }
+ };
+ }
+
+ return this.prismaService.user.count({
+ where
+ });
+ }
+
private getExtendedPrismaClient() {
Logger.debug('Connect extended prisma client', 'AdminService');
@@ -647,7 +674,13 @@ export class AdminService {
return { marketData, count: marketData.length };
}
- private async getUsersWithAnalytics(): Promise {
+ private async getUsersWithAnalytics({
+ skip,
+ take
+ }: {
+ skip?: number;
+ take?: number;
+ }): Promise {
let orderBy: Prisma.UserOrderByWithRelationInput = {
createdAt: 'desc'
};
@@ -668,6 +701,8 @@ export class AdminService {
const usersWithAnalytics = await this.prismaService.user.findMany({
orderBy,
+ skip,
+ take,
where,
select: {
_count: {
@@ -677,6 +712,7 @@ export class AdminService {
select: {
activityCount: true,
country: true,
+ dataProviderGhostfolioDailyRequests: true,
updatedAt: true
}
},
@@ -684,8 +720,7 @@ export class AdminService {
id: true,
role: true,
Subscription: true
- },
- take: 30
+ }
});
return usersWithAnalytics.map(
@@ -713,6 +748,7 @@ export class AdminService {
subscription,
accountCount: _count.Account || 0,
country: Analytics?.country,
+ dailyApiRequests: Analytics?.dataProviderGhostfolioDailyRequests || 0,
lastActivity: Analytics?.updatedAt,
transactionCount: _count.Order || 0
};
diff --git a/apps/api/src/app/app.module.ts b/apps/api/src/app/app.module.ts
index 2803a0580..6d097aeff 100644
--- a/apps/api/src/app/app.module.ts
+++ b/apps/api/src/app/app.module.ts
@@ -31,6 +31,10 @@ import { AuthDeviceModule } from './auth-device/auth-device.module';
import { AuthModule } from './auth/auth.module';
import { BenchmarkModule } from './benchmark/benchmark.module';
import { CacheModule } from './cache/cache.module';
+import { AiModule } from './endpoints/ai/ai.module';
+import { ApiKeysModule } from './endpoints/api-keys/api-keys.module';
+import { GhostfolioModule } from './endpoints/data-providers/ghostfolio/ghostfolio.module';
+import { MarketDataModule } from './endpoints/market-data/market-data.module';
import { PublicModule } from './endpoints/public/public.module';
import { ExchangeRateModule } from './exchange-rate/exchange-rate.module';
import { ExportModule } from './export/export.module';
@@ -54,6 +58,8 @@ import { UserModule } from './user/user.module';
AdminModule,
AccessModule,
AccountModule,
+ AiModule,
+ ApiKeysModule,
AssetModule,
AuthDeviceModule,
AuthModule,
@@ -76,10 +82,12 @@ import { UserModule } from './user/user.module';
ExchangeRateModule,
ExchangeRateDataModule,
ExportModule,
+ GhostfolioModule,
HealthModule,
ImportModule,
InfoModule,
LogoModule,
+ MarketDataModule,
OrderModule,
PlatformModule,
PortfolioModule,
diff --git a/apps/api/src/app/auth/api-key.strategy.ts b/apps/api/src/app/auth/api-key.strategy.ts
new file mode 100644
index 000000000..ace7fb245
--- /dev/null
+++ b/apps/api/src/app/auth/api-key.strategy.ts
@@ -0,0 +1,76 @@
+import { UserService } from '@ghostfolio/api/app/user/user.service';
+import { ApiKeyService } from '@ghostfolio/api/services/api-key/api-key.service';
+import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
+import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
+import { HEADER_KEY_TOKEN } from '@ghostfolio/common/config';
+import { hasRole } from '@ghostfolio/common/permissions';
+
+import { HttpException, Injectable } from '@nestjs/common';
+import { PassportStrategy } from '@nestjs/passport';
+import { StatusCodes, getReasonPhrase } from 'http-status-codes';
+import { HeaderAPIKeyStrategy } from 'passport-headerapikey';
+
+@Injectable()
+export class ApiKeyStrategy extends PassportStrategy(
+ HeaderAPIKeyStrategy,
+ 'api-key'
+) {
+ public constructor(
+ private readonly apiKeyService: ApiKeyService,
+ private readonly configurationService: ConfigurationService,
+ private readonly prismaService: PrismaService,
+ private readonly userService: UserService
+ ) {
+ super(
+ { header: HEADER_KEY_TOKEN, prefix: 'Api-Key ' },
+ true,
+ async (apiKey: string, done: (error: any, user?: any) => void) => {
+ try {
+ const user = await this.validateApiKey(apiKey);
+
+ if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
+ if (hasRole(user, 'INACTIVE')) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
+ StatusCodes.TOO_MANY_REQUESTS
+ );
+ }
+
+ await this.prismaService.analytics.upsert({
+ create: { User: { connect: { id: user.id } } },
+ update: {
+ activityCount: { increment: 1 },
+ lastRequestAt: new Date()
+ },
+ where: { userId: user.id }
+ });
+ }
+
+ done(null, user);
+ } catch (error) {
+ done(error, null);
+ }
+ }
+ );
+ }
+
+ private async validateApiKey(apiKey: string) {
+ if (!apiKey) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.UNAUTHORIZED),
+ StatusCodes.UNAUTHORIZED
+ );
+ }
+
+ try {
+ const { id } = await this.apiKeyService.getUserByApiKey(apiKey);
+
+ return this.userService.user({ id });
+ } catch {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.UNAUTHORIZED),
+ StatusCodes.UNAUTHORIZED
+ );
+ }
+ }
+}
diff --git a/apps/api/src/app/auth/auth.module.ts b/apps/api/src/app/auth/auth.module.ts
index 67b078c9b..824c432b1 100644
--- a/apps/api/src/app/auth/auth.module.ts
+++ b/apps/api/src/app/auth/auth.module.ts
@@ -2,6 +2,7 @@ import { AuthDeviceService } from '@ghostfolio/api/app/auth-device/auth-device.s
import { WebAuthService } from '@ghostfolio/api/app/auth/web-auth.service';
import { SubscriptionModule } from '@ghostfolio/api/app/subscription/subscription.module';
import { UserModule } from '@ghostfolio/api/app/user/user.module';
+import { ApiKeyService } from '@ghostfolio/api/services/api-key/api-key.service';
import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module';
import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
import { PropertyModule } from '@ghostfolio/api/services/property/property.module';
@@ -9,6 +10,7 @@ import { PropertyModule } from '@ghostfolio/api/services/property/property.modul
import { Module } from '@nestjs/common';
import { JwtModule } from '@nestjs/jwt';
+import { ApiKeyStrategy } from './api-key.strategy';
import { AuthController } from './auth.controller';
import { AuthService } from './auth.service';
import { GoogleStrategy } from './google.strategy';
@@ -28,6 +30,8 @@ import { JwtStrategy } from './jwt.strategy';
UserModule
],
providers: [
+ ApiKeyService,
+ ApiKeyStrategy,
AuthDeviceService,
AuthService,
GoogleStrategy,
diff --git a/apps/api/src/app/benchmark/benchmark.service.ts b/apps/api/src/app/benchmark/benchmark.service.ts
index a659281d7..4e466668c 100644
--- a/apps/api/src/app/benchmark/benchmark.service.ts
+++ b/apps/api/src/app/benchmark/benchmark.service.ts
@@ -38,7 +38,7 @@ import {
isSameDay,
subDays
} from 'date-fns';
-import { isNumber, last, uniqBy } from 'lodash';
+import { isNumber, uniqBy } from 'lodash';
import ms from 'ms';
import { BenchmarkValue } from './interfaces/benchmark-value.interface';
@@ -258,7 +258,7 @@ export class BenchmarkService {
}
const includesEndDate = isSameDay(
- parseDate(last(marketData).date),
+ parseDate(marketData.at(-1).date),
endDate
);
diff --git a/apps/api/src/app/endpoints/ai/ai.controller.ts b/apps/api/src/app/endpoints/ai/ai.controller.ts
new file mode 100644
index 000000000..981b26aa2
--- /dev/null
+++ b/apps/api/src/app/endpoints/ai/ai.controller.ts
@@ -0,0 +1,39 @@
+import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator';
+import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard';
+import {
+ DEFAULT_CURRENCY,
+ DEFAULT_LANGUAGE_CODE
+} from '@ghostfolio/common/config';
+import { AiPromptResponse } from '@ghostfolio/common/interfaces';
+import { permissions } from '@ghostfolio/common/permissions';
+import type { RequestWithUser } from '@ghostfolio/common/types';
+
+import { Controller, Get, Inject, UseGuards } from '@nestjs/common';
+import { REQUEST } from '@nestjs/core';
+import { AuthGuard } from '@nestjs/passport';
+
+import { AiService } from './ai.service';
+
+@Controller('ai')
+export class AiController {
+ public constructor(
+ private readonly aiService: AiService,
+ @Inject(REQUEST) private readonly request: RequestWithUser
+ ) {}
+
+ @Get('prompt')
+ @HasPermission(permissions.readAiPrompt)
+ @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
+ public async getPrompt(): Promise {
+ const prompt = await this.aiService.getPrompt({
+ impersonationId: undefined,
+ languageCode:
+ this.request.user.Settings.settings.language ?? DEFAULT_LANGUAGE_CODE,
+ userCurrency:
+ this.request.user.Settings.settings.baseCurrency ?? DEFAULT_CURRENCY,
+ userId: this.request.user.id
+ });
+
+ return { prompt };
+ }
+}
diff --git a/apps/api/src/app/endpoints/ai/ai.module.ts b/apps/api/src/app/endpoints/ai/ai.module.ts
new file mode 100644
index 000000000..5a30f3264
--- /dev/null
+++ b/apps/api/src/app/endpoints/ai/ai.module.ts
@@ -0,0 +1,51 @@
+import { AccountBalanceService } from '@ghostfolio/api/app/account-balance/account-balance.service';
+import { AccountService } from '@ghostfolio/api/app/account/account.service';
+import { OrderModule } from '@ghostfolio/api/app/order/order.module';
+import { PortfolioCalculatorFactory } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator.factory';
+import { CurrentRateService } from '@ghostfolio/api/app/portfolio/current-rate.service';
+import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service';
+import { RulesService } from '@ghostfolio/api/app/portfolio/rules.service';
+import { RedisCacheModule } from '@ghostfolio/api/app/redis-cache/redis-cache.module';
+import { UserModule } from '@ghostfolio/api/app/user/user.module';
+import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module';
+import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module';
+import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module';
+import { ImpersonationModule } from '@ghostfolio/api/services/impersonation/impersonation.module';
+import { MarketDataModule } from '@ghostfolio/api/services/market-data/market-data.module';
+import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
+import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
+import { PortfolioSnapshotQueueModule } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.module';
+import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module';
+
+import { Module } from '@nestjs/common';
+
+import { AiController } from './ai.controller';
+import { AiService } from './ai.service';
+
+@Module({
+ controllers: [AiController],
+ imports: [
+ ConfigurationModule,
+ DataProviderModule,
+ ExchangeRateDataModule,
+ ImpersonationModule,
+ MarketDataModule,
+ OrderModule,
+ PortfolioSnapshotQueueModule,
+ PrismaModule,
+ RedisCacheModule,
+ SymbolProfileModule,
+ UserModule
+ ],
+ providers: [
+ AccountBalanceService,
+ AccountService,
+ AiService,
+ CurrentRateService,
+ MarketDataService,
+ PortfolioCalculatorFactory,
+ PortfolioService,
+ RulesService
+ ]
+})
+export class AiModule {}
diff --git a/apps/api/src/app/endpoints/ai/ai.service.ts b/apps/api/src/app/endpoints/ai/ai.service.ts
new file mode 100644
index 000000000..59dec6add
--- /dev/null
+++ b/apps/api/src/app/endpoints/ai/ai.service.ts
@@ -0,0 +1,60 @@
+import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service';
+
+import { Injectable } from '@nestjs/common';
+
+@Injectable()
+export class AiService {
+ public constructor(private readonly portfolioService: PortfolioService) {}
+
+ public async getPrompt({
+ impersonationId,
+ languageCode,
+ userCurrency,
+ userId
+ }: {
+ impersonationId: string;
+ languageCode: string;
+ userCurrency: string;
+ userId: string;
+ }) {
+ const { holdings } = await this.portfolioService.getDetails({
+ impersonationId,
+ userId
+ });
+
+ const holdingsTable = [
+ '| Name | Symbol | Currency | Asset Class | Asset Sub Class | Allocation in Percentage |',
+ '| --- | --- | --- | --- | --- | --- |',
+ ...Object.values(holdings)
+ .sort((a, b) => {
+ return b.allocationInPercentage - a.allocationInPercentage;
+ })
+ .map(
+ ({
+ allocationInPercentage,
+ assetClass,
+ assetSubClass,
+ currency,
+ name,
+ symbol
+ }) => {
+ return `| ${name} | ${symbol} | ${currency} | ${assetClass} | ${assetSubClass} | ${(allocationInPercentage * 100).toFixed(3)}% |`;
+ }
+ )
+ ];
+
+ return [
+ `You are a neutral financial assistant. Please analyze the following investment portfolio (base currency being ${userCurrency}) in simple words.`,
+ ...holdingsTable,
+ 'Structure your answer with these sections:',
+ 'Overview: Briefly summarize the portfolio’s composition and allocation rationale.',
+ 'Risk Assessment: Identify potential risks, including market volatility, concentration, and sectoral imbalances.',
+ 'Advantages: Highlight strengths, focusing on growth potential, diversification, or other benefits.',
+ 'Disadvantages: Point out weaknesses, such as overexposure or lack of defensive assets.',
+ 'Target Group: Discuss who this portfolio might suit (e.g., risk tolerance, investment goals, life stages, and experience levels).',
+ 'Optimization Ideas: Offer ideas to complement the portfolio, ensuring they are constructive and neutral in tone.',
+ 'Conclusion: Provide a concise summary highlighting key insights.',
+ `Provide your answer in the following language: ${languageCode}.`
+ ].join('\n');
+ }
+}
diff --git a/apps/api/src/app/endpoints/api-keys/api-keys.controller.ts b/apps/api/src/app/endpoints/api-keys/api-keys.controller.ts
new file mode 100644
index 000000000..cbc68df93
--- /dev/null
+++ b/apps/api/src/app/endpoints/api-keys/api-keys.controller.ts
@@ -0,0 +1,25 @@
+import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator';
+import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard';
+import { ApiKeyService } from '@ghostfolio/api/services/api-key/api-key.service';
+import { ApiKeyResponse } from '@ghostfolio/common/interfaces';
+import { permissions } from '@ghostfolio/common/permissions';
+import type { RequestWithUser } from '@ghostfolio/common/types';
+
+import { Controller, Inject, Post, UseGuards } from '@nestjs/common';
+import { REQUEST } from '@nestjs/core';
+import { AuthGuard } from '@nestjs/passport';
+
+@Controller('api-keys')
+export class ApiKeysController {
+ public constructor(
+ private readonly apiKeyService: ApiKeyService,
+ @Inject(REQUEST) private readonly request: RequestWithUser
+ ) {}
+
+ @HasPermission(permissions.createApiKey)
+ @Post()
+ @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
+ public async createApiKey(): Promise {
+ return this.apiKeyService.create({ userId: this.request.user.id });
+ }
+}
diff --git a/apps/api/src/app/endpoints/api-keys/api-keys.module.ts b/apps/api/src/app/endpoints/api-keys/api-keys.module.ts
new file mode 100644
index 000000000..123f11854
--- /dev/null
+++ b/apps/api/src/app/endpoints/api-keys/api-keys.module.ts
@@ -0,0 +1,11 @@
+import { ApiKeyModule } from '@ghostfolio/api/services/api-key/api-key.module';
+
+import { Module } from '@nestjs/common';
+
+import { ApiKeysController } from './api-keys.controller';
+
+@Module({
+ controllers: [ApiKeysController],
+ imports: [ApiKeyModule]
+})
+export class ApiKeysModule {}
diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/get-dividends.dto.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/get-dividends.dto.ts
new file mode 100644
index 000000000..6df457c64
--- /dev/null
+++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/get-dividends.dto.ts
@@ -0,0 +1,15 @@
+import { Granularity } from '@ghostfolio/common/types';
+
+import { IsIn, IsISO8601, IsOptional } from 'class-validator';
+
+export class GetDividendsDto {
+ @IsISO8601()
+ from: string;
+
+ @IsIn(['day', 'month'] as Granularity[])
+ @IsOptional()
+ granularity: Granularity;
+
+ @IsISO8601()
+ to: string;
+}
diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/get-historical.dto.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/get-historical.dto.ts
new file mode 100644
index 000000000..385c51d52
--- /dev/null
+++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/get-historical.dto.ts
@@ -0,0 +1,15 @@
+import { Granularity } from '@ghostfolio/common/types';
+
+import { IsIn, IsISO8601, IsOptional } from 'class-validator';
+
+export class GetHistoricalDto {
+ @IsISO8601()
+ from: string;
+
+ @IsIn(['day', 'month'] as Granularity[])
+ @IsOptional()
+ granularity: Granularity;
+
+ @IsISO8601()
+ to: string;
+}
diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/get-quotes.dto.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/get-quotes.dto.ts
new file mode 100644
index 000000000..e83c1be82
--- /dev/null
+++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/get-quotes.dto.ts
@@ -0,0 +1,10 @@
+import { Transform } from 'class-transformer';
+import { IsString } from 'class-validator';
+
+export class GetQuotesDto {
+ @IsString({ each: true })
+ @Transform(({ value }) =>
+ typeof value === 'string' ? value.split(',') : value
+ )
+ symbols: string[];
+}
diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts
new file mode 100644
index 000000000..f3386f8a7
--- /dev/null
+++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts
@@ -0,0 +1,375 @@
+import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator';
+import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard';
+import { parseDate } from '@ghostfolio/common/helper';
+import {
+ DataProviderGhostfolioStatusResponse,
+ DividendsResponse,
+ HistoricalResponse,
+ LookupResponse,
+ QuotesResponse
+} from '@ghostfolio/common/interfaces';
+import { permissions } from '@ghostfolio/common/permissions';
+import { RequestWithUser } from '@ghostfolio/common/types';
+
+import {
+ Controller,
+ Get,
+ HttpException,
+ Inject,
+ Param,
+ Query,
+ UseGuards,
+ Version
+} from '@nestjs/common';
+import { REQUEST } from '@nestjs/core';
+import { AuthGuard } from '@nestjs/passport';
+import { getReasonPhrase, StatusCodes } from 'http-status-codes';
+
+import { GetDividendsDto } from './get-dividends.dto';
+import { GetHistoricalDto } from './get-historical.dto';
+import { GetQuotesDto } from './get-quotes.dto';
+import { GhostfolioService } from './ghostfolio.service';
+
+@Controller('data-providers/ghostfolio')
+export class GhostfolioController {
+ public constructor(
+ private readonly ghostfolioService: GhostfolioService,
+ @Inject(REQUEST) private readonly request: RequestWithUser
+ ) {}
+
+ /**
+ * @deprecated
+ */
+ @Get('dividends/:symbol')
+ @HasPermission(permissions.enableDataProviderGhostfolio)
+ @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
+ public async getDividendsV1(
+ @Param('symbol') symbol: string,
+ @Query() query: GetDividendsDto
+ ): Promise {
+ const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
+
+ if (
+ this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
+ ) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
+ StatusCodes.TOO_MANY_REQUESTS
+ );
+ }
+
+ try {
+ const dividends = await this.ghostfolioService.getDividends({
+ symbol,
+ from: parseDate(query.from),
+ granularity: query.granularity,
+ to: parseDate(query.to)
+ });
+
+ await this.ghostfolioService.incrementDailyRequests({
+ userId: this.request.user.id
+ });
+
+ return dividends;
+ } catch {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR),
+ StatusCodes.INTERNAL_SERVER_ERROR
+ );
+ }
+ }
+
+ @Get('dividends/:symbol')
+ @HasPermission(permissions.enableDataProviderGhostfolio)
+ @UseGuards(AuthGuard('api-key'), HasPermissionGuard)
+ @Version('2')
+ public async getDividends(
+ @Param('symbol') symbol: string,
+ @Query() query: GetDividendsDto
+ ): Promise {
+ const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
+
+ if (
+ this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
+ ) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
+ StatusCodes.TOO_MANY_REQUESTS
+ );
+ }
+
+ try {
+ const dividends = await this.ghostfolioService.getDividends({
+ symbol,
+ from: parseDate(query.from),
+ granularity: query.granularity,
+ to: parseDate(query.to)
+ });
+
+ await this.ghostfolioService.incrementDailyRequests({
+ userId: this.request.user.id
+ });
+
+ return dividends;
+ } catch {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR),
+ StatusCodes.INTERNAL_SERVER_ERROR
+ );
+ }
+ }
+
+ /**
+ * @deprecated
+ */
+ @Get('historical/:symbol')
+ @HasPermission(permissions.enableDataProviderGhostfolio)
+ @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
+ public async getHistoricalV1(
+ @Param('symbol') symbol: string,
+ @Query() query: GetHistoricalDto
+ ): Promise {
+ const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
+
+ if (
+ this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
+ ) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
+ StatusCodes.TOO_MANY_REQUESTS
+ );
+ }
+
+ try {
+ const historicalData = await this.ghostfolioService.getHistorical({
+ symbol,
+ from: parseDate(query.from),
+ granularity: query.granularity,
+ to: parseDate(query.to)
+ });
+
+ await this.ghostfolioService.incrementDailyRequests({
+ userId: this.request.user.id
+ });
+
+ return historicalData;
+ } catch {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR),
+ StatusCodes.INTERNAL_SERVER_ERROR
+ );
+ }
+ }
+
+ @Get('historical/:symbol')
+ @HasPermission(permissions.enableDataProviderGhostfolio)
+ @UseGuards(AuthGuard('api-key'), HasPermissionGuard)
+ @Version('2')
+ public async getHistorical(
+ @Param('symbol') symbol: string,
+ @Query() query: GetHistoricalDto
+ ): Promise {
+ const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
+
+ if (
+ this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
+ ) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
+ StatusCodes.TOO_MANY_REQUESTS
+ );
+ }
+
+ try {
+ const historicalData = await this.ghostfolioService.getHistorical({
+ symbol,
+ from: parseDate(query.from),
+ granularity: query.granularity,
+ to: parseDate(query.to)
+ });
+
+ await this.ghostfolioService.incrementDailyRequests({
+ userId: this.request.user.id
+ });
+
+ return historicalData;
+ } catch {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR),
+ StatusCodes.INTERNAL_SERVER_ERROR
+ );
+ }
+ }
+
+ /**
+ * @deprecated
+ */
+ @Get('lookup')
+ @HasPermission(permissions.enableDataProviderGhostfolio)
+ @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
+ public async lookupSymbolV1(
+ @Query('includeIndices') includeIndicesParam = 'false',
+ @Query('query') query = ''
+ ): Promise {
+ const includeIndices = includeIndicesParam === 'true';
+ const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
+
+ if (
+ this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
+ ) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
+ StatusCodes.TOO_MANY_REQUESTS
+ );
+ }
+
+ try {
+ const result = await this.ghostfolioService.lookup({
+ includeIndices,
+ query: query.toLowerCase()
+ });
+
+ await this.ghostfolioService.incrementDailyRequests({
+ userId: this.request.user.id
+ });
+
+ return result;
+ } catch {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR),
+ StatusCodes.INTERNAL_SERVER_ERROR
+ );
+ }
+ }
+
+ @Get('lookup')
+ @HasPermission(permissions.enableDataProviderGhostfolio)
+ @UseGuards(AuthGuard('api-key'), HasPermissionGuard)
+ @Version('2')
+ public async lookupSymbol(
+ @Query('includeIndices') includeIndicesParam = 'false',
+ @Query('query') query = ''
+ ): Promise {
+ const includeIndices = includeIndicesParam === 'true';
+ const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
+
+ if (
+ this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
+ ) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
+ StatusCodes.TOO_MANY_REQUESTS
+ );
+ }
+
+ try {
+ const result = await this.ghostfolioService.lookup({
+ includeIndices,
+ query: query.toLowerCase()
+ });
+
+ await this.ghostfolioService.incrementDailyRequests({
+ userId: this.request.user.id
+ });
+
+ return result;
+ } catch {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR),
+ StatusCodes.INTERNAL_SERVER_ERROR
+ );
+ }
+ }
+
+ /**
+ * @deprecated
+ */
+ @Get('quotes')
+ @HasPermission(permissions.enableDataProviderGhostfolio)
+ @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
+ public async getQuotesV1(
+ @Query() query: GetQuotesDto
+ ): Promise {
+ const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
+
+ if (
+ this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
+ ) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
+ StatusCodes.TOO_MANY_REQUESTS
+ );
+ }
+
+ try {
+ const quotes = await this.ghostfolioService.getQuotes({
+ symbols: query.symbols
+ });
+
+ await this.ghostfolioService.incrementDailyRequests({
+ userId: this.request.user.id
+ });
+
+ return quotes;
+ } catch {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR),
+ StatusCodes.INTERNAL_SERVER_ERROR
+ );
+ }
+ }
+
+ @Get('quotes')
+ @HasPermission(permissions.enableDataProviderGhostfolio)
+ @UseGuards(AuthGuard('api-key'), HasPermissionGuard)
+ @Version('2')
+ public async getQuotes(
+ @Query() query: GetQuotesDto
+ ): Promise {
+ const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
+
+ if (
+ this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
+ ) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
+ StatusCodes.TOO_MANY_REQUESTS
+ );
+ }
+
+ try {
+ const quotes = await this.ghostfolioService.getQuotes({
+ symbols: query.symbols
+ });
+
+ await this.ghostfolioService.incrementDailyRequests({
+ userId: this.request.user.id
+ });
+
+ return quotes;
+ } catch {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR),
+ StatusCodes.INTERNAL_SERVER_ERROR
+ );
+ }
+ }
+
+ /**
+ * @deprecated
+ */
+ @Get('status')
+ @HasPermission(permissions.enableDataProviderGhostfolio)
+ @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
+ public async getStatusV1(): Promise {
+ return this.ghostfolioService.getStatus({ user: this.request.user });
+ }
+
+ @Get('status')
+ @HasPermission(permissions.enableDataProviderGhostfolio)
+ @UseGuards(AuthGuard('api-key'), HasPermissionGuard)
+ @Version('2')
+ public async getStatus(): Promise {
+ return this.ghostfolioService.getStatus({ user: this.request.user });
+ }
+}
diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.module.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.module.ts
new file mode 100644
index 000000000..01691bcf4
--- /dev/null
+++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.module.ts
@@ -0,0 +1,83 @@
+import { RedisCacheModule } from '@ghostfolio/api/app/redis-cache/redis-cache.module';
+import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
+import { CryptocurrencyModule } from '@ghostfolio/api/services/cryptocurrency/cryptocurrency.module';
+import { AlphaVantageService } from '@ghostfolio/api/services/data-provider/alpha-vantage/alpha-vantage.service';
+import { CoinGeckoService } from '@ghostfolio/api/services/data-provider/coingecko/coingecko.service';
+import { YahooFinanceDataEnhancerService } from '@ghostfolio/api/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service';
+import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module';
+import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service';
+import { EodHistoricalDataService } from '@ghostfolio/api/services/data-provider/eod-historical-data/eod-historical-data.service';
+import { FinancialModelingPrepService } from '@ghostfolio/api/services/data-provider/financial-modeling-prep/financial-modeling-prep.service';
+import { GoogleSheetsService } from '@ghostfolio/api/services/data-provider/google-sheets/google-sheets.service';
+import { ManualService } from '@ghostfolio/api/services/data-provider/manual/manual.service';
+import { RapidApiService } from '@ghostfolio/api/services/data-provider/rapid-api/rapid-api.service';
+import { YahooFinanceService } from '@ghostfolio/api/services/data-provider/yahoo-finance/yahoo-finance.service';
+import { MarketDataModule } from '@ghostfolio/api/services/market-data/market-data.module';
+import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
+import { PropertyModule } from '@ghostfolio/api/services/property/property.module';
+import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module';
+
+import { Module } from '@nestjs/common';
+
+import { GhostfolioController } from './ghostfolio.controller';
+import { GhostfolioService } from './ghostfolio.service';
+
+@Module({
+ controllers: [GhostfolioController],
+ imports: [
+ CryptocurrencyModule,
+ DataProviderModule,
+ MarketDataModule,
+ PrismaModule,
+ PropertyModule,
+ RedisCacheModule,
+ SymbolProfileModule
+ ],
+ providers: [
+ AlphaVantageService,
+ CoinGeckoService,
+ ConfigurationService,
+ DataProviderService,
+ EodHistoricalDataService,
+ FinancialModelingPrepService,
+ GhostfolioService,
+ GoogleSheetsService,
+ ManualService,
+ RapidApiService,
+ YahooFinanceService,
+ YahooFinanceDataEnhancerService,
+ {
+ inject: [
+ AlphaVantageService,
+ CoinGeckoService,
+ EodHistoricalDataService,
+ FinancialModelingPrepService,
+ GoogleSheetsService,
+ ManualService,
+ RapidApiService,
+ YahooFinanceService
+ ],
+ provide: 'DataProviderInterfaces',
+ useFactory: (
+ alphaVantageService,
+ coinGeckoService,
+ eodHistoricalDataService,
+ financialModelingPrepService,
+ googleSheetsService,
+ manualService,
+ rapidApiService,
+ yahooFinanceService
+ ) => [
+ alphaVantageService,
+ coinGeckoService,
+ eodHistoricalDataService,
+ financialModelingPrepService,
+ googleSheetsService,
+ manualService,
+ rapidApiService,
+ yahooFinanceService
+ ]
+ }
+ ]
+})
+export class GhostfolioModule {}
diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts
new file mode 100644
index 000000000..78685a61b
--- /dev/null
+++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts
@@ -0,0 +1,303 @@
+import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
+import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service';
+import {
+ GetDividendsParams,
+ GetHistoricalParams,
+ GetQuotesParams,
+ GetSearchParams
+} from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface';
+import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces';
+import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
+import { PropertyService } from '@ghostfolio/api/services/property/property.service';
+import {
+ DEFAULT_CURRENCY,
+ DERIVED_CURRENCIES
+} from '@ghostfolio/common/config';
+import { PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS } from '@ghostfolio/common/config';
+import {
+ DataProviderInfo,
+ DividendsResponse,
+ HistoricalResponse,
+ LookupItem,
+ LookupResponse,
+ QuotesResponse
+} from '@ghostfolio/common/interfaces';
+import { UserWithSettings } from '@ghostfolio/common/types';
+
+import { Injectable, Logger } from '@nestjs/common';
+import { DataSource } from '@prisma/client';
+import { Big } from 'big.js';
+
+@Injectable()
+export class GhostfolioService {
+ public constructor(
+ private readonly configurationService: ConfigurationService,
+ private readonly dataProviderService: DataProviderService,
+ private readonly prismaService: PrismaService,
+ private readonly propertyService: PropertyService
+ ) {}
+
+ public async getDividends({
+ from,
+ granularity,
+ requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'),
+ symbol,
+ to
+ }: GetDividendsParams) {
+ const result: DividendsResponse = { dividends: {} };
+
+ try {
+ const promises: Promise<{
+ [date: string]: IDataProviderHistoricalResponse;
+ }>[] = [];
+
+ for (const dataProviderService of this.getDataProviderServices()) {
+ promises.push(
+ dataProviderService
+ .getDividends({
+ from,
+ granularity,
+ requestTimeout,
+ symbol,
+ to
+ })
+ .then((dividends) => {
+ result.dividends = dividends;
+
+ return dividends;
+ })
+ );
+ }
+
+ await Promise.all(promises);
+
+ return result;
+ } catch (error) {
+ Logger.error(error, 'GhostfolioService');
+
+ throw error;
+ }
+ }
+
+ public async getHistorical({
+ from,
+ granularity,
+ requestTimeout,
+ to,
+ symbol
+ }: GetHistoricalParams) {
+ const result: HistoricalResponse = { historicalData: {} };
+
+ try {
+ const promises: Promise<{
+ [symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
+ }>[] = [];
+
+ for (const dataProviderService of this.getDataProviderServices()) {
+ promises.push(
+ dataProviderService
+ .getHistorical({
+ from,
+ granularity,
+ requestTimeout,
+ symbol,
+ to
+ })
+ .then((historicalData) => {
+ result.historicalData = historicalData[symbol];
+
+ return historicalData;
+ })
+ );
+ }
+
+ await Promise.all(promises);
+
+ return result;
+ } catch (error) {
+ Logger.error(error, 'GhostfolioService');
+
+ throw error;
+ }
+ }
+
+ public async getMaxDailyRequests() {
+ return parseInt(
+ ((await this.propertyService.getByKey(
+ PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS
+ )) as string) || '0',
+ 10
+ );
+ }
+
+ public async getQuotes({ requestTimeout, symbols }: GetQuotesParams) {
+ const results: QuotesResponse = { quotes: {} };
+
+ try {
+ const promises: Promise[] = [];
+
+ for (const dataProvider of this.getDataProviderServices()) {
+ const maximumNumberOfSymbolsPerRequest =
+ dataProvider.getMaxNumberOfSymbolsPerRequest?.() ??
+ Number.MAX_SAFE_INTEGER;
+
+ for (
+ let i = 0;
+ i < symbols.length;
+ i += maximumNumberOfSymbolsPerRequest
+ ) {
+ const symbolsChunk = symbols.slice(
+ i,
+ i + maximumNumberOfSymbolsPerRequest
+ );
+
+ const promise = Promise.resolve(
+ dataProvider.getQuotes({ requestTimeout, symbols: symbolsChunk })
+ );
+
+ promises.push(
+ promise.then(async (result) => {
+ for (const [symbol, dataProviderResponse] of Object.entries(
+ result
+ )) {
+ dataProviderResponse.dataSource = 'GHOSTFOLIO';
+
+ if (
+ [
+ ...DERIVED_CURRENCIES.map(({ currency }) => {
+ return `${DEFAULT_CURRENCY}${currency}`;
+ }),
+ `${DEFAULT_CURRENCY}USX`
+ ].includes(symbol)
+ ) {
+ continue;
+ }
+
+ results.quotes[symbol] = dataProviderResponse;
+
+ for (const {
+ currency,
+ factor,
+ rootCurrency
+ } of DERIVED_CURRENCIES) {
+ if (symbol === `${DEFAULT_CURRENCY}${rootCurrency}`) {
+ results.quotes[`${DEFAULT_CURRENCY}${currency}`] = {
+ ...dataProviderResponse,
+ currency,
+ marketPrice: new Big(
+ result[`${DEFAULT_CURRENCY}${rootCurrency}`].marketPrice
+ )
+ .mul(factor)
+ .toNumber(),
+ marketState: 'open'
+ };
+ }
+ }
+ }
+ })
+ );
+ }
+
+ await Promise.all(promises);
+ }
+
+ return results;
+ } catch (error) {
+ Logger.error(error, 'GhostfolioService');
+
+ throw error;
+ }
+ }
+
+ public async getStatus({ user }: { user: UserWithSettings }) {
+ return {
+ dailyRequests: user.dataProviderGhostfolioDailyRequests,
+ dailyRequestsMax: await this.getMaxDailyRequests(),
+ subscription: user.subscription
+ };
+ }
+
+ public async incrementDailyRequests({ userId }: { userId: string }) {
+ await this.prismaService.analytics.update({
+ data: {
+ dataProviderGhostfolioDailyRequests: { increment: 1 }
+ },
+ where: { userId }
+ });
+ }
+
+ public async lookup({
+ includeIndices = false,
+ query
+ }: GetSearchParams): Promise {
+ const results: LookupResponse = { items: [] };
+
+ if (!query) {
+ return results;
+ }
+
+ try {
+ let lookupItems: LookupItem[] = [];
+ const promises: Promise<{ items: LookupItem[] }>[] = [];
+
+ if (query?.length < 2) {
+ return { items: lookupItems };
+ }
+
+ for (const dataProviderService of this.getDataProviderServices()) {
+ promises.push(
+ dataProviderService.search({
+ includeIndices,
+ query
+ })
+ );
+ }
+
+ const searchResults = await Promise.all(promises);
+
+ for (const { items } of searchResults) {
+ if (items?.length > 0) {
+ lookupItems = lookupItems.concat(items);
+ }
+ }
+
+ const filteredItems = lookupItems
+ .filter(({ currency }) => {
+ // Only allow symbols with supported currency
+ return currency ? true : false;
+ })
+ .sort(({ name: name1 }, { name: name2 }) => {
+ return name1?.toLowerCase().localeCompare(name2?.toLowerCase());
+ })
+ .map((lookupItem) => {
+ lookupItem.dataProviderInfo = this.getDataProviderInfo();
+ lookupItem.dataSource = 'GHOSTFOLIO';
+
+ return lookupItem;
+ });
+
+ results.items = filteredItems;
+ return results;
+ } catch (error) {
+ Logger.error(error, 'GhostfolioService');
+
+ throw error;
+ }
+ }
+
+ private getDataProviderInfo(): DataProviderInfo {
+ return {
+ isPremium: false,
+ name: 'Ghostfolio Premium',
+ url: 'https://ghostfol.io'
+ };
+ }
+
+ private getDataProviderServices() {
+ return this.configurationService
+ .get('DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER')
+ .map((dataSource) => {
+ return this.dataProviderService.getDataProvider(DataSource[dataSource]);
+ });
+ }
+}
diff --git a/apps/api/src/app/endpoints/market-data/market-data.controller.ts b/apps/api/src/app/endpoints/market-data/market-data.controller.ts
new file mode 100644
index 000000000..b4aef807a
--- /dev/null
+++ b/apps/api/src/app/endpoints/market-data/market-data.controller.ts
@@ -0,0 +1,136 @@
+import { AdminService } from '@ghostfolio/api/app/admin/admin.service';
+import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
+import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
+import { MarketDataDetailsResponse } from '@ghostfolio/common/interfaces';
+import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import { RequestWithUser } from '@ghostfolio/common/types';
+
+import {
+ Body,
+ Controller,
+ Get,
+ HttpException,
+ Inject,
+ Param,
+ Post,
+ UseGuards
+} from '@nestjs/common';
+import { REQUEST } from '@nestjs/core';
+import { AuthGuard } from '@nestjs/passport';
+import { DataSource, Prisma } from '@prisma/client';
+import { parseISO } from 'date-fns';
+import { getReasonPhrase, StatusCodes } from 'http-status-codes';
+
+import { UpdateBulkMarketDataDto } from './update-bulk-market-data.dto';
+
+@Controller('market-data')
+export class MarketDataController {
+ public constructor(
+ private readonly adminService: AdminService,
+ private readonly marketDataService: MarketDataService,
+ @Inject(REQUEST) private readonly request: RequestWithUser,
+ private readonly symbolProfileService: SymbolProfileService
+ ) {}
+
+ @Get(':dataSource/:symbol')
+ @UseGuards(AuthGuard('jwt'))
+ public async getMarketDataBySymbol(
+ @Param('dataSource') dataSource: DataSource,
+ @Param('symbol') symbol: string
+ ): Promise {
+ const [assetProfile] = await this.symbolProfileService.getSymbolProfiles([
+ { dataSource, symbol }
+ ]);
+
+ if (!assetProfile) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.NOT_FOUND),
+ StatusCodes.NOT_FOUND
+ );
+ }
+
+ const canReadAllAssetProfiles = hasPermission(
+ this.request.user.permissions,
+ permissions.readMarketData
+ );
+
+ const canReadOwnAssetProfile =
+ assetProfile.userId === this.request.user.id &&
+ hasPermission(
+ this.request.user.permissions,
+ permissions.readMarketDataOfOwnAssetProfile
+ );
+
+ if (!canReadAllAssetProfiles && !canReadOwnAssetProfile) {
+ throw new HttpException(
+ assetProfile.userId
+ ? getReasonPhrase(StatusCodes.NOT_FOUND)
+ : getReasonPhrase(StatusCodes.FORBIDDEN),
+ assetProfile.userId ? StatusCodes.NOT_FOUND : StatusCodes.FORBIDDEN
+ );
+ }
+
+ return this.adminService.getMarketDataBySymbol({ dataSource, symbol });
+ }
+
+ @Post(':dataSource/:symbol')
+ @UseGuards(AuthGuard('jwt'))
+ public async updateMarketData(
+ @Body() data: UpdateBulkMarketDataDto,
+ @Param('dataSource') dataSource: DataSource,
+ @Param('symbol') symbol: string
+ ) {
+ const [assetProfile] = await this.symbolProfileService.getSymbolProfiles([
+ { dataSource, symbol }
+ ]);
+
+ if (!assetProfile) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.NOT_FOUND),
+ StatusCodes.NOT_FOUND
+ );
+ }
+
+ const canUpsertAllAssetProfiles =
+ hasPermission(
+ this.request.user.permissions,
+ permissions.createMarketData
+ ) &&
+ hasPermission(
+ this.request.user.permissions,
+ permissions.updateMarketData
+ );
+
+ const canUpsertOwnAssetProfile =
+ assetProfile.userId === this.request.user.id &&
+ hasPermission(
+ this.request.user.permissions,
+ permissions.createMarketDataOfOwnAssetProfile
+ ) &&
+ hasPermission(
+ this.request.user.permissions,
+ permissions.updateMarketDataOfOwnAssetProfile
+ );
+
+ if (!canUpsertAllAssetProfiles && !canUpsertOwnAssetProfile) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.FORBIDDEN),
+ StatusCodes.FORBIDDEN
+ );
+ }
+
+ const dataBulkUpdate: Prisma.MarketDataUpdateInput[] = data.marketData.map(
+ ({ date, marketPrice }) => ({
+ dataSource,
+ marketPrice,
+ symbol,
+ date: parseISO(date),
+ state: 'CLOSE'
+ })
+ );
+
+ return this.marketDataService.updateMany({
+ data: dataBulkUpdate
+ });
+ }
+}
diff --git a/apps/api/src/app/endpoints/market-data/market-data.module.ts b/apps/api/src/app/endpoints/market-data/market-data.module.ts
new file mode 100644
index 000000000..2050889fd
--- /dev/null
+++ b/apps/api/src/app/endpoints/market-data/market-data.module.ts
@@ -0,0 +1,13 @@
+import { AdminModule } from '@ghostfolio/api/app/admin/admin.module';
+import { MarketDataModule as MarketDataServiceModule } from '@ghostfolio/api/services/market-data/market-data.module';
+import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module';
+
+import { Module } from '@nestjs/common';
+
+import { MarketDataController } from './market-data.controller';
+
+@Module({
+ controllers: [MarketDataController],
+ imports: [AdminModule, MarketDataServiceModule, SymbolProfileModule]
+})
+export class MarketDataModule {}
diff --git a/apps/api/src/app/endpoints/market-data/update-bulk-market-data.dto.ts b/apps/api/src/app/endpoints/market-data/update-bulk-market-data.dto.ts
new file mode 100644
index 000000000..d07b189b2
--- /dev/null
+++ b/apps/api/src/app/endpoints/market-data/update-bulk-market-data.dto.ts
@@ -0,0 +1,24 @@
+import { Type } from 'class-transformer';
+import {
+ ArrayNotEmpty,
+ IsArray,
+ IsISO8601,
+ IsNumber,
+ IsOptional
+} from 'class-validator';
+
+export class UpdateBulkMarketDataDto {
+ @ArrayNotEmpty()
+ @IsArray()
+ @Type(() => UpdateMarketDataDto)
+ marketData: UpdateMarketDataDto[];
+}
+
+class UpdateMarketDataDto {
+ @IsISO8601()
+ @IsOptional()
+ date?: string;
+
+ @IsNumber()
+ marketPrice: number;
+}
diff --git a/apps/api/src/app/health/health.controller.ts b/apps/api/src/app/health/health.controller.ts
index 62ee20419..6ff09825b 100644
--- a/apps/api/src/app/health/health.controller.ts
+++ b/apps/api/src/app/health/health.controller.ts
@@ -3,13 +3,14 @@ import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interce
import {
Controller,
Get,
- HttpCode,
HttpException,
HttpStatus,
Param,
+ Res,
UseInterceptors
} from '@nestjs/common';
import { DataSource } from '@prisma/client';
+import { Response } from 'express';
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
import { HealthService } from './health.service';
@@ -19,9 +20,20 @@ export class HealthController {
public constructor(private readonly healthService: HealthService) {}
@Get()
- @HttpCode(HttpStatus.OK)
- public getHealth() {
- return { status: getReasonPhrase(StatusCodes.OK) };
+ public async getHealth(@Res() response: Response) {
+ const databaseServiceHealthy = await this.healthService.isDatabaseHealthy();
+ const redisCacheServiceHealthy =
+ await this.healthService.isRedisCacheHealthy();
+
+ if (databaseServiceHealthy && redisCacheServiceHealthy) {
+ return response
+ .status(HttpStatus.OK)
+ .json({ status: getReasonPhrase(StatusCodes.OK) });
+ } else {
+ return response
+ .status(HttpStatus.SERVICE_UNAVAILABLE)
+ .json({ status: getReasonPhrase(StatusCodes.SERVICE_UNAVAILABLE) });
+ }
}
@Get('data-enhancer/:name')
diff --git a/apps/api/src/app/health/health.module.ts b/apps/api/src/app/health/health.module.ts
index 6ed464401..b8c4d5810 100644
--- a/apps/api/src/app/health/health.module.ts
+++ b/apps/api/src/app/health/health.module.ts
@@ -1,6 +1,8 @@
+import { RedisCacheModule } from '@ghostfolio/api/app/redis-cache/redis-cache.module';
import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module';
import { DataEnhancerModule } from '@ghostfolio/api/services/data-provider/data-enhancer/data-enhancer.module';
import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module';
+import { PropertyModule } from '@ghostfolio/api/services/property/property.module';
import { Module } from '@nestjs/common';
@@ -12,6 +14,8 @@ import { HealthService } from './health.service';
imports: [
DataEnhancerModule,
DataProviderModule,
+ PropertyModule,
+ RedisCacheModule,
TransformDataSourceInRequestModule
],
providers: [HealthService]
diff --git a/apps/api/src/app/health/health.service.ts b/apps/api/src/app/health/health.service.ts
index b0c811392..f08f33a1e 100644
--- a/apps/api/src/app/health/health.service.ts
+++ b/apps/api/src/app/health/health.service.ts
@@ -1,5 +1,8 @@
+import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.service';
import { DataEnhancerService } from '@ghostfolio/api/services/data-provider/data-enhancer/data-enhancer.service';
import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service';
+import { PropertyService } from '@ghostfolio/api/services/property/property.service';
+import { PROPERTY_CURRENCIES } from '@ghostfolio/common/config';
import { Injectable } from '@nestjs/common';
import { DataSource } from '@prisma/client';
@@ -8,7 +11,9 @@ import { DataSource } from '@prisma/client';
export class HealthService {
public constructor(
private readonly dataEnhancerService: DataEnhancerService,
- private readonly dataProviderService: DataProviderService
+ private readonly dataProviderService: DataProviderService,
+ private readonly propertyService: PropertyService,
+ private readonly redisCacheService: RedisCacheService
) {}
public async hasResponseFromDataEnhancer(aName: string) {
@@ -18,4 +23,24 @@ export class HealthService {
public async hasResponseFromDataProvider(aDataSource: DataSource) {
return this.dataProviderService.checkQuote(aDataSource);
}
+
+ public async isDatabaseHealthy() {
+ try {
+ await this.propertyService.getByKey(PROPERTY_CURRENCIES);
+
+ return true;
+ } catch {
+ return false;
+ }
+ }
+
+ public async isRedisCacheHealthy() {
+ try {
+ const isHealthy = await this.redisCacheService.isHealthy();
+
+ return isHealthy;
+ } catch {
+ return false;
+ }
+ }
}
diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts
index 5e676c0a6..0d393bfeb 100644
--- a/apps/api/src/app/import/import.service.ts
+++ b/apps/api/src/app/import/import.service.ts
@@ -30,7 +30,7 @@ import { Injectable } from '@nestjs/common';
import { DataSource, Prisma, SymbolProfile } from '@prisma/client';
import { Big } from 'big.js';
import { endOfToday, format, isAfter, isSameSecond, parseISO } from 'date-fns';
-import { uniqBy } from 'lodash';
+import { isNumber, uniqBy } from 'lodash';
import { v4 as uuidv4 } from 'uuid';
@Injectable()
@@ -224,7 +224,7 @@ export class ImportService {
for (const activity of activitiesDto) {
if (!activity.dataSource) {
- if (activity.type === 'ITEM' || activity.type === 'LIABILITY') {
+ if (['FEE', 'INTEREST', 'ITEM', 'LIABILITY'].includes(activity.type)) {
activity.dataSource = DataSource.MANUAL;
} else {
activity.dataSource =
@@ -328,7 +328,7 @@ export class ImportService {
date
);
- if (!unitPrice) {
+ if (!isNumber(unitPrice)) {
throw new Error(
`activities.${index} historical exchange rate at ${format(
date,
@@ -356,6 +356,7 @@ export class ImportService {
quantity,
type,
unitPrice,
+ Account: validatedAccount,
accountId: validatedAccount?.id,
accountUserId: undefined,
createdAt: new Date(),
@@ -380,10 +381,10 @@ export class ImportService {
symbolMapping,
updatedAt,
url,
+ comment: assetProfile.comment,
currency: assetProfile.currency,
- comment: assetProfile.comment
+ userId: dataSource === 'MANUAL' ? user.id : undefined
},
- Account: validatedAccount,
symbolProfileId: undefined,
updatedAt: new Date(),
userId: user.id
@@ -406,7 +407,8 @@ export class ImportService {
create: {
dataSource,
symbol,
- currency: assetProfile.currency
+ currency: assetProfile.currency,
+ userId: dataSource === 'MANUAL' ? user.id : undefined
},
where: {
dataSource_symbol: {
@@ -582,12 +584,13 @@ export class ImportService {
const assetProfiles: {
[assetProfileIdentifier: string]: Partial;
} = {};
+ const dataSources = await this.dataProviderService.getDataSources();
for (const [
index,
{ currency, dataSource, symbol, type }
] of activitiesDto.entries()) {
- if (!this.configurationService.get('DATA_SOURCES').includes(dataSource)) {
+ if (!dataSources.includes(dataSource)) {
throw new Error(
`activities.${index}.dataSource ("${dataSource}") is not valid`
);
diff --git a/apps/api/src/app/info/info.service.ts b/apps/api/src/app/info/info.service.ts
index 62a78d1d8..1af41520d 100644
--- a/apps/api/src/app/info/info.service.ts
+++ b/apps/api/src/app/info/info.service.ts
@@ -7,6 +7,7 @@ import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
import {
DEFAULT_CURRENCY,
+ HEADER_KEY_TOKEN,
PROPERTY_BETTER_UPTIME_MONITOR_ID,
PROPERTY_COUNTRIES_OF_SUBSCRIBERS,
PROPERTY_DEMO_USER_ID,
@@ -32,7 +33,6 @@ import { Injectable, Logger } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import * as cheerio from 'cheerio';
import { format, subDays } from 'date-fns';
-import got from 'got';
@Injectable()
export class InfoService {
@@ -154,20 +154,15 @@ export class InfoService {
private async countDockerHubPulls(): Promise {
try {
- const abortController = new AbortController();
-
- setTimeout(() => {
- abortController.abort();
- }, this.configurationService.get('REQUEST_TIMEOUT'));
-
- const { pull_count } = await got(
- `https://hub.docker.com/v2/repositories/ghostfolio/ghostfolio`,
+ const { pull_count } = (await fetch(
+ 'https://hub.docker.com/v2/repositories/ghostfolio/ghostfolio',
{
headers: { 'User-Agent': 'request' },
- // @ts-ignore
- signal: abortController.signal
+ signal: AbortSignal.timeout(
+ this.configurationService.get('REQUEST_TIMEOUT')
+ )
}
- ).json();
+ ).then((res) => res.json())) as { pull_count: number };
return pull_count;
} catch (error) {
@@ -179,22 +174,17 @@ export class InfoService {
private async countGitHubContributors(): Promise {
try {
- const abortController = new AbortController();
-
- setTimeout(() => {
- abortController.abort();
- }, this.configurationService.get('REQUEST_TIMEOUT'));
-
- const { body } = await got('https://github.com/ghostfolio/ghostfolio', {
- // @ts-ignore
- signal: abortController.signal
- });
+ const body = await fetch('https://github.com/ghostfolio/ghostfolio', {
+ signal: AbortSignal.timeout(
+ this.configurationService.get('REQUEST_TIMEOUT')
+ )
+ }).then((res) => res.text());
const $ = cheerio.load(body);
return extractNumberFromString({
value: $(
- `a[href="/ghostfolio/ghostfolio/graphs/contributors"] .Counter`
+ 'a[href="/ghostfolio/ghostfolio/graphs/contributors"] .Counter'
).text()
});
} catch (error) {
@@ -206,20 +196,15 @@ export class InfoService {
private async countGitHubStargazers(): Promise {
try {
- const abortController = new AbortController();
-
- setTimeout(() => {
- abortController.abort();
- }, this.configurationService.get('REQUEST_TIMEOUT'));
-
- const { stargazers_count } = await got(
- `https://api.github.com/repos/ghostfolio/ghostfolio`,
+ const { stargazers_count } = (await fetch(
+ 'https://api.github.com/repos/ghostfolio/ghostfolio',
{
headers: { 'User-Agent': 'request' },
- // @ts-ignore
- signal: abortController.signal
+ signal: AbortSignal.timeout(
+ this.configurationService.get('REQUEST_TIMEOUT')
+ )
}
- ).json();
+ ).then((res) => res.json())) as { stargazers_count: number };
return stargazers_count;
} catch (error) {
@@ -334,27 +319,22 @@ export class InfoService {
PROPERTY_BETTER_UPTIME_MONITOR_ID
)) as string;
- const abortController = new AbortController();
-
- setTimeout(() => {
- abortController.abort();
- }, this.configurationService.get('REQUEST_TIMEOUT'));
-
- const { data } = await got(
+ const { data } = await fetch(
`https://uptime.betterstack.com/api/v2/monitors/${monitorId}/sla?from=${format(
subDays(new Date(), 90),
DATE_FORMAT
)}&to${format(new Date(), DATE_FORMAT)}`,
{
headers: {
- Authorization: `Bearer ${this.configurationService.get(
+ [HEADER_KEY_TOKEN]: `Bearer ${this.configurationService.get(
'API_KEY_BETTER_UPTIME'
)}`
},
- // @ts-ignore
- signal: abortController.signal
+ signal: AbortSignal.timeout(
+ this.configurationService.get('REQUEST_TIMEOUT')
+ )
}
- ).json();
+ ).then((res) => res.json());
return data.attributes.availability / 100;
} catch (error) {
diff --git a/apps/api/src/app/logo/logo.controller.ts b/apps/api/src/app/logo/logo.controller.ts
index 0982a793f..fdbe430c9 100644
--- a/apps/api/src/app/logo/logo.controller.ts
+++ b/apps/api/src/app/logo/logo.controller.ts
@@ -26,12 +26,13 @@ export class LogoController {
@Res() response: Response
) {
try {
- const buffer = await this.logoService.getLogoByDataSourceAndSymbol({
- dataSource,
- symbol
- });
+ const { buffer, type } =
+ await this.logoService.getLogoByDataSourceAndSymbol({
+ dataSource,
+ symbol
+ });
- response.contentType('image/png');
+ response.contentType(type);
response.send(buffer);
} catch {
response.status(HttpStatus.NOT_FOUND).send();
@@ -44,9 +45,9 @@ export class LogoController {
@Res() response: Response
) {
try {
- const buffer = await this.logoService.getLogoByUrl(url);
+ const { buffer, type } = await this.logoService.getLogoByUrl(url);
- response.contentType('image/png');
+ response.contentType(type);
response.send(buffer);
} catch {
response.status(HttpStatus.NOT_FOUND).send();
diff --git a/apps/api/src/app/logo/logo.service.ts b/apps/api/src/app/logo/logo.service.ts
index 908921a19..ba1acdd29 100644
--- a/apps/api/src/app/logo/logo.service.ts
+++ b/apps/api/src/app/logo/logo.service.ts
@@ -4,7 +4,6 @@ import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
import { HttpException, Injectable } from '@nestjs/common';
import { DataSource } from '@prisma/client';
-import got from 'got';
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
@Injectable()
@@ -29,7 +28,7 @@ export class LogoService {
{ dataSource, symbol }
]);
- if (!assetProfile) {
+ if (!assetProfile?.url) {
throw new HttpException(
getReasonPhrase(StatusCodes.NOT_FOUND),
StatusCodes.NOT_FOUND
@@ -39,24 +38,26 @@ export class LogoService {
return this.getBuffer(assetProfile.url);
}
- public async getLogoByUrl(aUrl: string) {
+ public getLogoByUrl(aUrl: string) {
return this.getBuffer(aUrl);
}
- private getBuffer(aUrl: string) {
- const abortController = new AbortController();
-
- setTimeout(() => {
- abortController.abort();
- }, this.configurationService.get('REQUEST_TIMEOUT'));
-
- return got(
+ private async getBuffer(aUrl: string) {
+ const blob = await fetch(
`https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=${aUrl}&size=64`,
{
headers: { 'User-Agent': 'request' },
- // @ts-ignore
- signal: abortController.signal
+ signal: AbortSignal.timeout(
+ this.configurationService.get('REQUEST_TIMEOUT')
+ )
}
- ).buffer();
+ ).then((res) => res.blob());
+
+ return {
+ buffer: await blob.arrayBuffer().then((arrayBuffer) => {
+ return Buffer.from(arrayBuffer);
+ }),
+ type: blob.type
+ };
}
}
diff --git a/apps/api/src/app/order/order.service.ts b/apps/api/src/app/order/order.service.ts
index 18f996a52..dbe30c914 100644
--- a/apps/api/src/app/order/order.service.ts
+++ b/apps/api/src/app/order/order.service.ts
@@ -100,7 +100,7 @@ export class OrderService {
userId: string;
}
): Promise {
- let Account;
+ let Account: Prisma.AccountCreateNestedOneWithoutOrderInput;
if (data.accountId) {
Account = {
@@ -131,6 +131,7 @@ export class OrderService {
data.SymbolProfile.connectOrCreate.create.dataSource = dataSource;
data.SymbolProfile.connectOrCreate.create.name = name;
data.SymbolProfile.connectOrCreate.create.symbol = id;
+ data.SymbolProfile.connectOrCreate.create.userId = userId;
data.SymbolProfile.connectOrCreate.where.dataSource_symbol = {
dataSource,
symbol: id
@@ -230,10 +231,7 @@ export class OrderService {
order.symbolProfileId
]);
- if (
- ['FEE', 'INTEREST', 'ITEM', 'LIABILITY'].includes(order.type) ||
- symbolProfile.activitiesCount === 0
- ) {
+ if (symbolProfile.activitiesCount === 0) {
await this.symbolProfileService.deleteById(order.symbolProfileId);
}
diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts
index bb83b98a8..4cfe0e27a 100644
--- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts
+++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts
@@ -49,7 +49,7 @@ import {
min,
subDays
} from 'date-fns';
-import { first, isNumber, last, sortBy, sum, uniq, uniqBy } from 'lodash';
+import { isNumber, sortBy, sum, uniq, uniqBy } from 'lodash';
export abstract class PortfolioCalculator {
protected static readonly ENABLE_LOGGING = false;
@@ -164,7 +164,7 @@ export abstract class PortfolioCalculator {
@LogPerformance
public async computeSnapshot(): Promise {
- const lastTransactionPoint = last(this.transactionPoints);
+ const lastTransactionPoint = this.transactionPoints.at(-1);
const transactionPoints = this.transactionPoints?.filter(({ date }) => {
return isBefore(parseDate(date), this.endDate);
@@ -173,6 +173,7 @@ export abstract class PortfolioCalculator {
if (!transactionPoints.length) {
return {
currentValueInBaseCurrency: new Big(0),
+ errors: [],
hasErrors: false,
historicalData: [],
positions: [],
@@ -765,7 +766,35 @@ export abstract class PortfolioCalculator {
return { chart };
}
- @LogPerformance
+ public getStartDate() {
+ let firstAccountBalanceDate: Date;
+ let firstActivityDate: Date;
+
+ try {
+ const firstAccountBalanceDateString = this.accountBalanceItems[0]?.date;
+ firstAccountBalanceDate = firstAccountBalanceDateString
+ ? parseDate(firstAccountBalanceDateString)
+ : new Date();
+ } catch (error) {
+ firstAccountBalanceDate = new Date();
+ }
+
+ try {
+ const firstActivityDateString = this.transactionPoints[0].date;
+ firstActivityDate = firstActivityDateString
+ ? parseDate(firstActivityDateString)
+ : new Date();
+ } catch (error) {
+ firstActivityDate = new Date();
+ }
+
+ return min([firstAccountBalanceDate, firstActivityDate]);
+ }
+
+ public getTransactionPoints() {
+ return this.transactionPoints;
+ }
+
public async getValuablesInBaseCurrency() {
await this.snapshotPromise;
@@ -1000,37 +1029,6 @@ export abstract class PortfolioCalculator {
}
}
- public getStartDate() {
- let firstAccountBalanceDate: Date;
- let firstActivityDate: Date;
-
- try {
- const firstAccountBalanceDateString = first(
- this.accountBalanceItems
- )?.date;
- firstAccountBalanceDate = firstAccountBalanceDateString
- ? parseDate(firstAccountBalanceDateString)
- : new Date();
- } catch (error) {
- firstAccountBalanceDate = new Date();
- }
-
- try {
- const firstActivityDateString = this.transactionPoints[0].date;
- firstActivityDate = firstActivityDateString
- ? parseDate(firstActivityDateString)
- : new Date();
- } catch (error) {
- firstActivityDate = new Date();
- }
-
- return min([firstAccountBalanceDate, firstActivityDate]);
- }
-
- public getTransactionPoints() {
- return this.transactionPoints;
- }
-
private getChartDateMap({
endDate,
startDate,
diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts
index 3ffe0bfbd..70123d68f 100644
--- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts
@@ -19,7 +19,6 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po
import { parseDate } from '@ghostfolio/common/helper';
import { Big } from 'big.js';
-import { last } from 'lodash';
jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => {
return {
@@ -202,7 +201,7 @@ describe('PortfolioCalculator', () => {
totalValuablesWithCurrencyEffect: new Big('0')
});
- expect(last(portfolioSnapshot.historicalData)).toMatchObject(
+ expect(portfolioSnapshot.historicalData.at(-1)).toMatchObject(
expect.objectContaining({
netPerformance: -15.8,
netPerformanceInPercentage: -0.05528341497550734703,
diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell.spec.ts
index 86110b11f..bee901745 100644
--- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell.spec.ts
@@ -19,7 +19,6 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po
import { parseDate } from '@ghostfolio/common/helper';
import { Big } from 'big.js';
-import { last } from 'lodash';
jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => {
return {
@@ -187,7 +186,7 @@ describe('PortfolioCalculator', () => {
totalValuablesWithCurrencyEffect: new Big('0')
});
- expect(last(portfolioSnapshot.historicalData)).toMatchObject(
+ expect(portfolioSnapshot.historicalData.at(-1)).toMatchObject(
expect.objectContaining({
netPerformance: -15.8,
netPerformanceInPercentage: -0.05528341497550734703,
diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy.spec.ts
index b83479ef8..ff4ad94b6 100644
--- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy.spec.ts
@@ -19,7 +19,6 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po
import { parseDate } from '@ghostfolio/common/helper';
import { Big } from 'big.js';
-import { last } from 'lodash';
jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => {
return {
@@ -178,7 +177,7 @@ describe('PortfolioCalculator', () => {
totalValuablesWithCurrencyEffect: new Big('0')
});
- expect(last(portfolioSnapshot.historicalData)).toMatchObject(
+ expect(portfolioSnapshot.historicalData.at(-1)).toMatchObject(
expect.objectContaining({
netPerformance: 23.05,
netPerformanceInPercentage: 0.08437042459736457,
diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts
index d321f104e..09898aa30 100644
--- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts
@@ -20,7 +20,6 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po
import { parseDate } from '@ghostfolio/common/helper';
import { Big } from 'big.js';
-import { last } from 'lodash';
jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => {
return {
@@ -206,7 +205,7 @@ describe('PortfolioCalculator', () => {
totalValuablesWithCurrencyEffect: new Big('0')
});
- expect(last(portfolioSnapshot.historicalData)).toMatchObject(
+ expect(portfolioSnapshot.historicalData.at(-1)).toMatchObject(
expect.objectContaining({
netPerformance: new Big('27172.74').mul(0.97373).toNumber(),
netPerformanceInPercentage: 42.41983590271396609433,
diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-fee.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-fee.spec.ts
index a0784542f..5f543b223 100644
--- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-fee.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-fee.spec.ts
@@ -19,7 +19,6 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po
import { parseDate } from '@ghostfolio/common/helper';
import { Big } from 'big.js';
-import { last } from 'lodash';
jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => {
return {
@@ -159,7 +158,7 @@ describe('PortfolioCalculator', () => {
totalValuablesWithCurrencyEffect: new Big('0')
});
- expect(last(portfolioSnapshot.historicalData)).toMatchObject(
+ expect(portfolioSnapshot.historicalData.at(-1)).toMatchObject(
expect.objectContaining({
netPerformance: 0,
netPerformanceInPercentage: 0,
diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-googl-buy.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-googl-buy.spec.ts
index 501b97bf7..11c09365e 100644
--- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-googl-buy.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-googl-buy.spec.ts
@@ -20,7 +20,6 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po
import { parseDate } from '@ghostfolio/common/helper';
import { Big } from 'big.js';
-import { last } from 'lodash';
jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => {
return {
@@ -185,7 +184,7 @@ describe('PortfolioCalculator', () => {
totalValuablesWithCurrencyEffect: new Big('0')
});
- expect(last(portfolioSnapshot.historicalData)).toMatchObject(
+ expect(portfolioSnapshot.historicalData.at(-1)).toMatchObject(
expect.objectContaining({
netPerformance: new Big('26.33').mul(0.8854).toNumber(),
netPerformanceInPercentage: 0.29544434470377019749,
diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-item.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-item.spec.ts
index 3be884154..a1af61907 100644
--- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-item.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-item.spec.ts
@@ -19,7 +19,6 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po
import { parseDate } from '@ghostfolio/common/helper';
import { Big } from 'big.js';
-import { last } from 'lodash';
jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => {
return {
@@ -159,7 +158,7 @@ describe('PortfolioCalculator', () => {
totalValuablesWithCurrencyEffect: new Big('0')
});
- expect(last(portfolioSnapshot.historicalData)).toMatchObject(
+ expect(portfolioSnapshot.historicalData.at(-1)).toMatchObject(
expect.objectContaining({
netPerformance: 0,
netPerformanceInPercentage: 0,
diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-msft-buy-with-dividend.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-msft-buy-with-dividend.spec.ts
index 3cb84ca14..a6ea7b8b8 100644
--- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-msft-buy-with-dividend.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-msft-buy-with-dividend.spec.ts
@@ -20,7 +20,6 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po
import { parseDate } from '@ghostfolio/common/helper';
import { Big } from 'big.js';
-import { last } from 'lodash';
jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => {
return {
@@ -191,7 +190,7 @@ describe('PortfolioCalculator', () => {
totalValuablesWithCurrencyEffect: new Big('0')
});
- expect(last(portfolioSnapshot.historicalData)).toMatchObject(
+ expect(portfolioSnapshot.historicalData.at(-1)).toMatchObject(
expect.objectContaining({
totalInvestmentValueWithCurrencyEffect: 298.58
})
diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell-partially.spec.ts
index 888d1e968..e5b6da13e 100644
--- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell-partially.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell-partially.spec.ts
@@ -21,7 +21,6 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po
import { parseDate } from '@ghostfolio/common/helper';
import { Big } from 'big.js';
-import { last } from 'lodash';
import { join } from 'path';
jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => {
@@ -183,7 +182,7 @@ describe('PortfolioCalculator', () => {
totalValuablesWithCurrencyEffect: new Big('0')
});
- expect(last(portfolioSnapshot.historicalData)).toMatchObject(
+ expect(portfolioSnapshot.historicalData.at(-1)).toMatchObject(
expect.objectContaining({
netPerformance: 17.68,
netPerformanceInPercentage: 0.12184460284330327256,
diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell.spec.ts
index 575d01dc6..ecb0dfd0e 100644
--- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell.spec.ts
@@ -21,7 +21,6 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po
import { parseDate } from '@ghostfolio/common/helper';
import { Big } from 'big.js';
-import { last } from 'lodash';
import { join } from 'path';
jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => {
@@ -230,7 +229,7 @@ describe('PortfolioCalculator', () => {
totalValuablesWithCurrencyEffect: new Big('0')
});
- expect(last(portfolioSnapshot.historicalData)).toMatchObject(
+ expect(portfolioSnapshot.historicalData.at(-1)).toMatchObject(
expect.objectContaining({
netPerformance: 19.86,
netPerformanceInPercentage: 0.13100263852242744063,
diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts
index 3474a4e7e..d25e219b4 100644
--- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts
+++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator.ts
@@ -13,7 +13,7 @@ import { DateRange } from '@ghostfolio/common/types';
import { Logger } from '@nestjs/common';
import { Big } from 'big.js';
import { addMilliseconds, differenceInDays, format, isBefore } from 'date-fns';
-import { cloneDeep, first, last, sortBy } from 'lodash';
+import { cloneDeep, sortBy } from 'lodash';
export class TWRPortfolioCalculator extends PortfolioCalculator {
private chartDates: string[];
@@ -101,6 +101,7 @@ export class TWRPortfolioCalculator extends PortfolioCalculator {
totalInterestWithCurrencyEffect,
totalInvestment,
totalInvestmentWithCurrencyEffect,
+ errors: [],
historicalData: [],
totalLiabilitiesWithCurrencyEffect: new Big(0),
totalValuablesWithCurrencyEffect: new Big(0)
@@ -224,7 +225,7 @@ export class TWRPortfolioCalculator extends PortfolioCalculator {
};
}
- const dateOfFirstTransaction = new Date(first(orders).date);
+ const dateOfFirstTransaction = new Date(orders[0].date);
const endDateString = format(end, DATE_FORMAT);
const startDateString = format(start, DATE_FORMAT);
@@ -347,7 +348,7 @@ export class TWRPortfolioCalculator extends PortfolioCalculator {
});
}
- const lastOrder = last(orders);
+ const lastOrder = orders.at(-1);
lastUnitPrice = lastOrder.unitPriceFromMarketData ?? lastOrder.unitPrice;
}
diff --git a/apps/api/src/app/portfolio/current-rate.service.ts b/apps/api/src/app/portfolio/current-rate.service.ts
index ab7bf2ebf..058bf1dd5 100644
--- a/apps/api/src/app/portfolio/current-rate.service.ts
+++ b/apps/api/src/app/portfolio/current-rate.service.ts
@@ -13,7 +13,7 @@ import type { RequestWithUser } from '@ghostfolio/common/types';
import { Inject, Injectable } from '@nestjs/common';
import { REQUEST } from '@nestjs/core';
import { isBefore, isToday } from 'date-fns';
-import { flatten, isEmpty, uniqBy } from 'lodash';
+import { isEmpty, uniqBy } from 'lodash';
import { GetValueObject } from './interfaces/get-value-object.interface';
import { GetValuesObject } from './interfaces/get-values-object.interface';
@@ -102,7 +102,9 @@ export class CurrentRateService {
})
);
- const values = flatten(await Promise.all(promises));
+ const values = await Promise.all(promises).then((array) => {
+ return array.flat();
+ });
const response: GetValuesObject = {
dataProviderInfos,
diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts
index e33027fb6..beb75001b 100644
--- a/apps/api/src/app/portfolio/portfolio.controller.ts
+++ b/apps/api/src/app/portfolio/portfolio.controller.ts
@@ -26,7 +26,7 @@ import {
PortfolioHoldingsResponse,
PortfolioInvestments,
PortfolioPerformanceResponse,
- PortfolioReport
+ PortfolioReportResponse
} from '@ghostfolio/common/interfaces';
import {
hasReadRestrictedAccessPermission,
@@ -161,24 +161,22 @@ export class PortfolioController {
portfolioPosition.investment / totalInvestment;
portfolioPosition.valueInPercentage =
portfolioPosition.valueInBaseCurrency / totalValue;
- (portfolioPosition.assetClass = hasDetails
+ portfolioPosition.assetClass = hasDetails
? portfolioPosition.assetClass
- : undefined),
- (portfolioPosition.assetSubClass = hasDetails
- ? portfolioPosition.assetSubClass
- : undefined),
- (portfolioPosition.countries = hasDetails
- ? portfolioPosition.countries
- : []),
- (portfolioPosition.currency = hasDetails
- ? portfolioPosition.currency
- : undefined),
- (portfolioPosition.markets = hasDetails
- ? portfolioPosition.markets
- : undefined),
- (portfolioPosition.sectors = hasDetails
- ? portfolioPosition.sectors
- : []);
+ : undefined;
+ portfolioPosition.assetSubClass = hasDetails
+ ? portfolioPosition.assetSubClass
+ : undefined;
+ portfolioPosition.countries = hasDetails
+ ? portfolioPosition.countries
+ : [];
+ portfolioPosition.currency = hasDetails
+ ? portfolioPosition.currency
+ : undefined;
+ portfolioPosition.markets = hasDetails
+ ? portfolioPosition.markets
+ : undefined;
+ portfolioPosition.sectors = hasDetails ? portfolioPosition.sectors : [];
}
for (const [name, { valueInBaseCurrency }] of Object.entries(accounts)) {
@@ -633,7 +631,7 @@ export class PortfolioController {
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async getReport(
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string
- ): Promise {
+ ): Promise {
const report = await this.portfolioService.getReport(impersonationId);
if (
@@ -641,10 +639,13 @@ export class PortfolioController {
this.request.user.subscription.type === 'Basic'
) {
for (const rule in report.rules) {
- if (report.rules[rule]) {
- report.rules[rule] = [];
- }
+ report.rules[rule] = null;
}
+
+ report.statistics = {
+ rulesActiveCount: 0,
+ rulesFulfilledCount: 0
+ };
}
return report;
diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts
index bae845fab..207879b86 100644
--- a/apps/api/src/app/portfolio/portfolio.service.ts
+++ b/apps/api/src/app/portfolio/portfolio.service.ts
@@ -8,6 +8,8 @@ import { getFactor } from '@ghostfolio/api/helper/portfolio.helper';
import { LogPerformance } from '@ghostfolio/api/interceptors/performance-logging/performance-logging.interceptor';
import { AccountClusterRiskCurrentInvestment } from '@ghostfolio/api/models/rules/account-cluster-risk/current-investment';
import { AccountClusterRiskSingleAccount } from '@ghostfolio/api/models/rules/account-cluster-risk/single-account';
+import { AssetClassClusterRiskEquity } from '@ghostfolio/api/models/rules/asset-class-cluster-risk/equity';
+import { AssetClassClusterRiskFixedIncome } from '@ghostfolio/api/models/rules/asset-class-cluster-risk/fixed-income';
import { CurrencyClusterRiskBaseCurrencyCurrentInvestment } from '@ghostfolio/api/models/rules/currency-cluster-risk/base-currency-current-investment';
import { CurrencyClusterRiskCurrentInvestment } from '@ghostfolio/api/models/rules/currency-cluster-risk/current-investment';
import { EconomicMarketClusterRiskDevelopedMarkets } from '@ghostfolio/api/models/rules/economic-market-cluster-risk/developed-markets';
@@ -38,7 +40,7 @@ import {
PortfolioInvestments,
PortfolioPerformanceResponse,
PortfolioPosition,
- PortfolioReport,
+ PortfolioReportResponse,
PortfolioSummary,
Position,
UserSettings
@@ -76,7 +78,7 @@ import {
parseISO,
set
} from 'date-fns';
-import { isEmpty, last, uniq } from 'lodash';
+import { isEmpty, uniq } from 'lodash';
import { CPRPortfolioCalculator } from './calculator/constantPortfolioReturn/portfolio-calculator';
import { PortfolioCalculator } from './calculator/portfolio-calculator';
@@ -1156,18 +1158,15 @@ export class PortfolioService {
netWorth,
totalInvestment,
valueWithCurrencyEffect
- } =
- chart?.length > 0
- ? last(chart)
- : {
- netPerformance: 0,
- netPerformanceInPercentage: 0,
- netPerformanceInPercentageWithCurrencyEffect: 0,
- netPerformanceWithCurrencyEffect: 0,
- netWorth: 0,
- totalInvestment: 0,
- valueWithCurrencyEffect: 0
- };
+ } = chart?.at(-1) ?? {
+ netPerformance: 0,
+ netPerformanceInPercentage: 0,
+ netPerformanceInPercentageWithCurrencyEffect: 0,
+ netPerformanceWithCurrencyEffect: 0,
+ netWorth: 0,
+ totalInvestment: 0,
+ valueWithCurrencyEffect: 0
+ };
return {
chart,
@@ -1187,7 +1186,9 @@ export class PortfolioService {
}
@LogPerformance
- public async getReport(impersonationId: string): Promise {
+ public async getReport(
+ impersonationId: string
+ ): Promise {
const userId = await this.getUserId(impersonationId, this.request.user.id);
const userSettings = this.request.user.Settings.settings as UserSettings;
@@ -1204,79 +1205,95 @@ export class PortfolioService {
})
).toNumber();
- return {
- rules: {
- accountClusterRisk:
- summary.ordersCount > 0
- ? await this.rulesService.evaluate(
- [
- new AccountClusterRiskCurrentInvestment(
- this.exchangeRateDataService,
- accounts
- ),
- new AccountClusterRiskSingleAccount(
- this.exchangeRateDataService,
- accounts
- )
- ],
- userSettings
- )
- : undefined,
- economicMarketClusterRisk:
- summary.ordersCount > 0
- ? await this.rulesService.evaluate(
- [
- new EconomicMarketClusterRiskDevelopedMarkets(
- this.exchangeRateDataService,
- marketsTotalInBaseCurrency,
- markets.developedMarkets.valueInBaseCurrency
- ),
- new EconomicMarketClusterRiskEmergingMarkets(
- this.exchangeRateDataService,
- marketsTotalInBaseCurrency,
- markets.emergingMarkets.valueInBaseCurrency
- )
- ],
- userSettings
- )
- : undefined,
- currencyClusterRisk:
- summary.ordersCount > 0
- ? await this.rulesService.evaluate(
- [
- new CurrencyClusterRiskBaseCurrencyCurrentInvestment(
- this.exchangeRateDataService,
- Object.values(holdings)
- ),
- new CurrencyClusterRiskCurrentInvestment(
- this.exchangeRateDataService,
- Object.values(holdings)
- )
- ],
- userSettings
- )
- : undefined,
- emergencyFund: await this.rulesService.evaluate(
- [
- new EmergencyFundSetup(
- this.exchangeRateDataService,
- userSettings.emergencyFund
+ const rules: PortfolioReportResponse['rules'] = {
+ accountClusterRisk:
+ summary.ordersCount > 0
+ ? await this.rulesService.evaluate(
+ [
+ new AccountClusterRiskCurrentInvestment(
+ this.exchangeRateDataService,
+ accounts
+ ),
+ new AccountClusterRiskSingleAccount(
+ this.exchangeRateDataService,
+ accounts
+ )
+ ],
+ userSettings
)
- ],
- userSettings
- ),
- fees: await this.rulesService.evaluate(
- [
- new FeeRatioInitialInvestment(
- this.exchangeRateDataService,
- summary.committedFunds,
- summary.fees
+ : undefined,
+ assetClassClusterRisk:
+ summary.ordersCount > 0
+ ? await this.rulesService.evaluate(
+ [
+ new AssetClassClusterRiskEquity(
+ this.exchangeRateDataService,
+ Object.values(holdings)
+ ),
+ new AssetClassClusterRiskFixedIncome(
+ this.exchangeRateDataService,
+ Object.values(holdings)
+ )
+ ],
+ userSettings
)
- ],
- userSettings
- )
- }
+ : undefined,
+ currencyClusterRisk:
+ summary.ordersCount > 0
+ ? await this.rulesService.evaluate(
+ [
+ new CurrencyClusterRiskBaseCurrencyCurrentInvestment(
+ this.exchangeRateDataService,
+ Object.values(holdings)
+ ),
+ new CurrencyClusterRiskCurrentInvestment(
+ this.exchangeRateDataService,
+ Object.values(holdings)
+ )
+ ],
+ userSettings
+ )
+ : undefined,
+ economicMarketClusterRisk:
+ summary.ordersCount > 0
+ ? await this.rulesService.evaluate(
+ [
+ new EconomicMarketClusterRiskDevelopedMarkets(
+ this.exchangeRateDataService,
+ marketsTotalInBaseCurrency,
+ markets.developedMarkets.valueInBaseCurrency
+ ),
+ new EconomicMarketClusterRiskEmergingMarkets(
+ this.exchangeRateDataService,
+ marketsTotalInBaseCurrency,
+ markets.emergingMarkets.valueInBaseCurrency
+ )
+ ],
+ userSettings
+ )
+ : undefined,
+ emergencyFund: await this.rulesService.evaluate(
+ [
+ new EmergencyFundSetup(
+ this.exchangeRateDataService,
+ userSettings.emergencyFund
+ )
+ ],
+ userSettings
+ ),
+ fees: await this.rulesService.evaluate(
+ [
+ new FeeRatioInitialInvestment(
+ this.exchangeRateDataService,
+ summary.committedFunds,
+ summary.fees
+ )
+ ],
+ userSettings
+ )
};
+
+ return { rules, statistics: this.getReportStatistics(rules) };
}
@LogPerformance
@@ -1697,6 +1714,25 @@ export class PortfolioService {
return { markets, marketsAdvanced };
}
+ @LogPerformance
+ private getReportStatistics(
+ evaluatedRules: PortfolioReportResponse['rules']
+ ): PortfolioReportResponse['statistics'] {
+ const rulesActiveCount = Object.values(evaluatedRules)
+ .flat()
+ .filter((rule) => {
+ return rule?.isActive === true;
+ }).length;
+
+ const rulesFulfilledCount = Object.values(evaluatedRules)
+ .flat()
+ .filter((rule) => {
+ return rule?.value === true;
+ }).length;
+
+ return { rulesActiveCount, rulesFulfilledCount };
+ }
+
@LogPerformance
private getStreaks({
investments,
diff --git a/apps/api/src/app/redis-cache/redis-cache.service.ts b/apps/api/src/app/redis-cache/redis-cache.service.ts
index c972c30a1..51db93ec6 100644
--- a/apps/api/src/app/redis-cache/redis-cache.service.ts
+++ b/apps/api/src/app/redis-cache/redis-cache.service.ts
@@ -7,6 +7,7 @@ import { Inject, Injectable, Logger } from '@nestjs/common';
import { Milliseconds } from 'cache-manager';
import { RedisCache } from 'cache-manager-redis-yet';
import { createHash } from 'crypto';
+import ms from 'ms';
@Injectable()
export class RedisCacheService {
@@ -59,6 +60,26 @@ export class RedisCacheService {
return `quote-${getAssetProfileIdentifier({ dataSource, symbol })}`;
}
+ public async isHealthy() {
+ try {
+ const client = this.cache.store.client;
+
+ const isHealthy = await Promise.race([
+ client.ping(),
+ new Promise((_, reject) =>
+ setTimeout(
+ () => reject(new Error('Redis health check timeout')),
+ ms('2 seconds')
+ )
+ )
+ ]);
+
+ return isHealthy === 'PONG';
+ } catch (error) {
+ return false;
+ }
+ }
+
public async remove(key: string) {
return this.cache.del(key);
}
diff --git a/apps/api/src/app/symbol/symbol.controller.ts b/apps/api/src/app/symbol/symbol.controller.ts
index 89cdd416c..5d9a49a29 100644
--- a/apps/api/src/app/symbol/symbol.controller.ts
+++ b/apps/api/src/app/symbol/symbol.controller.ts
@@ -47,7 +47,7 @@ export class SymbolController {
try {
return this.symbolService.lookup({
includeIndices,
- query: query.toLowerCase(),
+ query,
user: this.request.user
});
} catch {
diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts
index 443a2a052..b5c71179f 100644
--- a/apps/api/src/app/user/user.service.ts
+++ b/apps/api/src/app/user/user.service.ts
@@ -2,8 +2,11 @@ import { OrderService } from '@ghostfolio/api/app/order/order.service';
import { SubscriptionService } from '@ghostfolio/api/app/subscription/subscription.service';
import { environment } from '@ghostfolio/api/environments/environment';
import { PortfolioChangedEvent } from '@ghostfolio/api/events/portfolio-changed.event';
+import { getRandomString } from '@ghostfolio/api/helper/string.helper';
import { AccountClusterRiskCurrentInvestment } from '@ghostfolio/api/models/rules/account-cluster-risk/current-investment';
import { AccountClusterRiskSingleAccount } from '@ghostfolio/api/models/rules/account-cluster-risk/single-account';
+import { AssetClassClusterRiskEquity } from '@ghostfolio/api/models/rules/asset-class-cluster-risk/equity';
+import { AssetClassClusterRiskFixedIncome } from '@ghostfolio/api/models/rules/asset-class-cluster-risk/fixed-income';
import { CurrencyClusterRiskBaseCurrencyCurrentInvestment } from '@ghostfolio/api/models/rules/currency-cluster-risk/base-currency-current-investment';
import { CurrencyClusterRiskCurrentInvestment } from '@ghostfolio/api/models/rules/currency-cluster-risk/current-investment';
import { EconomicMarketClusterRiskDevelopedMarkets } from '@ghostfolio/api/models/rules/economic-market-cluster-risk/developed-markets';
@@ -37,11 +40,10 @@ import { UserWithSettings } from '@ghostfolio/common/types';
import { Injectable } from '@nestjs/common';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { Prisma, Role, User } from '@prisma/client';
+import { createHmac } from 'crypto';
import { differenceInDays, subDays } from 'date-fns';
import { sortBy, without } from 'lodash';
-const crypto = require('crypto');
-
@Injectable()
export class UserService {
private i18nService = new I18nService();
@@ -61,7 +63,7 @@ export class UserService {
}
public createAccessToken(password: string, salt: string): string {
- const hash = crypto.createHmac('sha512', salt);
+ const hash = createHmac('sha512', salt);
hash.update(password);
return hash.digest('hex');
@@ -87,6 +89,7 @@ export class UserService {
}),
this.tagService.getTagsForUser(id)
]);
+
const access = userData[0];
const firstActivity = userData[1];
let tags = userData[2];
@@ -117,7 +120,8 @@ export class UserService {
access: access.map((accessItem) => {
return {
alias: accessItem.alias,
- id: accessItem.id
+ id: accessItem.id,
+ permissions: accessItem.permissions
};
}),
accounts: Account,
@@ -183,7 +187,9 @@ export class UserService {
Settings: Settings as UserWithSettings['Settings'],
thirdPartyId,
updatedAt,
- activityCount: Analytics?.activityCount
+ activityCount: Analytics?.activityCount,
+ dataProviderGhostfolioDailyRequests:
+ Analytics?.dataProviderGhostfolioDailyRequests
};
if (user?.Settings) {
@@ -224,25 +230,33 @@ export class UserService {
undefined,
{}
).getSettings(user.Settings.settings),
- EconomicMarketClusterRiskDevelopedMarkets:
- new EconomicMarketClusterRiskDevelopedMarkets(
- undefined,
+ AssetClassClusterRiskEquity: new AssetClassClusterRiskEquity(
+ undefined,
+ undefined
+ ).getSettings(user.Settings.settings),
+ AssetClassClusterRiskFixedIncome: new AssetClassClusterRiskFixedIncome(
+ undefined,
+ undefined
+ ).getSettings(user.Settings.settings),
+ CurrencyClusterRiskBaseCurrencyCurrentInvestment:
+ new CurrencyClusterRiskBaseCurrencyCurrentInvestment(
undefined,
undefined
).getSettings(user.Settings.settings),
- EconomicMarketClusterRiskEmergingMarkets:
- new EconomicMarketClusterRiskEmergingMarkets(
- undefined,
+ CurrencyClusterRiskCurrentInvestment:
+ new CurrencyClusterRiskCurrentInvestment(
undefined,
undefined
).getSettings(user.Settings.settings),
- CurrencyClusterRiskBaseCurrencyCurrentInvestment:
- new CurrencyClusterRiskBaseCurrencyCurrentInvestment(
+ EconomicMarketClusterRiskDevelopedMarkets:
+ new EconomicMarketClusterRiskDevelopedMarkets(
+ undefined,
undefined,
undefined
).getSettings(user.Settings.settings),
- CurrencyClusterRiskCurrentInvestment:
- new CurrencyClusterRiskCurrentInvestment(
+ EconomicMarketClusterRiskEmergingMarkets:
+ new EconomicMarketClusterRiskEmergingMarkets(
+ undefined,
undefined,
undefined
).getSettings(user.Settings.settings),
@@ -298,7 +312,8 @@ export class UserService {
currentPermissions = without(
currentPermissions,
permissions.accessHoldingsChart,
- permissions.createAccess
+ permissions.createAccess,
+ permissions.readAiPrompt
);
// Reset benchmark
@@ -307,6 +322,8 @@ export class UserService {
// Reset holdings view mode
user.Settings.settings.holdingsViewMode = undefined;
} else if (user.subscription?.type === 'Premium') {
+ currentPermissions.push(permissions.createApiKey);
+ currentPermissions.push(permissions.enableDataProviderGhostfolio);
currentPermissions.push(permissions.reportDataGlitch);
currentPermissions = without(
@@ -405,10 +422,7 @@ export class UserService {
}
if (data.provider === 'ANONYMOUS') {
- const accessToken = this.createAccessToken(
- user.id,
- this.getRandomString(10)
- );
+ const accessToken = this.createAccessToken(user.id, getRandomString(10));
const hashedAccessToken = this.createAccessToken(
accessToken,
@@ -525,17 +539,4 @@ export class UserService {
return settings;
}
-
- private getRandomString(length: number) {
- const bytes = crypto.randomBytes(length);
- const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
- const result = [];
-
- for (let i = 0; i < length; i++) {
- const randomByte = bytes[i];
- result.push(characters[randomByte % characters.length]);
- }
-
- return result.join('');
- }
}
diff --git a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json
index c63ba5c73..7d414ef11 100644
--- a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json
+++ b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json
@@ -1,6 +1,8 @@
{
+ "3": "The Three Musketeers",
"7": "Lucky7",
"42": "42 Coin",
+ "47": "President Trump",
"300": "300 token",
"365": "365Coin",
"369": "Nikola Tesla Token",
@@ -9,7 +11,7 @@
"611": "SixEleven",
"777": "Jackpot",
"808": "808",
- "888": "Octocoin",
+ "888": "888",
"1337": "EliteCoin",
"1717": "1717 Masonic Commemorative Token",
"2015": "2015 coin",
@@ -18,14 +20,16 @@
"2192": "LERNITAS",
"$MAID": "MaidCoin",
"$ROPE": "Rope",
- "$TIME": "Madagascar Token",
"$TREAM": "World Stream Finance",
"00": "ZER0ZER0",
"007": "007 coin",
+ "0DOG": "Bitcoin Dogs",
"0KN": "0 Knowledge Network",
"0NE": "Stone",
+ "0X0": "0x0.ai",
"0X1": "0x1.tools: AI Multi-tool Plaform",
"0XBTC": "0xBitcoin",
+ "0XCOCO": "0xCoco",
"0XDEV": "DEVAI",
"0XG": "0xGpu.ai",
"0XGAS": "0xGasless",
@@ -33,11 +37,11 @@
"0XOS": "0xOS AI",
"0XSEARCH": "Search",
"0XVOX": "HashVox AI",
- "0x0": "0x0.ai",
"0xDIARY": "The 0xDiary Token",
"0xVPN": "0xVPN.org",
"1-UP": "1-UP",
"1000SATS": "SATS",
+ "1000X": "1000x by Virtuals",
"10SET": "Tenset",
"1ART": "ArtWallet",
"1CAT": "Bitcoin Cats",
@@ -47,6 +51,7 @@
"1EX": "1ex Trading Board",
"1FLR": "Flare Token",
"1GOLD": "1irstGold",
+ "1GUY": "1GUY",
"1INCH": "1inch",
"1IRST": "1irstcoin",
"1MCT": "MicroCreditToken",
@@ -62,6 +67,7 @@
"1UP": "Uptrennd",
"1WO": "1World",
"2022M": "2022MOON",
+ "21BTC": "21.co Wrapped BTC",
"21X": "21X",
"2BACCO": "2BACCO Coin",
"2BASED": "2Based Finance",
@@ -81,6 +87,7 @@
"32BIT": "32Bitcoin",
"360NS": "360 NOSCOPE INSTASWAP WALLBANG",
"37C": "37Protocol",
+ "3AC": "THREE ARROWZ CAPITEL",
"3AIR": "3air",
"3CEO": "FLOKI SHIBA PEPE CEO",
"3CRV": "LP 3pool Curve",
@@ -90,6 +97,7 @@
"3KM": "3 Kingdoms Multiverse",
"3P": "Web3Camp",
"3ULL": "3ULL Coin",
+ "3ULLV1": "Playa3ull Games v1",
"3XD": "3DChain",
"404A": "404Aliens",
"404BLOCKS": "404Blocks",
@@ -97,12 +105,16 @@
"4ART": "4ART Coin",
"4CHAN": "4Chan",
"4CZ": "FourCZ",
+ "4DOGE": "4DOGE",
"4JNET": "4JNET",
"4MW": "For Meta World",
+ "4P": "4P FOUR",
"4RZ": "4REALZA COIN",
"4TOKEN": "Ignore Fud",
+ "4WIN": "4TRUMP",
"4WMM": "4-Way Mirror Money",
"50C": "50Cent",
+ "50TRUMP": "50TRUMP",
"50X": "50x.com",
"5IRE": "5ire",
"77G": "GraphenTech",
@@ -112,46 +124,66 @@
"8BT": "8 Circuit Studios",
"8PAY": "8Pay",
"8X8": "8X8 Protocol",
+ "99BTC": "99 Bitcoins",
"9DOGS": "NINE DOGS",
"9GAG": "9GAG",
"9MM": "Shigure UI",
"A": "Alpha Token",
+ "A1INCH": "1inch (Arbitrum Bridge)",
"A2A": "A2A",
"A4": "A4 Finance",
"A4M": "AlienForm",
"A51": "A51 Finance",
"A5T": "Alpha5",
+ "A8": "Ancient8",
"AA": "Alva",
"AAA": "Moon Rabbit",
+ "AAAHHM": "Plankton in Pain",
"AAB": "AAX Token",
"AABL": "Abble",
"AAC": "Double-A Chain",
"AAG": "AAG Ventures",
"AAI": "AutoAir AI",
"AAPX": "AMPnet",
+ "AARDY": "Baby Aardvark",
+ "AARK": "Aark",
"AART": "ALL.ART",
"AAST": "AASToken",
"AAT": "Agricultural Trade Chain",
"AAVE": "Aave",
+ "AAVEE": "AAVE.e (Avalanche Bride)",
+ "AAVEGOTCHIFOMO": "Aavegotchi FOMO",
+ "AAX": "Academic Labs",
"AAZ": "ATLAZ",
+ "AB1INCH": "1inch (Avalanche Bride)",
"ABA": "EcoBall",
"ABBC": "ABBC Coin",
"ABC": "ABC Chain",
"ABCC": "ABCC Token",
"ABCD": "Crypto Inu",
+ "ABCM": "ABCMETA",
+ "ABCRV": "Curve DAO Token (Arbitrum Bridge)",
"ABD": "AB DEFI",
+ "ABDS": "ABDS Token",
+ "ABE": "ABE",
"ABEL": "Abelian",
"ABET": "Altbet",
"ABEY": "Abey",
"ABIC": "Arabic",
"ABJ": "Abjcoin",
"ABL": "Airbloc",
+ "ABLE": "Able Finance",
+ "ABLINK": "Chainlink (Arbitrum Bridge)",
"ABN": "Antofy",
"ABO": "Albino",
"ABOND": "ApeBond",
"ABONDV1": "ApeSwap",
"ABR": "Allbridge",
"ABT": "ArcBlock",
+ "ABTC": "aBTC",
+ "ABUL": "Abulaba",
+ "ABUNI": "Uniswap Protocol Token (Arbitrum Bridge)",
+ "ABUSDC": "USD Coin (Arbitrum Bridge)",
"ABX": "Arbidex",
"ABY": "ArtByte",
"ABYSS": "Abyss Finance",
@@ -167,24 +199,29 @@
"ACDC": "Volt",
"ACE": "Fusionist",
"ACEN": "Acent",
+ "ACEO": "Ace of Pentacles",
"ACES": "AcesCoin",
"ACET": "Acet",
"ACETH": "Acether",
"ACH": "Alchemy Pay",
+ "ACHAIN": "Achain",
"ACHC": "AchieveCoin",
"ACHI": "achi",
"ACID": "AcidCoin",
"ACK": "Arcade Kingdoms",
+ "ACL": "Auction Light",
"ACM": "AC Milan Fan Token",
"ACN": "AvonCoin",
"ACOIN": "ACoin",
+ "ACOLYT": "Acolyte by Virtuals",
"ACP": "Anarchists Prime",
"ACPT": "Crypto Accept",
"ACQ": "Acquire.Fi",
"ACRE": "Arable Protocol",
"ACRIA": "Acria.AI",
"ACS": "Access Protocol",
- "ACT": "Achain",
+ "ACSI": "ACryptoSI",
+ "ACT": "Act I The AI Prophecy",
"ACTA": "Acta Finance",
"ACTIN": "Actinium",
"ACTN": "Action Coin",
@@ -197,9 +234,12 @@
"ADAB": "Adab Solutions",
"ADACASH": "ADACash",
"ADAI": "Aave DAI",
+ "ADAM": "Adam Back",
"ADANA": "Adanaspor Fan Token",
"ADAO": "ADADao",
"ADAPAD": "ADAPad",
+ "ADASOL": "ADA",
+ "ADASTRA": "Ad Astra",
"ADAT": "Adadex Tools",
"ADAX": "ADAX",
"ADB": "Adbank",
@@ -208,6 +248,7 @@
"ADD": "ADD.xyz",
"ADDAMS": "ADDAMS AI",
"ADDY": "Adamant",
+ "ADE": "AADex Finance",
"ADEL": "Akropolis Delphi",
"ADF": "Art de Finance",
"ADH": "Adhive",
@@ -218,6 +259,7 @@
"ADN": "Aladdin",
"ADNT": "Aiden",
"ADO": "ADO Protocol",
+ "ADOG": "America Dog",
"ADOGE": "Arbidoge",
"ADON": "Adonis",
"ADP": "Adappter Token",
@@ -270,6 +312,7 @@
"AFR": "Afreum",
"AFRO": "Afrostar",
"AFROX": "AfroDex",
+ "AFSUI": "Aftermath Staked SUI",
"AFTT": "Africa Trading Chain",
"AFX": "Afrix",
"AFYON": "Afyonspor Fan Token",
@@ -278,14 +321,20 @@
"AGA": "AGA Token",
"AGATA": "Agatech",
"AGB": "Apes Go Bananas",
+ "AGC": "Argocoin",
+ "AGENT": "AgentLayer",
+ "AGENTFUN": "AgentFun.AI",
"AGET": "Agetron",
+ "AGETH": "Kelp Gain",
"AGEUR": "agEUR",
"AGF": "Augmented Finance",
"AGG": "AGG",
"AGI": "Delysium",
"AGII": "AGII",
+ "AGIL": "Agility LSD",
"AGIV1": "SingularityNET v1",
"AGIX": "SingularityNET",
+ "AGIXBT": "AGIXBT by Virtuals",
"AGLA": "Angola",
"AGLD": "Adventure Gold",
"AGM": "Argoneum",
@@ -298,6 +347,7 @@
"AGRS": "Agoras Token",
"AGS": "Aegis",
"AGT": "aGifttoken",
+ "AGURI": "Aguri-Chan",
"AGV": "Astra Guild Ventures",
"AGVC": "AgaveCoin",
"AGVE": "Agave",
@@ -305,6 +355,7 @@
"AHOO": "Ahoolee",
"AHT": "AhaToken",
"AI": "Sleepless",
+ "AI16Z": "ai16z",
"AIA": "AIA Chain",
"AIAI": "All In AI",
"AIAKITA": "AiAkita",
@@ -315,12 +366,15 @@
"AIBCOIN": "AIBLOCK",
"AIBK": "AIB Utility Token",
"AIBU": "AIBUZZ TOKEN",
- "AIC": "AI Crypto",
+ "AIC": "AI Companions",
+ "AICELL": "AICell",
"AICH": "AIChain",
"AICO": "AICON",
"AICODE": "AI CODE",
"AICORE": "AICORE",
+ "AICRYPTO": "AI Crypto",
"AID": "AidCoin",
+ "AIDA": "Ai-Da robot",
"AIDI": "Aidi Inu",
"AIDOC": "AI Doctor",
"AIDOG": "AiDoge",
@@ -333,6 +387,7 @@
"AIEN": "AIENGLISH",
"AIF": "AI FREEDOM TOKEN",
"AIFLOKI": "AI Floki",
+ "AIFUN": "AI Agent Layer",
"AIG": "A.I Genesis",
"AIGPU": "AIGPU Token",
"AII": "Artificial Idiot",
@@ -340,17 +395,21 @@
"AIKEK": "AlphaKEK.AI",
"AILINK": "AiLink Token",
"AIM": "ModiHost",
+ "AIMAGA": "Presidentexe",
"AIMARKET": "Acria.AI AIMARKET",
"AIMBOT": "AimBot AI",
"AIMEE": "AIMEE",
+ "AIMET": "AI Metaverse",
"AIMR": "MeromAI",
"AIMS": "HighCastle Token",
"AIMX": "Aimedis",
"AIN": "AI Network",
+ "AINA": "Ainastasia",
"AINN": "AINN",
"AINU": "Ainu Token",
"AION": "Aion",
"AIONE": "AiONE",
+ "AIOS": "INT OS",
"AIOT": "AIOT Token",
"AIOZ": "AIOZ Network",
"AIPAD": "AIPAD",
@@ -358,11 +417,14 @@
"AIPEPE": "AI PEPE KING",
"AIPG": "AI Power Grid",
"AIPIN": "AI PIN",
+ "AIPO": "Aipocalypto",
"AIR": "Altair",
"AIRB": "BillionAir",
"AIRBTC": "AIRBTC",
+ "AIRDROP": "AIRDROP2049",
"AIRE": "Tokenaire",
"AIRI": "aiRight",
+ "AIRIAN": "AIRian",
"AIRT": "Aircraft",
"AIRTNT": "Tenti",
"AIRTOKEN": "AirToken",
@@ -370,6 +432,7 @@
"AIS": "AISwap",
"AISCII": "AISCII",
"AISHIB": "ARBSHIB",
+ "AIST": "Artificial intelligence staking token",
"AIT": "AIT Protocol",
"AITECH": "Artificial Intelligence Utility Token",
"AITEK": "AI Technology",
@@ -380,24 +443,36 @@
"AITRA": "Aitra",
"AITT": "AITrading",
"AIUS": "Arbius",
+ "AIVIA": "AI Virtual Agents",
"AIWALLET": "AiWallet Token",
"AIX": "Aigang",
+ "AIXBT": "aixbt by Virtuals",
+ "AIXERC": "AI-X",
"AJNA": "Ajna Protocol",
+ "AJUN": "Ajuna Network",
"AK12": "AK12",
"AKA": "Akroma",
"AKI": "Aki Network",
+ "AKIT": "Akita Inu",
"AKITA": "Akita Inu",
+ "AKITAI": "AKITA INU",
"AKITAX": "Akitavax",
"AKN": "Akoin",
"AKNC": "Aave KNC v1",
+ "AKOBI": "AKOBI",
"AKREP": "Antalyaspor Token",
"AKRO": "Akropolis",
"AKT": "Akash Network",
"AKTIO": "AKTIO Coin",
- "ALA": "ALA",
+ "AKUMA": "Akuma Inu",
+ "AL": "ArchLoot",
+ "ALA": "Alanyaspor Fan Token",
"ALAN": "Alan the Alien",
+ "ALASKA": "Alaska",
+ "ALATOKEN": "ALA",
"ALB": "Alien Base",
"ALBART": "Albärt",
+ "ALBE": "ALBETROS",
"ALBEDO": "ALBEDO",
"ALBT": "AllianceBlock",
"ALC": "Arab League Coin",
@@ -409,6 +484,7 @@
"ALD": "AladdinDAO",
"ALDIN": "Alaaddin.ai",
"ALE": "Ailey",
+ "ALEO": "ALEO",
"ALEPH": "Aleph.im",
"ALEX": "ALEX Lab",
"ALEXANDRITE": "Alexandrite",
@@ -423,7 +499,9 @@
"ALIAS": "Alias",
"ALIC": "AliCoin",
"ALICE": "My Neighbor Alice",
+ "ALICEA": "Alice AI",
"ALIEN": "AlienCoin",
+ "ALIENPEP": "Alien Pepe",
"ALIF": " ALIF COIN",
"ALINK": "Aave LINK v1",
"ALIS": "ALISmedia",
@@ -432,22 +510,30 @@
"ALIX": "AlinX",
"ALKI": "Alkimi",
"ALLBI": "ALL BEST ICO",
+ "ALLC": "All Crypto Mechanics",
"ALLEY": "NFT Alley",
"ALLIN": "All in",
+ "ALLMEE": "All.me",
"ALM": "Alium Finance",
+ "ALMAN": "Alman",
"ALMC": "Awkward Look Monkey Club",
"ALME": "Alita",
"ALN": "Aluna",
+ "ALNV1": "Aluna v1",
"ALOHA": "Aloha",
"ALOT": "Dexalot",
"ALP": "Alphacon",
"ALPA": "Alpaca",
"ALPACA": "Alpaca Finance",
+ "ALPACAS": "Bitcoin Mascot",
"ALPH": "Alephium",
"ALPHA": "Alpha Finance Lab",
"ALPHAAI": "Alpha AI",
"ALPHABET": "Alphabet",
"ALPHAC": "Alpha Coin",
+ "ALPHAF": "Alpha Fi",
+ "ALPHAG": "Alpha Gardeners",
+ "ALPHAPETTO": "Alpha Petto Shells",
"ALPHAS": "Alpha Shards",
"ALPHR": "Alphr",
"ALPINE": "Alpine F1 Team Fan Token",
@@ -465,6 +551,7 @@
"ALUSD": "Alchemix USD",
"ALUX": "Alux Bank",
"ALV": "Allive",
+ "ALV1": "ArchLoot v1",
"ALVA": "Alvara Protocol",
"ALWAYS": "Always Evolving",
"ALX": "ALAX",
@@ -484,6 +571,9 @@
"AMDC": "Allmedi Coin",
"AMDG": "AMDG",
"AME": "Amepay",
+ "AMER": "America",
+ "AMERI": "AMERICAN EAGLE",
+ "AMERIC": "American True Hero",
"AMERICA": "America",
"AMERICANCOIN": "AmericanCoin",
"AMF": "AddMeFast",
@@ -499,6 +589,7 @@
"AMO": "AMO Coin",
"AMOGUS": "Sussy Baka Impostor",
"AMON": "AmonD",
+ "AMORE": "Amocucinare",
"AMOS": "Amos",
"AMP": "Amp",
"AMPL": "Ampleforth",
@@ -514,6 +605,7 @@
"ANAL": "AnalCoin",
"ANALOS": "analoS",
"ANALY": "Analysoor",
+ "ANAT": "Anatolia Token",
"ANB": "Angryb",
"ANC": "Anchor Protocol",
"ANCHOR": "AnchorSwap",
@@ -526,15 +618,22 @@
"ANDWU": "Chinese Andy",
"ANDX": "Arrano",
"ANDY": "ANDY",
+ "ANDYB": "AndyBlast",
+ "ANDYBNB": "Andy",
+ "ANDYBSC": "ANDY",
+ "ANDYMAN": "ANDYMAN",
+ "ANDYSOL": "Andy on SOL",
+ "ANEX": "AstroNexus",
"ANGEL": "Crypto Angel",
"ANGL": "Angel Token",
"ANGLE": "ANGLE",
"ANGO": "Aureus Nummus Gold",
"ANGRYSLERF": "ANGRYSLERF",
- "ANI": "Animecoin",
+ "ANI": "Anime Token",
"ANIM": "Animalia",
"ANIMA": "Realm Anima",
"ANIME": "Anime",
+ "ANIMECOIN": "Animecoin",
"ANJ": "Aragon Court",
"ANJI": "Anji",
"ANK": "AlphaLink",
@@ -551,6 +650,7 @@
"ANONCOIN": "Anoncoin",
"ANRX": "AnRKey X",
"ANS": "ANS Crypto Coin",
+ "ANSOM": "Ansom",
"ANSR": "Answerly",
"ANT": "Aragon",
"ANTC": "AntiLitecoin",
@@ -559,11 +659,14 @@
"ANTI": "Anti Bitcoin",
"ANTIS": "Antis Inu",
"ANTS": "ANTS Reloaded",
+ "ANTT": "Antara Token",
"ANUS": "URANUS",
"ANV": "Aniverse",
+ "ANVL": "Anvil",
"ANW": "Anchor Neural World",
"ANY": "Anyswap",
"ANYONE": "ANyONe Protocol",
+ "ANZENUSD": "Anzen Finance",
"AOC": "Alickshundra Occasional-Cortex",
"AOG": "AgeOfGods",
"AOK": "AOK",
@@ -576,12 +679,15 @@
"APCG": "ALLPAYCOIN",
"APD": "Aptopad",
"APE": "ApeCoin",
- "APECOIN": "Asia Pacific Electronic Coin",
"APED": "Baddest Alpha Ape Bundle",
- "APES": "Alpha Petto Shells",
+ "APEDEV": "The dev is an Ape",
+ "APEFUN": "Ape",
+ "APEPE": "Ape and Pepe",
+ "APES": "APES",
"APETARDIO": "Apetardio",
"APEWIFHAT": "ApeWifHat",
"APEX": "ApeX Protocol",
+ "APEXA": "Apex AI",
"APEXCOIN": "ApexCoin",
"APEXT": "ApexToken",
"APFC": "APF coin",
@@ -594,11 +700,15 @@
"APL": "Apollo Currency",
"APM": "apM Coin",
"APN": "Apron",
+ "APO": "Apollo Caps ETF",
"APOD": "AirPod",
+ "APOL": "Apollo FTW",
+ "APOLL": "Apollon Limassol",
"APOLLO": "Apollo Crypto",
"APP": "Moon App",
"APPA": "Dappad",
"APPC": "AppCoins",
+ "APPEALUSD": "Appeal dollar",
"APPLE": "AppleSwap",
"APRICOT": "Apricot Finance",
"APRIL": "April",
@@ -626,6 +736,7 @@
"AQUAC": "Aquachain",
"AQUACITY": "Aquacity",
"AQUAGOAT": "Aqua Goat",
+ "AQUAGOATV1": "Aqua Goat v1",
"AQUAP": "Planet Finance",
"AQUARI": "Aquari",
"AR": "Arweave",
@@ -635,14 +746,18 @@
"ARB": "Arbitrum",
"ARBI": "Arbi",
"ARBIT": "Arbit Coin",
+ "ARBP": "ARB Protocol",
"ARBS": "Arbswap",
"ARBT": "ARBITRAGE",
"ARBUZ": "ARBUZ",
- "ARC": "ArcticCoin",
- "ARCA": "Arca",
+ "ARC": "AI Rig Complex",
+ "ARCA": "Legend of Arcadia",
"ARCAD": "Arcadeum",
"ARCADE": "ARCADE",
+ "ARCADECITY": "Arcade City",
"ARCADEF": "arcadefi",
+ "ARCADEN": "ArcadeNetwork",
+ "ARCAI": "ARCAI",
"ARCANE": "Arcane Token",
"ARCAS": "Arcas",
"ARCH": "Archway",
@@ -650,10 +765,11 @@
"ARCHCOIN": "ArchCoin",
"ARCHE": "Archean",
"ARCHIVE": "Chainback",
- "ARCHL": "ArchLoot",
+ "ARCINTEL": "Arc",
"ARCO": "AquariusCoin",
"ARCONA": "Arcona",
"ARCT": "ArbitrageCT",
+ "ARCTICCOIN": "ArcticCoin",
"ARCX": "ARC Governance",
"ARDR": "Ardor",
"ARDX": "ArdCoin",
@@ -672,6 +788,7 @@
"ARI10": "Ari10",
"ARIA": "Legends of Aria",
"ARIA20": "Arianee",
+ "ARIT": "ArithFi",
"ARIX": "Arix",
"ARK": "ARK",
"ARKEN": "Arken Finance",
@@ -680,12 +797,15 @@
"ARKM": "Arkham",
"ARKN": "Ark Rivals",
"ARKY": "Arky",
+ "ARKYS": "Arky Satoshi's Dog",
"ARM": "Armory Coin",
"ARMA": "Aarma",
"ARMOR": "ARMOR",
"ARMR": "ARMR",
"ARMS": "2Acoin",
+ "ARMY": "Army of Fortune Coin",
"ARNA": "ARNA Panacea",
+ "ARNC": "Arnoya classic",
"ARNM": "Arenum",
"ARNO": "ARNO",
"ARNX": "Aeron",
@@ -714,10 +834,13 @@
"ARTFI": "ARTFI",
"ARTG": "Goya Giant Token",
"ARTH": "ARTH",
+ "ARTHERA": "Arthera",
"ARTI": "Arti Project",
+ "ARTIF": "Artificial Intelligence",
"ARTII": "ARTII Token",
"ARTL": "ARTL",
"ARTM": "ARTM",
+ "ARTMETIS": "Staked Metis Token",
"ARTP": "ArtPro",
"ARTR": "Artery Network",
"ARTT": "ARTT Network",
@@ -738,6 +861,7 @@
"ASG": "Asgard",
"ASGC": "ASG",
"ASH": "ASH",
+ "ASHS": "AshSwap",
"ASI": "Artificial Superintelligence Alliance",
"ASIA": "Asia Coin",
"ASIMI": "ASIMI",
@@ -745,10 +869,12 @@
"ASK": "Permission Coin",
"ASKO": "Asko",
"ASM": "Assemble Protocol",
+ "ASMO": "AS Monaco Fan Token",
"ASN": "Ascension Coin",
"ASNT": "Assent Protocol",
"ASP": "Aspire",
"ASPC": "Astropup Coin",
+ "ASPIRIN": "Aspirin",
"ASPO": "ASPO Shards",
"ASQT": "ASQ Protocol",
"ASR": "AS Roma Fan Token",
@@ -767,13 +893,16 @@
"ASTRAFER": "Astrafer",
"ASTRAFERV1": "Astrafer v1",
"ASTRAL": "Astral",
- "ASTRO": "AstroSwap",
+ "ASTRO": "Astroport",
"ASTROC": "Astroport Classic",
"ASTROLION": "AstroLion",
"ASTRONAUT": "Astronaut",
+ "ASTROO": "Astroon",
"ASTROP": "AstroPepeX",
+ "ASTROS": "AstroSwap",
"ASTX": "Asterix Labs",
"ASUNA": "Asuna Hentai",
+ "ASUSHI": "Sushi (Arbitrum Bridge)",
"ASVA": "Asva",
"ASW": "AdaSwap",
"ASY": "ASYAGRO",
@@ -790,19 +919,24 @@
"ATFI": "Atlantic Finance Token",
"ATFS": "ATFS Project",
"ATH": "Aethir",
+ "ATHCAT": "ATH CAT",
"ATHE": "Atheios",
"ATHEN": "Athenas AI",
+ "ATHENA": "Athena DexFi",
+ "ATHER": "Ather",
"ATHVODKA": "All Time High Vodka",
"ATID": "AstridDAO Token",
"ATK": "Attack Wagon",
"ATKN": "A-Token",
"ATL": "ATLANT",
+ "ATLA": "Atleta Network",
"ATLAS": "Star Atlas",
"ATLX": "Atlantis Loans Polygon",
"ATM": "Atletico de Madrid Fan Token",
"ATMA": "ATMA",
"ATMC": "Autumncoin",
"ATMCHAIN": "ATMChain",
+ "ATMCOIN": "ATM",
"ATMI": "Atonomi",
"ATMOS": "Novusphere",
"ATN": "ATN",
@@ -816,10 +950,12 @@
"ATOZ": "Race Kingdom",
"ATP": "Atlas Protocol",
"ATPAY": "AtPay",
- "ATR": "Ather",
+ "ATR": "Artrade",
"ATRI": "Atari Token",
"ATRNO": "AETERNUS",
"ATROFA": "Atrofarm",
+ "ATRS": "Attarius Network",
+ "ATRV1": "Artrade v1",
"ATS": "Atlas DEX",
"ATT": "Attila",
"ATTR": "Attrace",
@@ -835,6 +971,7 @@
"AUDT": "Auditchain",
"AUDX": "eToro Australian Dollar",
"AUK": "Aukcecoin",
+ "AUKI": "Auki Labs",
"AUN": "Authoreon",
"AUNIT": "Aunit",
"AUPC": "Authpaper",
@@ -850,19 +987,21 @@
"AURUM": "Aurum",
"AURY": "Aurory",
"AUSCM": "Auric Network",
- "AUSD": "Appeal dollar",
+ "AUSD": "AUSD",
"AUSDC": "Aave USDC v1",
"AUSDT": "aUSDT",
"AUT": "Autoria",
"AUTHORSHIP": "Authorship",
"AUTISM": "AUTISM",
"AUTO": "Auto",
- "AUTON": "Autonio",
"AUTUMN": "Autumn",
+ "AUVERSE": "AuroraVerse",
"AUX": "Auxilium",
"AV": "Avatar Coin",
"AVA": "Travala",
+ "AVACN": "AVACOIN",
"AVAI": "Orca AVAI",
+ "AVAIL": "Avail",
"AVAL": "Avaluse",
"AVALON": "Avalon",
"AVALOX": "AVALOX",
@@ -871,10 +1010,14 @@
"AVATAR": "Avatar",
"AVATLY": "Avatly",
"AVAV": "AVAV",
+ "AVAV1": "AVA v1",
"AVAX": "Avalanche",
"AVAXIOU": "Avalanche IOU",
+ "AVB": "Autonomous Virtual Beings",
"AVDO": "AvocadoCoin",
"AVE": "Avesta",
+ "AVEN": "Aventis AI",
+ "AVENT": "Aventa",
"AVG": "Avocado DAO",
"AVH": "Animation Vision Cash",
"AVI": "Aviator",
@@ -921,6 +1064,8 @@
"AXN": "Axion",
"AXNT": "Axentro",
"AXO": "Axo",
+ "AXOL": "Axol",
+ "AXON": "AxonDAO Governance Token",
"AXPR": "aXpire",
"AXR": "AXRON",
"AXS": "Axie Infinity Shards",
@@ -962,6 +1107,7 @@
"BABY": "BabySwap",
"BABYANDY": "Baby Andy",
"BABYB": "Baby Bali",
+ "BABYBI": "Baby Bitcoin",
"BABYBINANCE": "BABYBINANCE",
"BABYBITC": "BabyBitcoin",
"BABYBNB": "BabyBNB",
@@ -972,12 +1118,17 @@
"BABYBOMEOW": "Baby of BOMEOW",
"BABYBONK": "Baby Bonk",
"BABYBTC": "BABYBTC",
+ "BABYC": "Baby Cat",
"BABYCAT": "Baby Cat Coin",
+ "BABYCATE": "BabyCate",
"BABYCATS": "Baby Cat Coin",
"BABYCEO": "Baby Doge CEO",
"BABYCRASH": "BabyCrash",
"BABYCRAZYT": "BABY CRAZY TIGER",
"BABYCUBAN": "Baby Cuban",
+ "BABYCZHAO": "Baby Czhao",
+ "BABYD": "Baby Dragon",
+ "BABYDENG": "Baby Moo Deng",
"BABYDOGE": "BabyDoge",
"BABYDOGEINU": "BABY DOGE INU",
"BABYDOGEZILLA": "BabyDogeZilla",
@@ -986,10 +1137,14 @@
"BABYFB": "Baby Floki Billionaire",
"BABYFLOKI": "BabyFloki",
"BABYFLOKIZILLA": "BabyFlokiZilla",
+ "BABYG": "BabyGME",
"BABYGME": "Baby GameStop",
+ "BABYGOAT": "Baby Goat",
"BABYGOLDEN": "Baby Golden Coin",
"BABYGROK": "Baby Grok",
"BABYGUMMY": "BABY GUMMY",
+ "BABYHARRIS": "Baby Harris",
+ "BABYHIPPO": "BABY HIPPO",
"BABYHKTIGER": "BabyHkTiger",
"BABYHONK": "Baby Honk",
"BABYJERRY": "Baby Jerry",
@@ -997,19 +1152,31 @@
"BABYKABOSU": "Baby Kabosu",
"BABYKITTY": "BabyKitty",
"BABYLONG": "Baby Long",
+ "BABYM": "BabyMAGA",
"BABYMAGA": "Baby Maga",
+ "BABYME": "Baby Meme Coin",
"BABYMEME": "Baby Memecoin",
+ "BABYMIGGLES": "Baby Miggles",
+ "BABYMO": "Baby Moon Floki",
+ "BABYMU": "Baby Musk",
"BABYMUSK": "Baby Musk",
"BABYMYRO": "Babymyro",
+ "BABYNEIRO": "Baby Neiro",
"BABYOKX": "BABYOKX",
+ "BABYP": "BabyPepe",
+ "BABYPEIPEI": "Baby PeiPei",
"BABYPEPE": "Babypepe (BSC)",
+ "BABYPNUT": "Baby Pnut",
+ "BABYPOPCAT": "Baby PopCat",
"BABYPORK": "Baby Pepe Fork",
"BABYRATS": "Baby Rats",
"BABYRWA": "BabyRWA",
+ "BABYS": "Baby Slerf",
"BABYSAITAMA": "Baby Saitama",
"BABYSHARK": "Baby Shark",
"BABYSHIB": "Baby Shiba Inu",
"BABYSHIBAINU": "Baby Shiba Inu",
+ "BABYSHIRO": "Baby Shiro Neko",
"BABYSHIV": "Baby Shiva",
"BABYSLERF": "BabySlerf",
"BABYSOL": "Baby Solana",
@@ -1019,15 +1186,19 @@
"BABYTK": "Baby Tiger King",
"BABYTOMCAT": "Baby Tomcat",
"BABYTOSHI": "Baby Toshi",
+ "BABYTR": "BABYTRUMP",
"BABYTROLL": "Baby Troll",
"BABYTRUMP": "BABYTRUMP",
"BABYWIF": "babydogwifhat",
+ "BABYWLFI": "Baby WLFI",
"BABYX": "Baby X",
"BAC": "Basis Cash",
"BACK": "DollarBack",
"BACOIN": "BACoin",
"BACON": "BaconDAO (BACON)",
"BAD": "Bad Idea AI",
+ "BADA": "Bad Alien Division",
+ "BADC": "BADCAT",
"BADCAT": "Andy’s Alter Ego",
"BADGER": "Badger DAO",
"BAFC": "BabyApeFunClub",
@@ -1041,32 +1212,47 @@
"BAKAC": "Baka Casino",
"BAKE": "BakeryToken",
"BAKED": "Baked",
+ "BAKEDB": "Baked Beans Token",
+ "BAKEDTOKEN": "Baked",
+ "BAKSO": "Disney Sumatran Tiger",
"BAKT": "Backed Protocol",
"BAL": "Balancer",
"BALA": "Shambala",
"BALD": "Bald",
"BALIN": "Balin Bank",
+ "BALL": "Game 5 BALL",
"BALLZ": "Wolf Wif",
+ "BALN": "Balanced",
"BALPHA": "bAlpha",
"BALT": "Brett's cat",
"BALTO": "Balto Token",
"BAMA": "BabyAMA",
"BAMBIT": "BAMBIT",
"BAMBOO": "BambooDeFi",
- "BAN": "Banano",
+ "BAMITCOIN": "Bamit",
+ "BAN": "Comedian",
"BANANA": "Banana Gun",
+ "BANANAF": "Banana For Scale",
"BANANAS": "Monkey Peepo",
+ "BANANO": "Banano",
"BANC": "Babes and Nerds",
"BANCA": "BANCA",
"BAND": "Band Protocol",
"BANDEX": "Banana Index",
+ "BANDIT": "Bandit on Base",
"BANG": "BANG",
+ "BANGY": "BANGY",
"BANK": "Float Protocol",
+ "BANKA": "Bank AI",
+ "BANKC": "Bankcoin",
+ "BANKER": "BankerCoinAda",
"BANKETH": "BankEth",
+ "BANKSY": "BANKSY",
"BANNER": "BannerCoin",
"BANUS": "Banus.Finance",
"BANX": "Banx.gg",
"BAO": "Bao Finance",
+ "BAOBAO": "BaoBao",
"BAOE": "Business Age of Empires",
"BAOM": "Battle of Memes",
"BAOS": "BaoBaoSol",
@@ -1074,15 +1260,34 @@
"BARA": "Capybara",
"BARC": "The Blu Arctic Water Company",
"BAREBEARS": "BAREBEARS",
+ "BARIO": "Bario",
"BARK": "Bored Ark",
"BARRON": "Time Traveler",
+ "BARS": "Banksters Token",
+ "BARSIK": "Hasbulla's Cat",
"BART": "BarterTrade",
+ "BARTKRC": "BART Token",
+ "BARY": "Bary",
"BAS": "Basis Share",
- "BASE": "Base Protocol",
"BASEAI": "BaseAI",
+ "BASECAT": "BASE CAT",
+ "BASECOIN": "BASECOIN",
"BASED": "Based Money",
"BASEDAI": "BasedAI",
+ "BASEDCHILL": "Based Chill Guy",
+ "BASEDCOPE": "COPE",
+ "BASEDFINANCE": "Based",
+ "BASEDHOPPY": "Based Hoppy (basedhoppy.vip)",
+ "BASEDP": "Based Pepe",
+ "BASEDR": "Based Rabbit",
+ "BASEDS": "BasedSwap",
+ "BASEDTURBO": "Based Turbo",
+ "BASEDV1": "Based Money v1",
"BASEHEROES": "Baseheroes",
+ "BASEPROTOCOL": "Base Protocol",
+ "BASESWAPX": "BaseX",
+ "BASEVE": "Base Velocimeter",
+ "BASEX": "Base Terminal",
"BASH": "LuckChain",
"BASHC": "BashCoin",
"BASHOS": "Bashoswap",
@@ -1094,6 +1299,8 @@
"BASTET": "Bastet Goddess",
"BAT": "Basic Attention Token",
"BATH": "Battle Hero",
+ "BATMAN": "BATMAN",
+ "BATO": "Batonex Token",
"BATS": "Batcoin",
"BAVA": "Baklava",
"BAX": "BABB",
@@ -1109,6 +1316,7 @@
"BBC": "Bull BTC Club",
"BBCC": "BaseballCardCoin",
"BBCG": "BBC Gold Coin",
+ "BBCH": "Binance Wrapped BCH",
"BBCT": "TraDove B2BCoin",
"BBDC": "Block Beats Network",
"BBDT": "BBD Token",
@@ -1122,19 +1330,24 @@
"BBL": "beoble",
"BBN": "BBNCOIN",
"BBO": "Bigbom",
+ "BBONK": "BitBonk",
"BBOS": "Blackbox Foundation",
"BBP": "BiblePay",
"BBR": "Boolberry",
"BBRETT": "Baby Brett",
"BBS": "BBSCoin",
+ "BBSOL": "Bybit Staked SOL",
"BBT": "BitBook",
"BBTC": "Binance Wrapped BTC",
"BBTF": "Block Buster Tech Inc",
"BBUSD": "BounceBit USD",
+ "BBYDEV": "The Dev is a Baby",
"BC": "Bitcoin Confidential",
"BCA": "Bitcoin Atom",
"BCAC": "Business Credit Alliance Chain",
+ "BCAI": "Bright Crypto Ai",
"BCAP": "Blockchain Capital",
+ "BCAPV1": "Blockchain Capital v1",
"BCAT": "BitClave",
"BCAU": "BetaCarbon",
"BCB": "BCB Blockchain",
@@ -1183,13 +1396,14 @@
"BD20": "BRC-20 DEX",
"BDAY": "Birthday Cake",
"BDB": "Big Data Block",
- "BDC": "Based",
+ "BDC": "BILLION•DOLLAR•CAT",
"BDCC": "BDCC COIN",
"BDCLBSC": "BorderCollieBSC",
"BDG": "BitDegree",
"BDID": "BDID",
"BDL": "Bitdeal",
"BDOG": "Bulldog Token",
+ "BDOGITO": "BullDogito",
"BDOT": "Binance Wrapped DOT",
"BDP": "Big Data Protocol",
"BDPI": "Interest Bearing Defi Pulse Index",
@@ -1205,7 +1419,7 @@
"BEAMMW": "Beam",
"BEAN": "Bean",
"BEANS": "Moonbeans",
- "BEAST": "CryptoBeast",
+ "BEAST": "MrBeast",
"BEAT": "BEAT Token",
"BEATLES": "JohnLennonC0IN",
"BEATS": "Sol Beats",
@@ -1214,8 +1428,11 @@
"BECH": "Beauty Chain",
"BECN": "Beacon",
"BECO": "BecoSwap Token",
+ "BECX": "BETHEL",
"BED": "Bankless BED Index",
"BEE": "Herbee",
+ "BEEF": "PepeBull",
+ "BEEG": "Beeg Blue Whale",
"BEEP": "BEEP",
"BEER": "BEERCOIN",
"BEERUSCAT": "BeerusCat",
@@ -1229,19 +1446,27 @@
"BEFX": "Belifex",
"BEFY": "Befy Protocol",
"BEG": "BEG",
+ "BEIBEI": "Chinese BEIBEI",
"BEL": "Bella Protocol",
"BELA": "Bela",
+ "BELL": "Bellscoin",
+ "BELLE": "Isabelle",
+ "BELLS": "Bellscoin",
"BELR": "Belrium",
"BELT": "Belt",
"BELUGA": "Beluga",
"BEM": "BEMIL Coin",
+ "BEMC": "BemChain",
"BEMD": "Betterment Digital",
"BEN": "Ben",
"BEND": "BendDao",
+ "BENDER": "BENDER",
"BENDOG": "Ben the Dog",
"BENG": "Based Peng",
+ "BENI": "Beni",
"BENJACOIN": "Benjacoin",
- "BENJI": "BenjiRolls",
+ "BENJI": "Basenji",
+ "BENJIROLLS": "BenjiRolls",
"BENK": "BENK",
"BENT": "Bent Finance",
"BENTO": "Bento",
@@ -1252,9 +1477,13 @@
"BEPE": "Blast Pepe",
"BEPR": "Blockchain Euro Project",
"BEPRO": "BEPRO Network",
+ "BERF": "BERF",
+ "BERG": "Bloxberg",
"BERN": "BERNcash",
"BERNIE": "BERNIE SENDERS",
"BERRY": "Berry",
+ "BERRYS": "BerrySwap",
+ "BERT": "Bertram The Pomeranian",
"BES": "battle esports coin",
"BESA": "Besa Gaming",
"BESHARE": "Beshare Token",
@@ -1264,6 +1493,7 @@
"BETACOIN": "BetaCoin",
"BETBOX": "betbox",
"BETF": "Betform",
+ "BETFI": "Betfin",
"BETH": "Beacon ETH",
"BETHER": "Bethereum",
"BETR": "BetterBetting",
@@ -1290,19 +1520,23 @@
"BFK WARZONE": "BFK Warzone",
"BFLOKI": "BurnFloki",
"BFLY": "Butterfly Protocol",
+ "BFM": "BenefitMine",
"BFT": "BF Token",
"BFTB": "Brazil Fan Token",
"BFTC": "BITS FACTOR",
+ "BFWOG": "Based Fwog (basedfwog.info)",
"BFX": "BitFinex Tokens",
"BG": "BunnyPark Game",
"BGB": "Bitget token",
"BGBP": "Binance GBP Stable Coin",
+ "BGBV1": "Bitget Token v1",
"BGC": "Bee Token",
"BGG": "BGG Token",
"BGLD": "Based Gold",
"BGONE": "BigONE Token",
"BGPT": "BlockGPT",
"BGS": "Battle of Guardians Share",
+ "BGSOL": "Bitget SOL Staking",
"BGUY": "The Big Guy",
"BGVT": "Bit Game Verse Token",
"BHAO": "Bithao",
@@ -1323,6 +1557,7 @@
"BIBL": "Biblecoin",
"BIBO": "Bible of Memes",
"BIC": "Bikercoins",
+ "BICHO": "bicho",
"BICITY": "BiCity AI Projects",
"BICO": "Biconomy",
"BICS": "Biceps",
@@ -1335,10 +1570,13 @@
"BIDP": "BID Protocol",
"BIDR": "Binance IDR Stable Coin",
"BIDZ": "BIDZ Coin",
+ "BIDZV1": "BIDZ Coin v1",
"BIFI": "Beefy.Finance",
"BIFIF": "BiFi",
"BIG": "Big Eyes",
"BIGBANGCORE": "BigBang Core",
+ "BIGCOIN": "BigCoin",
+ "BIGFOOT": "BigFoot Town",
"BIGHAN": "BighanCoin",
"BIGLEZ": "THE BIG LEZ SHOW",
"BIGMIKE": "Big Mike",
@@ -1350,16 +1588,22 @@
"BIIS": "biis (Ordinals)",
"BIKI": "BIKI",
"BILL": "TillBilly",
+ "BILLI": "Billi",
"BILLICAT": "BilliCat",
+ "BILLY": "Billy ",
+ "BILLYBSC": "BILLY",
"BIM": "BitminerCoin",
+ "BINANCED": "BinanceDog On Sol",
+ "BINANCEDOG": "Binancedog",
"BIND": "Compendia",
"BINEM": "Binemon",
"BINGO": "Tomorrowland",
+ "BINK": "Big Dog Fink",
"BINO": "Binopoly",
"BINS": "Bitsense",
"BINTEX": "Bintex Futures",
"BINU": "Blast Inu",
- "BIO": "BITONE",
+ "BIO": "Bio Protocol",
"BIOB": "BioBar",
"BIOC": "BioCrypt",
"BIOCOIN": "Biocoin",
@@ -1375,6 +1619,7 @@
"BIRD": "Bird.Money",
"BIRDCHAIN": "Birdchain",
"BIRDDOG": "Bird Dog",
+ "BIRDO": "Bird Dog",
"BIS": "Bismuth",
"BISKIT": "Biskit Protocol",
"BISO": "BISOSwap",
@@ -1395,11 +1640,13 @@
"BITCI": "Bitcicoin",
"BITCM": "Bitcomo",
"BITCNY": "bitCNY",
+ "BITCO": "Bitcoin Black Credit Card",
"BITCOINC": "Bitcoin Classic",
"BITCOINP": "Bitcoin Private",
"BITCOINV": "BitcoinV",
"BITCONNECT": "BitConnect Coin",
"BITCRATIC": "Bitcratic Token",
+ "BITE": "Bitether",
"BITF": "Bit Financial",
"BITFLIP": "BitFlip",
"BITG": "Bitcoin Green",
@@ -1411,21 +1658,27 @@
"BITNEW": "BitNewChain",
"BITO": "BitoPro Exchange Token",
"BITOK": "BitOKX",
+ "BITONE": "BITONE",
"BITORB": "BitOrbit",
"BITRA": "Bitratoken",
+ "BITRADIO": "Bitradio",
"BITREWARDS": "BitRewards",
"BITROLIUM": "Bitrolium",
"BITRUE": "Bitrue Coin",
"BITS": "BitstarCoin",
"BITSD": "Bits Digit",
+ "BITSERIAL": "BitSerial",
"BITSILVER": "bitSilver",
"BITSPACE": "Bitspace",
"BITSZ": "Bitsz",
"BITT": "BiTToken",
"BITTO": "BITTO",
+ "BITTON": "Bitton",
"BITUNE": "Bitune",
"BITUSD": "bitUSD",
+ "BITV": "Bitvolt",
"BITVOLT": "BitVolt",
+ "BITWORLD": "Bit World Token",
"BITX": "BitScreener",
"BITZ": "Bitz Coin",
"BIUT": "Bit Trust System",
@@ -1442,19 +1695,23 @@
"BKING": "King Arthur",
"BKK": "BKEX Token",
"BKN": "Brickken",
+ "BKOK": "BKOK FinTech",
"BKPT": "Biokript",
"BKR": "Balkari Token",
"BKRW": "Binance KRW",
"BKS": "Barkis Network",
"BKT": "Blocktrade token",
"BKX": "BANKEX",
+ "BL00P": "BLOOP",
"BLA": "BlaBlaGame",
"BLAC": "Blacksmith Token",
"BLACK": "BLACKHOLE PROTOCOL",
"BLACKD": "Blackder AI",
"BLACKDRAGON": "Black Dragon",
+ "BLACKR": "BLACK ROCK",
"BLACKROCK": "BlackRock",
"BLACKSALE": "Black Sale",
+ "BLACKST": "Black Stallion",
"BLACKSWAN": "BlackSwan AI",
"BLADE": "BladeWarrior",
"BLAKEBTC": "BlakeBitcoin",
@@ -1462,6 +1719,7 @@
"BLAS": "BlakeStar",
"BLAST": "BLAST",
"BLASTA": "BlastAI",
+ "BLASTUP": "BlastUP",
"BLAUNCH": "B-LAUNCH",
"BLAZE": "Blaze",
"BLAZEX": "BlazeX",
@@ -1474,11 +1732,13 @@
"BLEPE": "Blepe",
"BLERF": "BLERF",
"BLES": "Blind Boxes",
+ "BLET": "Brainlet",
"BLF": "Baby Luffy",
"BLHC": "BlackholeCoin",
"BLI": "BALI TOKEN",
"BLID": "Bolide",
"BLIN": "Blin Metaverse",
+ "BLIND": "Blindsight",
"BLING": "PLEB DREKE",
"BLINK": "BlockMason Link",
"BLINU": "Baby Lambo Inu",
@@ -1488,11 +1748,14 @@
"BLKC": "BlackHat Coin",
"BLKD": "Blinked",
"BLKS": "Blockshipping",
+ "BLM": "Blombard",
"BLN": "Bulleon",
"BLNM": "Bolenum",
"BLOB": "Blob",
"BLOC": "Blockcloud",
"BLOCK": "Blockasset",
+ "BLOCKB": "Block Browser",
+ "BLOCKF": "Block Farm Club",
"BLOCKIFY": "Blockify.Games",
"BLOCKN": "BlockNet",
"BLOCKPAY": "BlockPay",
@@ -1502,6 +1765,7 @@
"BLOCKW": "Blockwise",
"BLOCM": "BLOC.MONEY",
"BLOCX": "BLOCX.",
+ "BLOGGE": "Bloggercube",
"BLOK": "Bloktopia",
"BLOO": "bloo foster coin",
"BLOODY": "Bloody Token",
@@ -1509,6 +1773,7 @@
"BLOOMT": "Bloom Token",
"BLOVELY": "Baby Lovely Inu",
"BLOX": "BLOX",
+ "BLOXT": "Blox Token",
"BLP": "BullPerks",
"BLRY": "BillaryCoin",
"BLS": "Blocks Space",
@@ -1518,14 +1783,22 @@
"BLTG": "Block-Logic",
"BLTV": "BLTV Token",
"BLU": "BlueCoin",
- "BLUE": "Ethereum Blue",
+ "BLUB": "BLUB",
+ "BLUE": "Blue Protocol",
+ "BLUEBUTT": "BLUE BUTT CHEESE",
+ "BLUEG": "Blue Guy",
"BLUEM": "BlueMove",
+ "BLUEN": "Blue Norva",
"BLUES": "Blueshift",
+ "BLUESC": "BluesCrypto",
"BLUESPARROW": "BlueSparrow Token",
"BLUESPARROWOLD": "BlueSparrowToken",
+ "BLUEW": "Blue Whale",
+ "BLUFF": "BluffCat",
"BLUI": "Blui",
"BLUR": "Blur",
"BLURT": "Blurt",
+ "BLUSD": "Boosted LUSD",
"BLUT": "Bluetherium",
"BLV": "Blockvest",
"BLV3": "Crypto Legions V3",
@@ -1554,8 +1827,11 @@
"BMON": "Binamon",
"BMONEY": "B-money",
"BMP": "Brother Music Platform",
+ "BMS": "BMS COIN",
"BMT": "BMChain",
+ "BMTC": "Metabit",
"BMW": "BMW",
+ "BMWUKONG": "Black Myth WuKong",
"BMX": "BitMart Token",
"BMXT": "Bitmxittz",
"BMXX": "Multiplier",
@@ -1566,9 +1842,12 @@
"BNBBUNNY": "BNB BUNNY",
"BNBCAT": "BNBcat",
"BNBCH": "BNB Cash",
+ "BNBD": "BNBDOG",
"BNBDOG": "BNB DOG INU",
"BNBDOGE": "BNBdoge",
"BNBDRGN": "BNBDragon",
+ "BNBE": "BNBEE",
+ "BNBFLOKI": "BNB FLOKI",
"BNBFROG": "BNBFROG",
"BNBH": "BnbHeroes Token",
"BNBLION": "BNB LION",
@@ -1586,6 +1865,7 @@
"BNIX": "BNIX Token",
"BNK": "Bankera",
"BNN": "Banyan Network",
+ "BNOM": "BitNomad",
"BNP": "BenePit",
"BNPL": "BNPL Pay",
"BNR": "BiNeuro",
@@ -1593,7 +1873,9 @@
"BNS": "BNS token",
"BNSAI": "bonsAI Network",
"BNSD": "BNSD Finance",
+ "BNSOL": "Binance Staked SOL",
"BNSOLD": "BNS token ",
+ "BNSV1": "BNS token v1",
"BNSX": "Bitcoin Name Service System",
"BNT": "Bancor Network Token",
"BNTE": "Bountie",
@@ -1602,8 +1884,10 @@
"BNU": "ByteNext",
"BNUSD": "Balanced Dollars",
"BNX": "BinaryX",
+ "BNY": "TaskBunny",
"BOA": "BOSAGORA",
"BOAI": "BOLICAI",
+ "BOAM": "BOOK OF AI MEOW",
"BOARD": "SurfBoard Finance",
"BOAT": "Doubloon",
"BOBA": "Boba Network",
@@ -1613,7 +1897,11 @@
"BOBBYM": "Bobby Moore",
"BOBC": "Bobcoin",
"BOBE": "BOOK OF BILLIONAIRES",
+ "BOBER": "BOBER",
+ "BOBFUN": "BOB",
+ "BOBLS": "Boblles",
"BOBO": "BOBO",
+ "BOBOT": "Bobo The Bear",
"BOBS": "Bob's Repair",
"BOBT": "BOB Token",
"BOBUKI": "Bobuki Neko",
@@ -1621,6 +1909,7 @@
"BOCA": "BookOfPussyCats",
"BOCAC": "BocaChica token",
"BOCAT": "BOCAT",
+ "BOD": "Book of Donald Trump",
"BODA": "Based Yoda",
"BODAV2": "BODA Token",
"BODE": "Book of Derp",
@@ -1630,13 +1919,16 @@
"BODOG": "Book of Doge",
"BODYP": "Body Profile",
"BOE": "Bodhi",
+ "BOF": "Balls of Fate",
"BOG": "Bogged Finance",
"BOGCOIN": "Bogcoin",
+ "BOGD": "Bogdanoff",
"BOGE": "Boge",
"BOGEY": "Bogey",
"BOGGY": "Boggy Coin",
"BOJAK": "Based Wojak",
"BOJI": "BOJI Token",
+ "BOJIV1": "BOJI Token v1",
"BOK": "Blockium",
"BOKI": "BOOK OF KILLER",
"BOKU": "Boryoku Dragonz",
@@ -1645,16 +1937,19 @@
"BOLI": "BolivarCoin",
"BOLT": "Bolt",
"BOLTT": "BolttCoin",
+ "BOM": "Book Of Matt Furie",
"BOMA": "Book of Maga",
"BOMB": "BOMB",
"BOMBC": "BombCoin",
"BOMBM": "Bomb Money",
+ "BOMBO": "BOMBO",
"BOMBS": "Bomb Shelter Inu",
"BOME": "BOOK OF MEME",
"BOME2": "Book of Meme 2.0",
"BOMEDOGE": "BOOK OF DOGE MEMES",
"BOMEOW": "Book of Meow",
"BOMES": "BOOK OF MEMES",
+ "BOMET": "BOME TRUMP",
"BOMK": "BOMK",
"BON": "Bonpay",
"BONA": "Bonafi",
@@ -1663,19 +1958,27 @@
"BONDLY": "Bondly",
"BONDLYV1": "Bondly Finance",
"BONE": "Bone ShibaSwap",
- "BONES": "BonesCoin",
+ "BONES": "Moonshots Farm",
+ "BONESCOIN": "BonesCoin",
+ "BONESV1": "Squirrel Finance",
"BONFIRE": "Bonfire",
"BONG": "BonkWifGlass",
+ "BONGO": "BONGO CAT",
"BONIX": "Blockonix",
"BONK": "Bonk",
+ "BONKBNB": "Bonk BNB",
"BONKCON": "Bonkcon",
+ "BONKEA": "Bonk Earn",
+ "BONKEY": "Bonkey",
"BONKFA": "Bonk of America",
"BONKFORK": "BonkFork",
"BONKGROK": "Bonk Grok",
"BONKH": "BonkHoneyHNTMobileSOL",
"BONKIN": "Bonkinu",
"BONKKONG": "BONK KONG",
+ "BONKONBASE": "Bonk on Base",
"BONKONETH": "Bonk On ETH",
+ "BONKW": "bonkwifhat",
"BONO": "Bonorum Coin",
"BONTE": "Bontecoin",
"BONUS": "BonusBlock",
@@ -1686,15 +1989,23 @@
"BOOFI": "Boo Finance",
"BOOK": "Solbook",
"BOOKIE": "BookieBot",
- "BOOM": "BOOM DAO",
+ "BOOKO": "Book of Pets",
+ "BOOKOF": "BOOK OF NOTHING",
+ "BOOM": "Boomco",
"BOOMCOIN": "Boom Token",
+ "BOOMDAO": "BOOM DAO",
"BOOMER": "Boomer",
"BOONS": "BOONSCoin",
"BOOP": "Boop",
- "BOOST": "Boost",
+ "BOOS": "Boost Trump Campaign",
+ "BOOST": "PodFast",
+ "BOOSTCO": "Boost",
"BOOSTO": "BOOSTO",
"BOOT": "Bostrom",
"BOP": "Boring Protocol",
+ "BOPB": "BIOPOP",
+ "BOPE": "Book of Pepe",
+ "BOPPY": "BOPPY",
"BOR": "BoringDAO",
"BORA": "BORA",
"BORED": "Bored Museum",
@@ -1702,6 +2013,7 @@
"BORING": "BoringDAO",
"BORK": "Bork",
"BORKIE": "Borkie",
+ "BORPA": "Borpa",
"BORUTO": "Boruto Inu",
"BOS": "BOScoin",
"BOSE": "Bitbose",
@@ -1716,6 +2028,7 @@
"BOSU": "Bosu Inu",
"BOT": "Bot Planet",
"BOTC": "BotChain",
+ "BOTIFY": "BOTIFY",
"BOTS": "ArkDAO",
"BOTTO": "Botto",
"BOTX": "BOTXCOIN",
@@ -1724,32 +2037,48 @@
"BOUTS": "BoutsPro",
"BOW": "Archer Swap",
"BOWE": "Book of Whales",
+ "BOWSC": "BowsCoin",
+ "BOWSER": "Bowser",
"BOX": "ContentBox",
"BOXETH": "Cat-in-a-Box Ether",
"BOXT": "BOX Token",
"BOXX": "Blockparty",
"BOXY": "BoxyCoin",
- "BOYS": "CRASHBOYS",
+ "BOYS": "BOYSCLUB (boysclubonbase.com)",
+ "BOYSC": "Boy's club",
"BOYSCLUB": "Matt Furie's Boys Club",
"BOZO": "BOZO",
"BOZOH": "bozo Hybrid",
"BOZY": "Book of Crazy",
"BP": "BunnyPark",
"BPAD": "BlokPad",
+ "BPADA": "Binance-Peg Cardano (Binance Bridge)",
+ "BPAVAX": "Binance-Peg Avalanche (Binance Bridge)",
"BPAY": "BNBPay",
+ "BPBCH": "Binance-Peg Bitcoin Cash (Binance Bridge)",
+ "BPBTT": "Binance-Peg BitTorrent",
"BPD": "Beautiful Princess Disorder",
+ "BPDAI": "Binance-Peg Dai (Binance Bridge)",
+ "BPDOGE": "Binance-Peg DogeZilla (Binance Bridge)",
"BPEPEF": "Baby Pepe Floki",
"BPET": "BPET",
"BPINKY": "BPINKY",
"BPL": "BlockPool",
"BPLC": "BlackPearl Token",
+ "BPLINK": "Binance-Peg Chainlink (Binance Bridge)",
+ "BPLTC": "Binance-Peg Litecoin",
+ "BPMATIC": "Binance-Peg Polygon (Binance Bridge)",
"BPN": "beepnow",
+ "BPNEAR": "Binance-Peg NEAR Protocol",
"BPOKO": "BabyPoko",
"BPRIVA": "Privapp Network",
"BPRO": "BitCloud Pro",
"BPS": "BitcoinPoS",
+ "BPSHIB": "Binance-Peg Shiba Inu (Binance Bridge)",
"BPT": "BlackPool Token",
"BPTC": "Business Platform Tomato Coin",
+ "BPUNI": "Binance-Peg Uniswap Protocol Token (Binance Bridge)",
+ "BPUSDC": "Binance-Peg USD Coin (Binance Bridge)",
"BPX": "Black Phoenix",
"BQ": "Bitqy",
"BQC": "BQCoin",
@@ -1761,11 +2090,12 @@
"BRACE": "Bitci Racing Token",
"BRAIN": "BrainCoin",
"BRAINERS": "Brainers",
+ "BRAINLET": "Brainlet",
"BRAINZ": "Brainz Finance",
"BRAM": "Defibox bRAM",
"BRANA": "Branaverse",
"BRAND": "BrandProtect",
- "BRAT": "BROTHER",
+ "BRAT": "Peak Brat",
"BRATT": "Son of Brett",
"BRAWL": "BitBrawl",
"BRAZ": "Brazio",
@@ -1780,10 +2110,13 @@
"BREE": "CBDAO",
"BREED": "BreederDAO",
"BREPE": "BREPE",
- "BRETT": "Brett",
+ "BRETARDIO": "Bretardio",
+ "BRETT": "Brett Base",
"BRETTA": "Bretta",
- "BRETTBASE": "Brett Base",
- "BRETTETH": "Brett ETH",
+ "BRETTFYI": "Brett",
+ "BRETTGOLD": "Brett Gold",
+ "BRETTONETH": "Brett ETH",
+ "BRETTSUI": "Brett (brettsui.com)",
"BREW": "CafeSwap Token",
"BREWERY": "Brewery Consortium Coin",
"BREWLABS": "Brewlabs",
@@ -1792,7 +2125,8 @@
"BRGX": "Bridge$",
"BRI": "Baroin",
"BRIA": "Briacoin",
- "BRIAN": "Brianwifhat",
+ "BRIAN": "Brian Arm Strong",
+ "BRIANWIF": "Brianwifhat",
"BRIC": "BrightCoin",
"BRICK": "Brickchain FInance",
"BRICKS": "MyBricks",
@@ -1800,6 +2134,7 @@
"BRIGHT": "Bright Token",
"BRIGHTU": "Bright Union",
"BRIK": "BrikBit",
+ "BRIL": "Brilliantcrypto",
"BRISE": "Bitgert",
"BRIT": "BritCoin",
"BRITT": "Britt",
@@ -1813,17 +2148,23 @@
"BRN": "BRN Metaverse",
"BRNK": "Brank",
"BRNX": "Bronix",
- "BRO": "Bitradio",
+ "BRO": "Bro the cat",
"BROCK": "Bitrock",
"BROGG": "Brett's Dog",
+ "BROKE": "Broke Again",
+ "BROKIE": "Brokie",
"BRONZ": "BitBronze",
"BROOT": "BROOT",
+ "BROTHER": "BROTHER",
"BROWN": "BrowniesSwap",
+ "BROZ": "Brozinkerbell",
+ "BRP": "BananaRepublic",
"BRRR": "Burrow",
"BRS": "Broovs Projects",
"BRT": "Bikerush",
"BRTR": "Barter",
"BRTX": "Bertinity",
+ "BRUH": "Bruh",
"BRUNE": "BitRunes",
"BRUSH": "PaintSwap",
"BRUV": "Bruv",
@@ -1839,17 +2180,20 @@
"BSAFU": "BlockSAFU",
"BSATOSHI": "BabySatoshi",
"BSB": "Based Street Bets",
- "BSC": "BowsCoin",
+ "BSC": "BSC Layer",
"BSCAKE": "Bunscake",
"BSCBURN": "BSCBURN",
+ "BSCC": "BSCCAT",
"BSCGIRL": "Binance Smart Chain Girl",
"BSCH": "BitSchool",
"BSCM": "BSC MemePad",
"BSCPAD": "BSCPAD",
"BSCPAY": "BSC PAYMENTS",
"BSCS": "BSC Station",
+ "BSCST": "Starter",
"BSCV": "Bscview",
- "BSE": "BitSerial",
+ "BSDETH": "Based ETH",
+ "BSE": "base season",
"BSEND": "BitSend",
"BSFM": "BABY SAFEMOON",
"BSG": "Baby Squid Game",
@@ -1858,6 +2202,7 @@
"BSHARE": "Bomb Money",
"BSHIB": "Based Shiba Inu",
"BSI": "Bali Social Integrated",
+ "BSK": "BTCSKR",
"BSKT": "BasketCoin",
"BSL": "BankSocial",
"BSOL": "BlazeStake Staked SOL",
@@ -1894,12 +2239,16 @@
"BTC": "Bitcoin",
"BTC2": "Bitcoin 2",
"BTC2XFLI": "BTC 2x Flexible Leverage Index",
+ "BTC70000": "BTC 70000",
"BTCA": "BITCOIN ADDITIONAL",
"BTCAB": "Bitcoin Avalanche Bridged",
+ "BTCACT": "BITCOIN Act",
"BTCAS": "BitcoinAsia",
"BTCAT": "Bitcoin Cat",
"BTCB": "Bitcoin BEP2",
+ "BTCBASE": "Bitcoin on Base",
"BTCBR": "Bitcoin BR",
+ "BTCBRV1": "Bitcoin BR v1",
"BTCC": "Bitcoin Core",
"BTCD": "BitcoinDark",
"BTCDRAGON": "BTC Dragon",
@@ -1916,6 +2265,7 @@
"BTCM": "BTCMoon",
"BTCMT": "Minto",
"BTCN": "BitcoiNote",
+ "BTCNOW": "Blockchain Technology Co.",
"BTCP": "Bitcoin Palladium",
"BTCPAY": "Bitcoin Pay",
"BTCPX": "BTC Proxy",
@@ -1931,7 +2281,9 @@
"BTCZ": "BitcoinZ",
"BTD": "Bitcloud",
"BTDX": "Bitcloud 2.0",
- "BTE": "BTEcoin",
+ "BTE": "Betero",
+ "BTECOIN": "BTEcoin",
+ "BTEV1": "Betero v1",
"BTEX": "BTEX",
"BTF": "Blockchain Traded Fund",
"BTFA": "Banana Task Force Ape",
@@ -1944,12 +2296,14 @@
"BTMG": "Bitcademy Football",
"BTMI": "BitMiles",
"BTMK": "BitMark",
+ "BTMT": "BITmarkets Token",
"BTMXBULL": "3X Long BitMax Token Token",
"BTNT": "BitNautic Token",
"BTNTV2": "BitNautic Token",
"BTNYX": "BitOnyx Token",
"BTO": "Bottos",
"BTOP": "Botopia.Finance",
+ "BTORO": "Bitoro Network",
"BTP": "Bitpaid",
"BTPL": "Bitcoin Planet",
"BTQ": "BitQuark",
@@ -1985,19 +2339,24 @@
"BUB": "BUBCAT",
"BUBBA": "Bubba",
"BUBBLE": "Bubble",
+ "BUBBLES": "BUBBLES",
"BUBO": "Budbo",
"BUBU": "BUBU",
+ "BUBV1": "BUBCAT v1",
"BUC": "Beau Cat",
"BUCK": "Coinbuck",
"BUCKS": "SwagBucks",
"BUCKY": "Bucky",
"BUD": "Buddy",
"BUDDHA": "Buddha",
+ "BUDDY": "BUDDY",
"BUDG": "Bulldogswap",
+ "BUENO": "Bueno",
"BUF": "Buftoad",
"BUFF": "Buffalo Swap",
"BUFFDOGE": "Buff Doge",
"BUFFET": "Worried",
+ "BUFFI": "Bufficorn",
"BUGATTI": "BUGATTI",
"BUGG": "Bugg Inu",
"BUGS": "Bugs Bunny",
@@ -2007,15 +2366,20 @@
"BUILDTEAM": "BuildTeam",
"BUK": "CryptoBuk",
"BUL": "bul",
+ "BULDAK": "Buldak",
"BULEI": "Bulei",
"BULL": "Bullieverse",
"BULLC": "BuySell",
+ "BULLF": "BULL FINANCE",
+ "BULLI": "Bullish On Ethereum",
"BULLINU": "Bull inu",
"BULLION": "BullionFX",
+ "BULLISH": "bullish",
"BULLMOON": "Bull Moon",
"BULLPEPE": "Bullpepe",
"BULLS": "Bull Coin",
"BULLSH": "Bullshit Inu",
+ "BULLY": "Dolos The Bully",
"BULLYINGCAT": "Bullying Cat",
"BULT": "Bullit",
"BUM": "WillyBumBum",
@@ -2025,9 +2389,12 @@
"BUND": "Bund V2.0",
"BUNDL": "Bundl Tools",
"BUNI": "Bunicorn",
+ "BUNN": "Bunni",
"BUNNY": "Pancake Bunny",
"BUNNYINU": "Bunny Inu",
+ "BUNNYM": "BUNNY MEV BOT",
"BUNNYROCKET": "BunnyRocket",
+ "BURG": "Burger",
"BURGER": "Burger Swap",
"BURN": "BurnedFi",
"BURNDOGE": "BurnDoge",
@@ -2042,10 +2409,12 @@
"BUSDC": "BUSD",
"BUSY": "Busy DAO",
"BUT": "BitUP Token",
+ "BUTT": "Buttercat",
"BUX": "BUX",
"BUXCOIN": "Buxcoin",
"BUY": "Burency",
"BUYI": "Buying.com",
+ "BUYT": "Buy the DIP",
"BUZZ": "BuzzCoin",
"BV3A": "Buccaneer V3 Arbitrum",
"BVC": "BeaverCoin",
@@ -2053,7 +2422,8 @@
"BVND": "Binance VND",
"BVO": "BRAVO Pay",
"BVT": "BovineVerse Token",
- "BWB": "Bit World Token",
+ "BWB": "Bitget Wallet Token",
+ "BWEN": "Baby Wen",
"BWF": "Beowulf",
"BWJ": "Baby WOJ",
"BWK": "Bulwark",
@@ -2063,6 +2433,7 @@
"BWS": "BitcoinWSpectrum",
"BWT": "Bittwatt",
"BWT2": "Bitwin 2.0",
+ "BWULL": "Bwull",
"BWX": "Blue Whale",
"BX": "BlockXpress",
"BXA": "Blockchain Exchange Alliance",
@@ -2081,12 +2452,14 @@
"BYAT": "Byat",
"BYC": "ByteCent",
"BYG": "Black Eye Galaxy",
+ "BYT": "ByteAI",
"BYTE": "Byte",
"BYTES": "Neo Tokyo",
"BYTHER": "Bytether ",
"BYTS": "Bytus",
"BYTZ": "BYTZ",
"BZ": "Bit-Z",
+ "BZE": "BeeZee",
"BZENIQ": "Wrapped Zeniq (BNB)",
"BZET": "Bzetcoin",
"BZKY": "Bizkey",
@@ -2097,7 +2470,6 @@
"BZX": "Bitcoin Zero",
"BZZ": "Swarmv",
"BZZONE": "Bzzone",
- "BamitCoin": "BAM",
"C2": "Coin.2",
"C20": "Crypto20",
"C25": "C25 Coin",
@@ -2115,6 +2487,7 @@
"CACHE": "Cache",
"CACHEGOLD": "CACHE Gold",
"CACTUS": "CACTUS",
+ "CADAI": "CADAI",
"CADC": "CAD Coin",
"CADINU": "Canadian Inuit Dog",
"CADN": "Content and AD Network",
@@ -2144,6 +2517,7 @@
"CAMEL": "The Camel",
"CAMLY": "Camly Coin",
"CAMP": "Camp",
+ "CAMT": "CAMELL",
"CAN": "Channels",
"CANCER": "Cancer",
"CAND": "Canary Dollar",
@@ -2176,6 +2550,7 @@
"CARDSWAP": "CardSwap",
"CARE": "Carebit",
"CARES": "CareCoin",
+ "CARL": "Carl",
"CARLO": "Carlo",
"CARO": "Meta Ricaro",
"CAROL": "CAROLToken",
@@ -2185,46 +2560,68 @@
"CART": "CryptoArt.Ai",
"CARTAXI": "CarTaxi",
"CARTERCOIN": "CarterCoin",
+ "CARV": "CARV",
"CAS": "Cashaa",
"CASH": "CashCoin",
+ "CASHLY": "Cashly",
"CASHT": "Cash Tech",
"CASINU": "Casinu Inu",
"CASIO": "CasinoXMetaverse",
"CASPER": "Casper DeFi",
"CAST": "Castello Coin",
"CASTLE": "bitCastle",
- "CAT": "Cat Token",
+ "CAT": "Simon's Cat",
"CATA": "CATAMOTO",
+ "CATABSC": "CATA BSC",
"CATAI": "Catgirl AI",
+ "CATALORIAN": "CATALORIAN",
+ "CATANA": "Catana",
"CATBA": "CATBA INU",
+ "CATBAL": "Catbal",
"CATBOY": "Catboy",
"CATC": "Catcoin",
"CATCEO": "CATCEO",
"CATCH": "SpaceCatch",
- "CATCOIN": "CatCoin Cash",
+ "CATCO": "CatCoin",
+ "CATCOIN": "CatCoin",
"CATCOINETH": "Catcoin",
+ "CATCOINV2": "CatCoin Cash",
+ "CATDOG": "Cat-Dog",
"CATDOGE": "CAT DOGE",
- "CATE": "CateCoin",
+ "CATEC": "Cate Coin",
+ "CATECOIN": "CateCoin",
"CATELON": "CatElonMars",
"CATEX": "CATEX",
"CATFISH": "Catfish",
+ "CATG": "Crypto Agent Trading",
"CATGAME": "Cookie Cat Game",
"CATGIRL": "Catgirl",
+ "CATGOKU": "Catgoku",
"CATGPT": "CatGPT",
"CATHAT": "catwifhat",
"CATHEON": "Catheon Gaming",
"CATHERO": "Cat Hero",
+ "CATI": "Catizen",
+ "CATINU": "CAT INU",
"CATKING": "CAT KING",
+ "CATLIFE": "Cat Life",
"CATMAN": "Catman",
"CATME": "ELON’S CAT",
"CATO": "CATO",
"CATPAY": "CATpay",
"CATPEPE": "CAT PEPE",
"CATS": "CatCoin Token",
+ "CATSC": "Catscoin",
"CATSHIRA": "Shira Cat",
+ "CATSO": "Cats Of Sol",
+ "CATSON": "Catson",
+ "CATSV1": "CatCoin Token v1",
+ "CATSY": "CAT SYLVESTER",
"CATT": "Catex",
+ "CATTO": "Cat Token",
"CATVAX": "Catvax",
"CATVILLS": "Catvills Coin",
+ "CATW": "Cat wif Hands",
"CATWARRIOR": "Cat warrior",
"CATWIF": "CatWifHat",
"CATX": "CAT.trade Protocol",
@@ -2241,8 +2638,11 @@
"CBABY": "Cosmo Baby",
"CBANK": "Crypto Bank",
"CBAT": "Compound Basic Attention Token",
+ "CBBTC": "Coinbase Wrapped BTC",
+ "CBBTCBASE": "cbBTC",
"CBC": "Casino Betting Coin",
"CBD": "CBD Crystals",
+ "CBDAI": "Dai (Cronos Bridge)",
"CBDC": "CannaBCoin",
"CBDG": "CBD Global",
"CBE": "The Chain of Business Entertainment",
@@ -2252,10 +2652,12 @@
"CBG": "Chainbing",
"CBIXP": "Cubiex Power",
"CBK": "Cobak Token",
+ "CBL": "Credbull",
"CBM": "CryptoBonusMiles",
"CBNT": "Create Breaking News Together",
"CBOT": "C-BOT",
- "CBP": "ComBox",
+ "CBP": "CashBackPro",
+ "CBPAY": "COINBAR PAY",
"CBRL": "Crypto BRL",
"CBRT": "Cybereits Token",
"CBS": "Cerberus",
@@ -2277,6 +2679,7 @@
"CCC": "CCCoin",
"CCCX": "Clipper Coin Capital",
"CCD": "Concordium",
+ "CCDS": "CCDS INTERNATIONAL",
"CCE": "CloudCoin",
"CCGDS": "CCGDS",
"CCH": "Coinchase",
@@ -2311,6 +2714,7 @@
"CDX": "CDX Network",
"CDY": "Bitcoin Candy",
"CDragon": "Clumsy Dragon",
+ "CEC": "Counterfire Economic Coin",
"CEDEX": "CEDEX Coin",
"CEEK": "CEEK Smart VR Token",
"CEFS": "CryptopiaFeeShares",
@@ -2326,12 +2730,17 @@
"CEM": "Crypto Emergency",
"CEN": "Coinsuper Ecosystem Network",
"CENNZ": "Centrality Token",
+ "CENS": "Censored Ai",
"CENT": "CENTERCOIN",
+ "CENTA": "Centaurify",
"CENTRA": "Centra",
+ "CENTS": "Centience",
"CENX": "Centcex",
"CEODOGE": "CEO DOGE",
+ "CERBER": "CERBEROGE",
"CERE": "Cere Network",
"CERES": "Ceres",
+ "CES": "swap.coffee",
"CESC": "Crypto Escudo",
"CET": "CoinEx Token",
"CETH": "Compound Ethereum",
@@ -2348,6 +2757,7 @@
"CFL365": "CFL365 Finance",
"CFLASH": "Flash",
"CFLO": "Chain Flowers",
+ "CFN": "Cockfight Network",
"CFT": "CryptoForecast",
"CFTY": "Crafty",
"CFX": "Conflux Network",
@@ -2355,11 +2765,13 @@
"CFXT": "Chainflix",
"CFun": "CFun",
"CGA": "Cryptographic Anomaly",
+ "CGAR": "CryptoGuards",
"CGG": "Chain Guardians",
"CGL": "Crypto Gladiator Shards",
"CGLD": "Celo Gold",
"CGO": "Comtech Gold",
"CGPT": "ChainGPT",
+ "CGPU": "CloudGPU",
"CGS": "Crypto Gladiator Shards",
"CGT": "Coin Gabbar Token",
"CGU": "Crypto Gaming United",
@@ -2369,6 +2781,7 @@
"CHAD": "Chad Coin",
"CHADCAT": "CHAD CAT",
"CHADS": "CHADS VC",
+ "CHAI": "Chroma AI",
"CHAIN": "Chain Games",
"CHAINCADE": "ChainCade",
"CHAL": "Chalice Finance",
@@ -2377,8 +2790,10 @@
"CHAMPZ": "Champz",
"CHAN": "ChanCoin",
"CHANCE": "Ante Casino",
+ "CHANG": "Chang",
"CHANGE": "ChangeX",
"CHAO": "23 Skidoo",
+ "CHAOS": "chaos and disorder",
"CHAPZ": "Chappyz",
"CHARGED": "GoCharge Tech",
"CHARIZARD": "Charizard Inu",
@@ -2389,7 +2804,10 @@
"CHARTIQ": "ChartIQ",
"CHASH": "CleverHash",
"CHAT": "Solchat",
+ "CHATAI": "ChatAI Token",
"CHATGPT": "AI Dragon",
+ "CHATOSHI": "chAtoshI",
+ "CHATTY": "ChatGPT's Mascot",
"CHB": "COINHUB TOKEN",
"CHBR": "CryptoHub",
"CHC": "ChainCoin",
@@ -2401,11 +2819,16 @@
"CHEDDA": "Chedda",
"CHEEKS": "CHEEKS",
"CHEEL": "Cheelee",
- "CHEEMS": "Cheems",
+ "CHEEMS": "Cheems (cheems.pet)",
+ "CHEEMSCO": "Cheems",
+ "CHEEMSV1": "Cheems (cheems.pet) v1",
"CHEEPEPE": "CHEEPEPE",
"CHEERS": "DICAPRIO CHEERS",
- "CHEESE": "CHEESE",
+ "CHEESE": "Cheese",
+ "CHEESEBALL": "Cheeseball the Wizard",
+ "CHEESECOIN": "Cheesecoin",
"CHEESUS": "Cheesus",
+ "CHEF": "Chefdotfun",
"CHENG": "Chengshi",
"CHEQ": "CHEQD Network",
"CHER": "Cherry Network",
@@ -2413,35 +2836,47 @@
"CHESS": "Tranchess",
"CHESSCOIN": "ChessCoin",
"CHET": "ChetGPT",
+ "CHEW": "CHEWY",
"CHEWY": "Chewy",
"CHEX": "Chintai",
+ "CHEYENNE": "Cheyenne",
"CHFN": "NOKU CHF",
"CHFT": "Crypto Holding",
"CHFU": "Upper Swiss Franc",
"CHFX": "eToro Swiss Franc",
"CHH": "Chihuahua Token",
"CHI": "Chi Gastoken",
+ "CHIB": "Chiba Inu",
"CHICA": "CHICA",
"CHICKS": "SolChicks",
"CHIDO": "Chinese Doge Wow",
+ "CHIE": "Chief Pepe Officer",
"CHIEF": "TheChiefCoin",
+ "CHIEFD": "Chief D.O.G.E",
"CHIHUA": "Chihua Token",
"CHII": "Chiiper Chain",
"CHILD": "ChildCoin",
+ "CHILDAI": "Singularity's Child gonzoai",
"CHILI": "CHILI",
"CHILL": "ChillPill",
+ "CHILLGUY": "Chill Guy",
"CHIM": "Chimera",
+ "CHINAU": "Chinau",
"CHINAZILLA": "ChinaZilla",
"CHINGON": "Mexico Chingon",
"CHINU": "Chubby Inu",
"CHIP": "Chip",
+ "CHIPI": "chipi",
"CHIPPY": "Chippy",
"CHIPS": "CHIPS",
"CHIRP": "Chirp",
+ "CHIRPY": "Chirpy Boy",
+ "CHITAN": "Chitan",
"CHITCAT": "ChitCAT",
"CHIWAWA": "Chiwawa",
"CHK": "Chek",
"CHKN": "Chickencoin",
+ "CHLOE": "Pnut's Sister",
"CHLT": "Chellitcoin",
"CHMB": "Chumbi Valley",
"CHMPZ": "Chimpzee",
@@ -2473,7 +2908,10 @@
"CHUC": "CHUCK",
"CHUCHU": "CHUCHU",
"CHUCK": "Chuck Norris",
- "CHUMP": "Chump Change",
+ "CHUD": "Chudjak",
+ "CHULO": "Papichulo",
+ "CHUMP": "Donald J Chump",
+ "CHUMPC": "Chump Change",
"CHURRO": "CHURRO-The Jupiter Dog",
"CHVF": "Chives Finance",
"CHW": "Chrysalis Coin",
@@ -2484,6 +2922,7 @@
"CIC": "Crazy Internet Coin",
"CICHAIN": "CIChain",
"CIF": "Crypto Improvement Fund",
+ "CIG": "cig",
"CIM": "COINCOME",
"CIN": "CinderCoin",
"CIND": "Cindrum",
@@ -2499,6 +2938,7 @@
"CIRCUS": "Cirque Du Sol",
"CIRRUS": "Cirrus",
"CIRUS": "Cirus",
+ "CIRX": "Circular Protocol",
"CITI": "CITI Fediverse",
"CITY": "Manchester City Fan Token",
"CIV": "Civilization",
@@ -2520,7 +2960,10 @@
"CL": "CoinLancer",
"CLA": "ClaimSwap",
"CLAM": "CLAMS",
+ "CLANKER": "tokenbot",
+ "CLAP": "Clap Cat",
"CLAS": "Classic USDC",
+ "CLASH": "Clashub",
"CLASS": "Class Coin",
"CLAY": "Clay Nation",
"CLB": "Cloudbric",
@@ -2544,6 +2987,7 @@
"CLINT": "Clinton",
"CLIPS": "Clips",
"CLIQ": "DefiCliq",
+ "CLISBNB": "clisBNB",
"CLIST": "Chainlist",
"CLM": "CoinClaim",
"CLMRS": "Crolon Mars",
@@ -2551,11 +2995,14 @@
"CLNX": "Coloniume Network",
"CLNY": "Colony",
"CLO": "Callisto Network",
+ "CLOA": "Cloak",
"CLOAK": "CloakCoin",
+ "CLOKI": "CATLOKI",
"CLORE": "Clore.ai",
- "CLOUD": "Metacloud",
+ "CLOUD": "Cloud",
"CLOUT": "BitClout",
"CLOUTIO": "Clout",
+ "CLOW": "Clown Pepe",
"CLPX": "Chynge.net",
"CLR": "CopperLark",
"CLRTY": "Clarity",
@@ -2564,6 +3011,7 @@
"CLU": "CluCoin",
"CLUB": "ClubCoin",
"CLUD": "CludCoin",
+ "CLUSTR": "Clustr Labs",
"CLV": "Clover Finance",
"CLVA": "Clever DeFi",
"CLVX": "Calvex",
@@ -2576,6 +3024,7 @@
"CMCX": "CORE MultiChain",
"CMDX": "Comdex",
"CMERGE": "CoinMerge",
+ "CMETH": "Mantle Restaked Ether",
"CMFI": "Compendium",
"CMINER": "ChainMiner",
"CMIT": "CMITCOIN",
@@ -2627,13 +3076,20 @@
"CNYX": "eToro Chinese Yuan",
"CO": "Corite",
"CO2": "CO2 Token",
+ "COAI": "CodeMong Ai",
"COAL": "BitCoal",
"COB": "Cobinhood",
"COBE": "Castle of Blackwater",
+ "COBY": "Coby",
"COC": "Coin of the champions",
+ "COCAINE": "THE GOOD STUFF",
"COCK": "Shibacock",
- "COCO": "0xCoco",
+ "COCO": "COCO COIN",
+ "COCONUT": "Coconut",
+ "COD": "Chief of Deswamp",
+ "CODA": "CODA",
"CODAI": "CODAI",
+ "CODE": "Code Token",
"CODEG": "CodeGenie",
"CODEO": "Codeo Token",
"CODEX": "CODEX Finance",
@@ -2641,6 +3097,7 @@
"CODY": "Coindy",
"COE": "CoEval",
"COFEEE": "COFEEE",
+ "COFFEE": "COFFEE",
"COFFEECOIN": "CoffeeCoin",
"COFI": "CoinFi",
"COFIX": "CoFIX",
@@ -2650,15 +3107,19 @@
"COGI": "COGI",
"COGS": "Cogmento",
"COI": "Coinnec",
+ "COINB": "Coinbidex",
"COINBT": "CoinBot",
"COINDEFI": "Coin",
"COING": "Coingrid",
"COINH": "Coinhound",
"COINLION": "CoinLion",
+ "COINM": "CoinMarketPrime",
+ "COINONAT": "Coinonat",
"COINSCOPE": "Coinscope",
"COINSL": "CoinsLoot",
"COINVEST": "Coinvest",
"COINYE": "Coinye West",
+ "COJ": "Cojam",
"COK": "Cat Own Kimono",
"COKE": "Cocaine Cowboy Shards",
"COL": "Clash of Lilliput",
@@ -2666,8 +3127,10 @@
"COLL": "Collateral Pay",
"COLLAR": "PolyPup Finance",
"COLLE": "Collective Care",
+ "COLLEA": "Colle AI",
"COLLECT": "CoinCollect",
"COLLG": "Collateral Pay Governance",
+ "COLON": "Colon",
"COLR": "colR Coin",
"COLT": "Collateral Network",
"COLX": "ColossusCoinXT",
@@ -2675,12 +3138,14 @@
"COMAI": "Commune AI",
"COMB": "Combo",
"COMBO": "COMBO",
+ "COMBOX": "ComBox",
+ "COMC": "ComCrica Token",
"COME": "Community of Meme",
"COMEW": "Coin In Meme World",
"COMFI": "CompliFi",
"COMM": "Community Coin",
"COMMUNITYCOIN": "Community Coin",
- "COMP": "Compound Governance Token",
+ "COMP": "Compound",
"COMPCOIN": "Compcoin",
"COMPD": "Compound Coin",
"COMPU": "Compute Network",
@@ -2696,15 +3161,21 @@
"CONK": "ShibaPoconk",
"CONS": "ConSpiracy Coin",
"CONSENTIUM": "Consentium",
+ "CONTROL": "Control Token",
"CONV": "Convergence",
+ "CONVO": "Prefrontal Cortex Convo Agent by Virtuals",
"CONX": "Connex",
+ "COO": "Cool Cats MILK",
"COOCHIE": "Cucci",
"COOHA": "CoolHash",
"COOK": "Cook",
+ "COOKIE": "Cookie",
"COOL": "CoolCoin",
"COOP": "Coop Network",
+ "COPA": "COCO PARK",
"COPE": "Cope",
"COPI": "Cornucopias",
+ "COPIO": "Copiosa Coin",
"COPIUM": "Copium",
"COPS": "Cops Finance",
"COPYCAT": "Copycat Finance",
@@ -2712,8 +3183,10 @@
"COR": "Coreto",
"CORAL": "CoralPay",
"CORE": "Core",
+ "COREC": "CoreConnect",
"COREDAO": "coreDAO",
"COREG": "Core Group Asset",
+ "COREK": "Core Keeper",
"COREUM": "Coreum",
"CORGI": "Corgi Inu",
"CORGIAI": "CorgiAI",
@@ -2721,12 +3194,14 @@
"CORION": "Corion",
"CORN": "CORN",
"CORNELLA": "CORNELLA",
+ "CORSI": "Cane Corso",
"CORX": "CorionX",
"COS": "Contentos",
"COSHI": "CoShi Inu",
"COSM": "CosmoChain",
"COSMI": "Cosmic FOMO",
"COSMIC": "CosmicSwap",
+ "COSMICN": "Cosmic Network",
"COSP": "Cosplay Token",
"COSS": "COS",
"COST": "Costco Hot Dog",
@@ -2780,6 +3255,7 @@
"CPRX": "Crypto Perx",
"CPS": "Cryptostone",
"CPT": "Cryptaur",
+ "CPTN": "Captain Max",
"CPU": "CPUcoin",
"CPX": "Apex Token",
"CPY": "COPYTRACK",
@@ -2794,12 +3270,16 @@
"CRADLE": "Cradle of Sins",
"CRAFT": "TaleCraft",
"CRAFTCOIN": "Craftcoin",
+ "CRAI": "Cryptify AI",
"CRAIG": "CraigsCoin",
"CRAMER": "Cramer Coin",
"CRANEPAY": "Cranepay",
"CRASH": "Solana Crash",
+ "CRASHBOYS": "CRASHBOYS",
"CRAVE": "CraveCoin",
"CRAYRABBIT": "CrazyRabbit",
+ "CRAZ": "CRAZY FLOKI",
+ "CRAZYB": "Crazy Bunny",
"CRAZYBONK": "CRAZY BONK",
"CRAZYBUNNY": "Crazy Bunny",
"CRAZYCAT": "CRAZY CAT",
@@ -2807,6 +3287,7 @@
"CRAZYDRAGON": "CRAZY DRAGON",
"CRAZYMUSK": "CRAZY MUSK",
"CRAZYPEPE": "CrazyPepe",
+ "CRAZYT": "CRAZY TRUMP",
"CRAZYTIGER": "CRAZY TIGER",
"CRB": "Creditbit",
"CRBN": "Carbon",
@@ -2846,10 +3327,14 @@
"CRGPT": "CryptoGPT",
"CRH": "Crypto Hunters Coin",
"CRHT": "CryptHub",
+ "CRI": "Criptodólar",
"CRI3X": "CRI3X",
"CRICKETS": "Kermit",
"CRIME": "Crime Gold",
"CRIMINGO": "Criminal Flamingo",
+ "CRIPPL": "Wheelchair Cat",
+ "CRIS": "CristianoRonaldoSpeedSmurf7Siu",
+ "CRISPR": "CRISPR",
"CRK": "Croking",
"CRL": "Cryptelo Coin",
"CRM": "Cream",
@@ -2871,6 +3356,7 @@
"CROWD": "CrowdCoin",
"CROWDWIZ": "Crowdwiz",
"CROWN": "Crown by Third Time Games",
+ "CROWWITH": "crow with knife",
"CROX": "CroxSwap",
"CRP": "Crypton",
"CRPS": "CryptoPennies",
@@ -2878,6 +3364,7 @@
"CRS": "CRYSTALS",
"CRSP": "CryptoSpots",
"CRT": "Carr.Finance",
+ "CRTAI": "CRT AI Network",
"CRTB": "Coritiba F.C. Fan Token",
"CRTM": "Cryptum",
"CRTS": "Cratos",
@@ -2887,6 +3374,7 @@
"CRUMP": "Crypto Trump",
"CRUX": "CryptoMines Reborn",
"CRV": "Curve DAO Token",
+ "CRVE": "Curve DAO Token (Avalanche Bridge)",
"CRVUSD": "crvUSD",
"CRVY": "Curve Inu",
"CRW": "Crown Coin",
@@ -2898,12 +3386,26 @@
"CRYO": "CryoDAO",
"CRYP": "CrypticCoin",
"CRYPT": "CryptCoin",
+ "CRYPTER": "Crypteriumcoin",
+ "CRYPTOAI": "CryptoAI",
+ "CRYPTOB": "Crypto Burger",
+ "CRYPTOBEAST": "CryptoBeast",
+ "CRYPTOBL": "CryptoBlades Kingdoms",
"CRYPTOBULLION": "CryptoBullion",
"CRYPTOE": "Cryptoenter",
+ "CRYPTOEM": "Crypto Emperor Trump",
+ "CRYPTOF": "CryptoFarmers",
+ "CRYPTOH": "CryptoHunterTrading",
+ "CRYPTOJ": "Crypto Journey",
"CRYPTON": "CRYPTON",
"CRYPTONITE": "Cryptonite",
+ "CRYPTOOFFICIAL": "Crypto",
+ "CRYPTOPAL": "Pal",
"CRYPTOPRO": "CryptoProfile",
+ "CRYPTOR": "CRYPTORG",
+ "CRYPTOS": "CryptoSoul",
"CRYPTOSDG": "Crypto SDG",
+ "CRYPTOT": "Crypto Trump",
"CRYPTOU": "CryptoUnity",
"CRYSTAL": "Crystal",
"CRYSTALCLEAR": "Crystal Clear Token",
@@ -2915,6 +3417,7 @@
"CSC": "CasinoCoin",
"CSEN": "Sentient Coin",
"CSH": "CashOut",
+ "CSI": "CSI888",
"CSIX": "Carbon Browser",
"CSM": "Crust Shadow",
"CSMIC": "Cosmic",
@@ -2931,12 +3434,14 @@
"CSTL": "Castle",
"CSTR": "CoreStarter",
"CSUSHI": "cSUSHI",
+ "CSW": "Crosswalk",
"CSWAP": "ChainSwap",
"CSX": "Coinstox",
"CT": "CryptoTwitter",
"CTA": "Cross The Ages",
"CTAG": "CTAGtoken",
"CTASK": "CryptoTask",
+ "CTB": "Content Bitcoin",
"CTC": "Creditcoin",
"CTCN": "Contracoin",
"CTE": "Crypto Tron",
@@ -2951,12 +3456,13 @@
"CTLS": "Chaintools",
"CTLX": "Cash Telex",
"CTN": "Continuum Finance",
- "CTO": "Crypto",
+ "CTO": "BaseCTO",
"CTOK": "Codyfight",
"CTP": "Ctomorrow Platform",
"CTPL": "Cultiplan",
"CTPT": "Contents Protocol",
"CTR": "Creator Platform",
+ "CTRL": "Ctrl Wallet",
"CTRL2XY": "Control2XY",
"CTRT": "Cryptrust",
"CTS": "Citrus",
@@ -2979,7 +3485,9 @@
"CUEX": "Cuex",
"CUFF": "Jail Cat",
"CULO": "CULO",
+ "CULOETH": "CULO",
"CULT": "Cult DAO",
+ "CULTUR": "Cultur",
"CUM": "Cumbackbears",
"CUMINU": "CumInu",
"CUMMIES": "CumRocket",
@@ -2988,6 +3496,7 @@
"CURE": "Curecoin",
"CURI": "Curium",
"CURIO": "Curio Governance",
+ "CURLY": "Curly",
"CURR": "Curry",
"CURRY": "CurrySwap",
"CUSD": "Carbon",
@@ -2997,6 +3506,7 @@
"CUST": "Custody Token",
"CUT": "CUTcoin",
"CUTE": "Blockchain Cuties Universe",
+ "CUUT": "CUTTLEFISHY",
"CUZ": "Cool Cousin",
"CV": "CarVertical",
"CVA": "Crypto Village Accelerator",
@@ -3046,11 +3556,13 @@
"CXO": "CargoX",
"CXP": "Caixa Pay",
"CXPAD": "CoinxPad",
- "CXT": "Coinonat",
+ "CXT": "Covalent X Token",
"CY97": "Cyclops97",
"CYB": "CYBERTRUCK",
"CYBA": "CYBRIA",
+ "CYBE": "Cyberlete",
"CYBER": "CyberConnect",
+ "CYBERA": "Cyber Arena",
"CYBERC": "CyberCoin",
"CYBERD": "Cyber Doge",
"CYBERTRUCK": "Cyber Truck",
@@ -3065,6 +3577,7 @@
"CYCLUB": "Cyclub",
"CYCON": "CONUN",
"CYDER": "Cyder Coin",
+ "CYDX": "CyberDEX",
"CYFI": "cYFI",
"CYG": "Cygnus",
"CYL": "Crystal Token",
@@ -3073,13 +3586,16 @@
"CYOP": "CyOp Protocol",
"CYP": "CypherPunkCoin",
"CYPEPE": "CyPepe",
+ "CYPHER": "CYPHER•GENESIS (Runes)",
"CYRS": "Cyrus Token",
"CYRUS": "Cyrus Exchange",
"CYS": "BlooCYS",
"CYT": "Cryptokenz",
+ "CZ": "CHANGPENG ZHAO (changpengzhao.club)",
"CZC": "Crazy Coin",
"CZF": "CZodiac Farming Token",
"CZGOAT": "CZ THE GOAT",
+ "CZKING": "CZKING",
"CZOL": "Czolana",
"CZR": "CanonChain",
"CZRX": "Compound 0x",
@@ -3094,6 +3610,7 @@
"D4RK": "DarkPayCoin",
"DAAPL": "Apple Tokenized Stock Defichain",
"DAB": "DABANKING",
+ "DABCAT": "Dabcat",
"DAC": "Davinci Coin",
"DACASH": "DACash",
"DACAT": "daCat",
@@ -3106,32 +3623,41 @@
"DAD": "DAD",
"DADA": "DADA",
"DADDY": "Daddy Tate",
+ "DADDYCHILL": "Daddy Chill",
"DADDYDOGE": "Daddy Doge",
"DADI": "Edge",
+ "DAETA": "DÆTA",
"DAF": "DaFIN",
"DAFI": "Dafi Protocol",
"DAFT": "DaftCoin",
"DAG": "Constellation",
"DAGO": "Dago Mining",
+ "DAGS": "Dagcoin",
"DAGT": "Digital Asset Guarantee Token",
"DAI": "Dai",
+ "DAIE": "Dai (Avalanche Bridge)",
"DAILY": "Coindaily",
"DAILYS": "DailySwap Token",
"DAIMO": "Diamond Token",
"DAIN": "Dain Token",
"DAIQ": "Daiquilibrium",
"DAISY": "Daisy Launch Pad",
+ "DAK": "dak",
"DAL": "DAOLaunch",
"DALI": "Dalichain",
+ "DALMA": "Dalma Inu",
"DAM": "Datamine",
"DAMEX": "DAMEX",
+ "DAMN": "Sol Killer",
"DAMO": "Coinzen",
"DAMOON": "Damoon Coin",
"DAN": "Daneel",
"DANA": "Ardana",
"DANG": "Guangdang",
"DANGEL": "dAngel Fund",
+ "DANJ": "Danjuan Cat",
"DANK": "DarkKush",
+ "DANNY": "Degen Danny",
"DAO": "DAO Maker",
"DAO1": "DAO1",
"DAOACT": "ACT",
@@ -3147,6 +3673,7 @@
"DAPS": "DAPS Coin",
"DAR": "Mines of Dalarnia",
"DARA": "Immutable",
+ "DARAM": "Daram",
"DARB": "Darb Token",
"DARC": "Konstellation",
"DARCRUS": "Darcrus",
@@ -3156,6 +3683,8 @@
"DARIK": "Darik",
"DARK": "Dark",
"DARKEN": "Dark Energy Crystals",
+ "DARKMAGACOIN": "DARK MAGA",
+ "DARKT": "Dark Trump",
"DART": "dART Insurance",
"DARX": "Bitdaric",
"DAS": "DAS",
@@ -3163,14 +3692,18 @@
"DASH": "Dash",
"DASHD": "Dash Diamond",
"DASHG": "Dash Green",
+ "DASIAv": "DASIA",
"DAT": "Datum",
"DATA": "Streamr",
+ "DATAO": "Data Ownership Protocol",
"DATAWALLET": "DataWallet",
+ "DATOM": "Drop Staked ATOM",
"DATP": "Decentralized Asset Trading Platform",
"DATX": "DATx",
"DAUMEN": "Daumenfrosch",
"DAV": "DAV",
"DAVE": "DAVE",
+ "DAVID": "David",
"DAVINCI": "Davincigraph",
"DAVIS": "Davis Cup Fan Token",
"DAVP": "Davion",
@@ -3196,7 +3729,7 @@
"DBL": "Doubloon",
"DBOE": "DBOE",
"DBOX": "DefiBox",
- "DBR": "Düber",
+ "DBR": "deBridge",
"DBTC": "DebitCoin",
"DBTN": "Universa Native token",
"DBUND": "DarkBundles",
@@ -3213,6 +3746,11 @@
"DCB": "Decubate",
"DCC": "Distributed Credit Chain",
"DCCT": "DocuChain",
+ "DCD": "DecideAI",
+ "DCE": "Decentra Ecosystem",
+ "DCF": "Decentralized Finance",
+ "DCHEFSOL": "Degen Chef",
+ "DCHEWY": "Drop Chewy",
"DCHF": "DeFi Franc",
"DCI": "Decentralized Cloud Infrastructure",
"DCIP": "Decentralized Community Investment Protocol",
@@ -3234,15 +3772,18 @@
"DD": "DuckDAO",
"DDAM": "DDAM",
"DDAO": "DDAO Hunters",
+ "DDBAM": "Didi Bam Bam",
"DDD": "Scry.info",
"DDDD": "People's Punk",
"DDF": "Digital Developers Fund",
"DDIM": "DuckDaoDime",
"DDK": "DDKoin",
"DDL": "Donocle",
+ "DDMT": "Dongdaemun Token",
"DDN": "Den Domains",
"DDOS": "disBalancer",
"DDR": "Digi Dinar",
+ "DDRO": "D-Drops",
"DDRST": "DigiDinar StableToken",
"DDRT": "DigiDinar Token",
"DDS": "DDS.Store",
@@ -3259,14 +3800,20 @@
"DECI": "Maximus DECI",
"DECL": "Decimal token",
"DECODE": "Decode Coin",
+ "DEDA": "DedaCoin",
"DEDE": "Dede",
+ "DEDI": "Dedium",
+ "DEDPRZ": "DEDPRZ",
+ "DEEBO": "Deebo the Bear",
"DEED": "Deed (Ordinals)",
"DEEM": "iShares MSCI Emerging Markets ETF Defichain",
- "DEEP": "DeepCloud AI",
+ "DEEP": "DeepBook Protocol",
+ "DEEPCLOUD": "DeepCloud AI",
"DEEPG": "Deep Gold",
"DEER": "ToxicDeer Finance",
"DEEX": "DEEX",
"DEEZ": "DEEZ NUTS",
+ "DEFAI": "DeFAI",
"DEFC": "Defi Coin",
"DEFEND": "Blockdefend AI",
"DEFI": "DeFi",
@@ -3287,19 +3834,24 @@
"DEFY": "DEFY",
"DEG": "Degis",
"DEGA": "Dega",
+ "DEGATE": "DeGate",
"DEGEN": "Degen",
+ "DEGENAI": "Degen Spartan AI",
"DEGENR": "DegenReborn",
"DEGO": "Dego Finance",
+ "DEGOD": "degod",
"DEGOV": "Degov",
"DEGOV1": "Dego Finance v1",
"DEHUB": "DeHub",
"DEI": "Deimos",
"DEK": "DekBox",
"DEL": "Decimal",
+ "DELAY": "DegenLayer",
"DELCHAIN": "DelChain",
"DELFI": "DeltaFi",
"DELI": "NFTDeli",
"DELIGHTPAY": "DelightPay",
+ "DELON": "Dark Elon",
"DELOT": "DELOT.IO",
"DELTA": "Delta Financial",
"DELTAC": "DeltaChain",
@@ -3313,31 +3865,41 @@
"DEOD": "Decentrawood",
"DEOR": "Decentralized Oracle",
"DEP": "DEAPCOIN",
+ "DEPA": "Department Of Government Efficiency",
+ "DEPINU": "Depression Inu",
"DEPO": "Depo",
"DEPTH": "Depth Token",
"DEQ": "Dequant",
+ "DER": "Deri Trade",
"DERC": "DeRace",
"DERI": "Deri Protocol",
"DERO": "Dero",
"DERP": "Derp",
"DES": "DeSpace Protocol",
+ "DESCI": "DeSci Meme",
"DESI": "Desico",
"DESO": "Decentralized Social",
"DESTINY": "Destiny",
"DESU": "Dexsport",
+ "DESY": "Desy Duk",
"DETENSOR": "DeTensor",
"DETF": "Decentralized ETF",
"DETH": "DarkEther",
+ "DETO": "Delta Exchange",
"DEUR": "DigiEuro",
"DEUS": "DEUS Finance",
+ "DEUSD": "Elixir deUSD",
"DEV": "Deviant Coin",
"DEVCOIN": "DevCoin",
+ "DEVE": "Develocity Finance",
+ "DEVI": "DEVITA",
"DEVO": "DeVolution",
"DEVT": "DeHorizon",
"DEVVE": "Devve",
"DEVX": "Developeo",
"DEX": "DEX",
"DEXA": "DEXA COIN",
+ "DEXC": "DexCoyote Legends",
"DEXE": "DeXe",
"DEXG": "Dextoken Governance",
"DEXIO": "Dexioprotocol",
@@ -3395,7 +3957,9 @@
"DGORE": "DogeGoreCoin",
"DGP": "DGPayment",
"DGPT": "DigiPulse",
+ "DGTA": "Digitra.com Token",
"DGTX": "Digitex Token",
+ "DGV1": "Decentral Games v1",
"DGVC": "DegenVC",
"DGX": "Digix Gold token",
"DHLT": "DeHealth",
@@ -3407,10 +3971,12 @@
"DHV": "DeHive",
"DHX": "DataHighway",
"DIA": "DIA",
+ "DIAB": "Diablo IV Solana",
"DIABLO": "Diablo IV",
"DIAM": "Diamond",
"DIAMND": "Projekt Diamond",
"DIAMOND": "Diamond Coin",
+ "DIAMONDINU": "Diamond",
"DIBBLE": "Dibbles",
"DIBC": "DIBCOIN",
"DIC": "Daikicoin",
@@ -3420,6 +3986,7 @@
"DICK": "adDICKted",
"DICKCOIN": "DickCoin",
"DID": "Didcoin",
+ "DIDDY": "DIDDY",
"DIDID": "Didi Duck",
"DIE": "Die Protocol",
"DIEM": "Facebook Diem",
@@ -3434,9 +4001,13 @@
"DIGI": "Digiverse",
"DIGIC": "DigiCube",
"DIGIF": "DigiFel",
+ "DIGIMON": "Digimon",
+ "DIGIT": "Digital Asset Rights Token",
"DIGITAL": "Digital Reserve Currency",
+ "DIGITS": "Digits DAO",
"DIGNITY": "Dignity",
"DIGS": "Diggits",
+ "DIK": "DikDok",
"DIKO": "Arkadiko",
"DILI": "D Community",
"DILIGENT": "Diligent Pepe",
@@ -3445,15 +4016,18 @@
"DIME": "DimeCoin",
"DIMO": "DIMO",
"DIN": "Dinero",
- "DINERO": "Dinerobet",
+ "DINERO": "Dinero",
+ "DINEROBET": "Dinerobet",
"DINGER": "Dinger Token",
"DINGO": "Dingocoin",
"DINO": "DinoSwap",
+ "DINOS": "Dinosaur Inu",
"DINT": "DinarTether",
"DINU": "Dogey-Inu",
"DINW": "Dinowars",
"DIO": "Decimated",
"DIONE": "Dione",
+ "DIONEV1": "Dione v1",
"DIP": "Etherisc",
"DIPA": "Doge Ipa",
"DIRTY": "Dirty Street Cats",
@@ -3461,6 +4035,7 @@
"DISCOVERY": "DiscoveryIoT",
"DISK": "Dark Lisk",
"DISPEPE": "Disabled Pepe",
+ "DISTR": "Distributed Autonomous Organization",
"DIT": "Ditcoin",
"DITH": "Dither AI",
"DIVA": "DIVA Protocol",
@@ -3471,6 +4046,7 @@
"DIW": "DIWtoken",
"DIYAR": "Diyarbekirspor Token",
"DJED": "Djed",
+ "DJI": "Doge Jones Industrial Average",
"DJT": "Save America",
"DK": "Dominant Kong",
"DKA": "dKargo",
@@ -3479,6 +4055,7 @@
"DKEY": "DKEY Bank",
"DKKT": "DKK Token",
"DKNIGHT": "Dark Knight",
+ "DKP": "Dragginz",
"DKS": "DarkShield",
"DKT": "Duelist King",
"DKUMA": "KumaDex Token",
@@ -3486,6 +4063,7 @@
"DLANCE": "DeeLance",
"DLB": "DiemLibre",
"DLC": "Diamond Launch",
+ "DLCBTC": "DLC.Link",
"DLISK": "Dlisk",
"DLLR": "Sovryn Dollar",
"DLO": "Delio",
@@ -3500,11 +4078,13 @@
"DLY": "Daily Finance",
"DLYCOP": "Daily COP",
"DMA": "Dragoma",
+ "DMAGA": "Dark MAGA",
"DMAIL": "DMAIL Network",
"DMAR": "DMarket",
"DMC": "Dream21",
"DMCC": "DiscoverFeed",
"DMCH": "DARMA Cash",
+ "DMCK": "Diamond Castle",
"DMD": "DMD",
"DMG": "DMM: Governance",
"DMGBULL": "3X Long DMM Governance Token",
@@ -3538,11 +4118,15 @@
"DNXC": "DinoX",
"DNY": "Dynasty Coin",
"DNZ": "Denizlispor Fan Token",
+ "DOAI": "DOJO Protocol",
"DOBBY": "Dobby",
"DOBEN": "dark boden",
"DOBO": "DogeBonk",
+ "DOBUY": "Just do buy",
"DOC": "Dochain",
+ "DOCAINEURON": "Doc.ai Neuron",
"DOCC": "Doc Coin",
+ "DOCCOM": "DOC.COM",
"DOCK": "Dock.io",
"DOCSWAP": "Dex on Crypto",
"DOCT": "DocTailor",
@@ -3550,6 +4134,7 @@
"DOD100": "Day of Defeat Mini 100x",
"DODI": "DoubleDice",
"DODO": "DODO",
+ "DODOT": "Dodo the Black Swan",
"DOE": "Dogs Of Elon",
"DOFI": "Doge Floki Coin",
"DOG": " DOG•GO•TO•THE•MOON",
@@ -3558,15 +4143,19 @@
"DOGAI": "Dogai",
"DOGALD": "dogald trump",
"DOGB": "DogeBoy",
+ "DOGBA": "DOGBA INU",
"DOGBOSS": "Dog Boss",
"DOGC": "Dogeclub",
+ "DOGCOIN": "Dogcoin",
"DOGDEFI": "DogDeFiCoin",
"DOGE": "Dogecoin",
"DOGE1SAT": "DOGE-1SATELLITE",
+ "DOGE2": "Dogecoin 2.0",
"DOGE20": "Doge 2.0",
"DOGEB": "DogeBonk",
"DOGEBNB": "DogeBNB",
"DOGEC": "DogeCash",
+ "DOGECAST": "Dogecast",
"DOGECEO": "Doge CEO",
"DOGECO": "Dogecolony",
"DOGECOIN": "Buff Doge Coin",
@@ -3575,17 +4164,24 @@
"DOGED": "DogeCoinDark",
"DOGEDAO": "DogeDao",
"DOGEDASH": "Doge Dash",
+ "DOGEFA": "DOGEFATHER",
+ "DOGEFATHER": "Dogefather",
"DOGEFORK": "DogeFork",
"DOGEGF": "DogeGF",
"DOGEGROK": "Doge Grok",
"DOGEGROKAI": "Doge Of Grok AI",
+ "DOGEI": "Dogei",
+ "DOGEIN": "Doge In Glasses",
"DOGEKING": "DogeKing",
"DOGELEGION": "DOGE LEGION",
+ "DOGEM": "Doge Matrix",
"DOGEMETA": "Dogemetaverse",
"DOGEMOB": "DOGEMOB",
"DOGENFT": "The Doge NFT",
"DOGEP": "Doge Protocol",
"DOGEPAY": "Doge Payment",
+ "DOGEPEPE": "Doge Pepe",
+ "DOGEPR": "DOGE PRESIDENT",
"DOGER": "Robotic Doge",
"DOGERA": "Dogera",
"DOGES": "Dogeswap",
@@ -3595,46 +4191,62 @@
"DOGEWHALE": "Dogewhale",
"DOGEX": "DogeHouse Capital",
"DOGEY": "Dogey",
+ "DOGEYIELD": "DogeYield",
"DOGEZILLA": "DogeZilla",
+ "DOGEZILLAV1": "DogeZilla v1",
+ "DOGG": "Doggo",
"DOGGS": "Doggensnout",
"DOGGY": "Doggy",
+ "DOGGYCOIN": "DOGGY",
"DOGH": "a dog in a hoodie",
"DOGI": "dogi",
"DOGIN": "Doginhood",
"DOGINC": "dog in cats world",
"DOGINME": "doginme",
"DOGIRA": "Dogira",
+ "DOGK": "Dagknight Dog",
+ "DOGLAI": "Doglaikacoin",
"DOGMI": "DOGMI",
"DOGO": "DogemonGo",
"DOGPAD": "DogPad Finance",
"DOGRMY": "DogeArmy",
- "DOGS": "Dogcoin",
+ "DOGS": "Dogs",
"DOGSROCK": "Dogs Rock",
+ "DOGSS": "DOGS SOL",
+ "DOGSSO": "DOGS Solana",
"DOGSWAG": "DogSwaghat",
+ "DOGW": "DOGWIFHOOD",
"DOGWIFHAT": "dogwifhat",
"DOGWIFSEAL": "dogwifseal",
- "DOGY": "DogeYield",
+ "DOGY": "Dogy",
"DOGZ": "Dogz",
"DOJO": "ProjectDojo",
"DOKI": "Doki Doki Finance",
"DOKY": "Donkey King",
"DOLA": "Dola USD Stablecoin",
+ "DOLAN": "Dolan Duck",
+ "DOLLAR": "Dollar",
"DOLLARCOIN": "DollarCoin",
"DOLLUR": "Dollur Go Brrr",
+ "DOLPHY": "Dolphy",
"DOLZ": "DOLZ",
"DOM": "Ancient Kingdom",
"DOME": "Everdome",
"DOMI": "Domi",
+ "DOMO": "Dony Montana",
"DON": "Donnie Finance",
"DONA": "DONASWAP",
+ "DONAL": "Donald Pump",
"DONALD": "DONALD TRUMP",
"DONALDT": "Donald The Trump",
"DONATION": "DonationCoin",
"DONG": "DongCoin",
"DONGO": "Dongo AI",
+ "DONJR": "Don Jr.",
"DONK": "Don-key",
"DONKE": "DONKE",
"DONS": "The Dons",
+ "DONT": "Donald Trump (dont.cash)",
"DONU": "Donu",
"DONUT": "Donut",
"DONUTS": "The Simpsons",
@@ -3643,7 +4255,9 @@
"DOOH": "Bidooh",
"DOOMER": "Doomer",
"DOOR": "DOOR",
+ "DOPA": "DopaMeme",
"DOPE": "Dopamine App",
+ "DOPEC": "DOPE Coin",
"DOPECOIN": "DopeCoin",
"DOPU": "DOPU The Dog with A Purpose",
"DOR": "Dorado",
@@ -3651,17 +4265,20 @@
"DORAV1": "Dora Factory v1",
"DORK": "DORK",
"DORKL": "DORK LORD",
+ "DORKVADER": "DorkVader",
"DORKY": "Dork Lord",
"DOS": "DOS Network",
"DOSE": "DOSE",
"DOSHIB": "DogeShiba",
"DOT": "Polkadot",
"DOTC": "Dotcoin",
+ "DOTF": "Dot Finance",
"DOTR": "Cydotori",
"DOUG": "Doug The Duck",
"DOUGH": "PieDAO v2 (DOUGH)",
"DOV": "DOVU",
"DOVI": "Dovi(Ordinals)",
+ "DOVIS": "Dovish Finance",
"DOVU": "DOVU",
"DOWS": "Shadows",
"DP": "DigitalPrice",
@@ -3676,6 +4293,7 @@
"DPLN": "DePlan",
"DPLTR": "Palantir Tokenized Stock Defichain",
"DPN": "DIPNET",
+ "DPOOL": "Deadpool Inu",
"DPP": "Digital Assets Power Play",
"DPR": "Deeper Network",
"DPS": "DEEPSPACE",
@@ -3694,8 +4312,10 @@
"DRAGONGROK": "DragonGROK",
"DRAGONKING": "DragonKing",
"DRAGONMA": "Dragon Mainland Shards",
+ "DRAGONX": "DragonX",
"DRAGU": "DRAGU",
"DRAGY": "Dragy",
+ "DRAKO": "Drako",
"DRAM": "DRAM",
"DRAW": "Drawshop Kingdom Reverse",
"DRB": "Digimon Rabbit",
@@ -3720,16 +4340,20 @@
"DRM8": "Dream8Coin",
"DROGGY": "Droggy",
"DRONE": "Drone Coin",
- "DROP": "Dropil",
+ "DROP": "DROP",
+ "DROPIL": "Dropil",
"DROPS": "Drops",
"DROVERS": "Drover Inu",
"DRP": "DCORP",
"DRPU": "DRP Utility",
"DRS": "Digital Rupees",
"DRT": "DomRaider",
+ "DRUGS": "Big Pharmai",
+ "DRV": "Derive",
"DRXNE": "Droxne",
"DRZ": "Droidz",
"DS": "DeStorage",
+ "DSAI": "DeSend Ai",
"DSB": "DarkShibe",
"DSC": "Dash Cash",
"DSCP": "Dreamscape",
@@ -3747,6 +4371,8 @@
"DSR": "Desire",
"DSRUN": "Derby Stars",
"DST": "Double Swap Token",
+ "DSTAG": "deadstag",
+ "DSTNY": "Destinys Chicken",
"DSTR": "Dynamic Supply Tracker",
"DSUN": "DsunDAO",
"DSYNC": "Destra Network",
@@ -3756,6 +4382,7 @@
"DTB": "Databits",
"DTC": "Data Transaction",
"DTCT": "DetectorToken",
+ "DTEC": "Dtec",
"DTEM": "Dystem",
"DTEP": "DECOIN",
"DTG": "Defi Tiger",
@@ -3768,6 +4395,7 @@
"DTORO": "DexToro",
"DTR": "Dotori",
"DTRC": "Datarius",
+ "DTRUMP": "Degen Trump",
"DTSLA": "Tesla Tokenized Stock Defichain",
"DTX": "DataBroker DAO",
"DUA": "Brillion",
@@ -3775,15 +4403,19 @@
"DUB": "DubCoin",
"DUBAICAT": "Dubai Cat",
"DUBBZ": "Dubbz",
+ "DUBER": "Düber",
"DUBI": "Decentralized Universal Basic Income",
"DUBX": "DUBXCOIN",
"DUC": "DucatusCoin",
"DUCATO": "Ducato Protocol Token",
"DUCK": "Unit Protocol New",
+ "DUCKAI": "Duck AI",
+ "DUCKC": "DuckCoin",
"DUCKD": "DuckDuckCoin",
"DUCKER": "Ducker",
"DUCKIES": "Yellow Duckies",
"DUCKO": "Duck Off Coin",
+ "DUCKY": "Ducky Duck",
"DUCX": "DucatusX",
"DUDE": "DuDe",
"DUEL": "GameGPT",
@@ -3802,6 +4434,7 @@
"DUO": "ParallelCoin",
"DUOT": "DUO Network",
"DUREV": "Povel Durev",
+ "DUROV": "FREE DUROV",
"DURTH": "iShares MSCI World ETF Tokenized Stock Defichain",
"DUSD": "Decentralized USD",
"DUSK": "Dusk Network",
@@ -3816,6 +4449,7 @@
"DVI": "Dvision Network",
"DVINCI": "Davinci Jeremie",
"DVK": "Devikins",
+ "DVL": "Develad",
"DVNQ": "Vanguard Real Estate Tokenized Stock Defichain ()",
"DVOO": "Vanguard S&P 500 ETF Tokenized Stock Defichain",
"DVP": "Decentralized Vulnerability Platform",
@@ -3825,9 +4459,12 @@
"DVT": "DeVault",
"DVTC": "DivotyCoin",
"DVX": "Derivex",
+ "DWARFY": "Dwarfy",
"DWARS": "Dynasty Wars",
"DWC": "Digital Wallet",
"DWEB": "DecentraWeb",
+ "DWOG": "DWOG THE DOG",
+ "DWOLF": "Dark Wolf",
"DWT": "DiveWallet Token",
"DWZ": "DeFi Wizard",
"DX": "DxChain Token",
@@ -3846,16 +4483,21 @@
"DXR": "DEXTER",
"DXS": "Dx Spot",
"DXT": "Dexit Finance",
+ "DXY": "US Degen Index 6900",
+ "DYAD": "Dyad Stable",
"DYC": "Dycoin",
"DYDX": "dYdX",
+ "DYDXV1": "dYdX v1",
"DYM": "Dymension",
"DYN": "Dynamic",
"DYNA": "Dynamix",
+ "DYNAM": "Dynamic Crypto Index",
"DYNAMICTRADING": "Dynamic Trading Rights",
"DYNCOIN": "Dyncoin",
"DYNEX": "Dynex GPU",
"DYNMT": "Dynamite",
"DYNO": "DYNO",
+ "DYNOC": "DynoChain",
"DYOR": "DYOR Token",
"DYP": "Dypius",
"DYPV1": "Dypius v1",
@@ -3869,37 +4511,46 @@
"DZI": "DeFinition",
"DZOO": "Degen Zoo",
"Dow": "DowCoin",
+ "E1INCH": "1inch (Energi Bridge)",
"E21": "E21 Coin",
"E2C": "Electronic Energy Coin",
"E8": "Energy8",
"EA": "EagleCoin",
"EAC": "Education Assessment Cult",
+ "EADX": "EADX Token",
"EAG": "Emerging Assets Group",
"EAGLE": "Eagle Token",
"EAGS": "EagsCoin",
- "EAI": "Edain",
+ "EAI": "Eagle AI",
+ "EARLY": "Early Risers",
+ "EARLYF": "EarlyFans",
"EARN": "EarnGuild",
"EARTH": "Earth Token",
"EARTHCOIN": "EarthCoin",
"EASYF": "EasyFeedback",
"EAT": "EDGE Activity Token",
+ "EATH": "Eartherium",
"EAURIC": "Eauric",
"EAVE": "EaveAI",
"EB3": "EB3coin",
"EBA": "Elpis Battle",
"EBASE": "EURBASE",
"EBC": "EBCoin",
+ "EBCH": "Bitcoin Cash (Energiswap)",
"EBEN": "Green Ben",
"EBET": "EthBet",
"EBIT": "eBit",
+ "EBITCOIN": "eBitcoin",
"EBK": "Ebakus",
"EBOX": "Ethbox Token",
"EBS": "EbolaShare",
"EBSC": "EarlyBSC",
+ "EBSHIB": "Wrapped Energy Shiba Inu (Energi Bridge)",
"EBSO": "eBlockStock",
"EBST": "eBoost",
"EBT": "ELON BUYS TWITTER",
- "EBTC": "eBitcoin",
+ "EBTC": "Ether.fi Staked BTC",
+ "EBULL": "ETHEREUM IS GOOD",
"EBYT": "EarthByt",
"EBZ": "Ebitz",
"EC": "Echoin",
@@ -3911,7 +4562,7 @@
"ECET": "Evercraft Ecotechnologies",
"ECG": "EcoSmart",
"ECH": "EthereCash",
- "ECHO": "ECHO BOT",
+ "ECHOBOT": "ECHO BOT",
"ECHOD": "EchoDEX",
"ECHT": "e-Chat",
"ECI": "Euro Cup Inu",
@@ -3934,6 +4585,8 @@
"ECT": "SuperEdge",
"ECTE": "EurocoinToken",
"ECU": "ECOSC",
+ "ECXX": "ECXX",
+ "EDAIN": "Edain",
"EDAT": "EnviDa",
"EDC": "EDC Blockchain",
"EDDA": "EDDASwap",
@@ -3952,6 +4605,7 @@
"EDLC": "Edelcoin",
"EDN": "EdenChain",
"EDNS": "EDNS Token",
+ "EDOG": "EDOG",
"EDOGE": "ElonDoge",
"EDR": "Endor Protocol Token",
"EDRC": "EDRCoin",
@@ -3973,6 +4627,7 @@
"EFIL": "Ethereum Wrapped Filecoin",
"EFK": "ReFork",
"EFL": "E-Gulden",
+ "EFR": "End Federal Reserve",
"EFT": "ETH Fan Token Ecosystem",
"EFX": "The Effect.ai",
"EG": "EG Token",
@@ -3990,8 +4645,10 @@
"EGGP": "Eggplant Finance",
"EGGY": "EGGY",
"EGI": "eGame",
+ "EGL": "The Eagle Of Truth",
"EGLD": "eGold",
- "EGO": "EGOcoin",
+ "EGO": "Paysenger EGO",
+ "EGOCOIN": "EGOcoin",
"EGOD": "EgodCoin",
"EGOLD": "EGOLD",
"EGON": "EgonCoin",
@@ -4000,19 +4657,27 @@
"EGS": "EdgeSwap",
"EGT": "Egretia",
"EGX": "Enegra",
+ "EGY": "Egypt Cat",
"EHASH": "EHash",
"EHIVE": "eHive",
"EHRT": "Eight Hours Token",
"EIFI": "EIFI FINANCE",
+ "EIGEN": "EigenLayer",
"EIM": "Expert Infra",
+ "EIQT": "IQ Prediction",
"EJAC": "EJA Coin",
"EJS": "Enjinstarter",
"EKG": "Ekon Gold",
"EKN": "Elektron",
"EKO": "EchoLink",
+ "EKOC": "Coke",
"EKS": "Elumia Krystal Shards",
+ "EKSM": "Synthetic Kusama (Energiswap)",
"EKT": "EDUCare",
"EKTA": "Ekta",
+ "EKTAV1": "Ekta v1",
+ "EKTAV2": "Ekta v2",
+ "EKUBO": "Ekubo Protocol",
"EL": "ELYSIA",
"ELA": "Elastos",
"ELAC": "ELA Coin",
@@ -4042,11 +4707,14 @@
"ELITE": "EthereumLite",
"ELIX": "Elixir",
"ELIXIR": "Starchi",
+ "ELIZ": "Eliza (ai16zeliza)",
+ "ELIZA": "Eliza (elizawakesup.ai)",
"ELK": "Elk Finance",
"ELLA": "Ellaism",
"ELLI": "ElliotCoin",
"ELM": "Elements Play",
"ELMO": "ELMOERC",
+ "ELMOCOIN": "Elmo",
"ELMON": "Elemon",
"ELMT": "Element",
"ELO": "ElonPark",
@@ -4054,15 +4722,22 @@
"ELON2024": "ELON 2024(BSC)",
"ELON404": "Elon404",
"ELONCAT": "ELON CAT COIN",
+ "ELOND": "ELON DOGE",
"ELONDOGE": "ELON DOGE",
"ELONDRAGON": "ELON DRAGON",
+ "ELONGATE": "ElonGate",
"ELONGD": "Elongate Deluxe",
"ELONGT": "Elon GOAT",
+ "ELONIA": "Elonia Trump",
"ELONIUM": "Elonium",
"ELONM": "ELON MEME",
+ "ELONMA": "ELON MARS",
"ELONMARS": "ELON MARS",
+ "ELONMU": "Elon Musk",
"ELONONE": "AstroElon",
"ELONPEPE": "Elon Pepe Robot",
+ "ELONRWA": "ElonRWA",
+ "ELONTRUMP": "ELON TRUMP",
"ELP": "Ellerium",
"ELS": "Ethlas",
"ELT": "Element Black",
@@ -4073,13 +4748,14 @@
"ELUSKMON": "Elusk Mon",
"ELV": "Elvantis",
"ELVN": "11Minutes",
- "ELX": "Energy Ledger",
"ELY": "Elysian",
+ "ELYS": "Elys Network",
"ELYSIUM": "Elysium",
"EM": "Eminer",
"EMAID": "MaidSafeCoin",
"EMANATE": "EMANATE",
"EMAR": "EmaratCoin",
+ "EMATIC": "Wrapped Polygon (Energi Bridge)",
"EMAX": "EthereumMax",
"EMB": "Overline Emblem",
"EMBER": "EmberCoin",
@@ -4120,15 +4796,19 @@
"ENDCEX": "Endpoint CeX Fan Token",
"ENDLESS": "Endless Board Game",
"ENE": "EneCoin",
+ "ENEAR": "Near (Energiswap)",
"ENEDEX": "Enedex",
+ "ENERGYLEDGER": "Energy Ledger",
"ENERGYX": "Safe Energy",
"ENG": "Enigma",
"ENGT": "Engagement Token",
"ENIGMA": "ENIGMA",
"ENJ": "Enjin Coin",
+ "ENJV1": "Enjin Coin v1",
"ENK": "Enkidu",
"ENNO": "ENNO Cash",
"ENO": "Enotoken",
+ "ENOKIFIN": "Enoki Finance",
"ENQ": "Enecuum",
"ENQAI": "enqAI",
"ENRG": "EnergyCoin",
@@ -4161,6 +4841,7 @@
"EOX": "EXTRA ORDINARY",
"EPAN": "Paypolitan Token",
"EPANUS": "Epanus",
+ "EPENDLE": "Equilibria Pendle",
"EPEP": "Epep",
"EPETS": "Etherpets",
"EPIC": "Epic Cash",
@@ -4182,7 +4863,8 @@
"EQT": "EquiTrader",
"EQU": "Equation",
"EQUAD": "Quadrant Protocol",
- "EQUAL": "EqualCoin",
+ "EQUAL": "Equalizer DEX",
+ "EQUALCOIN": "EqualCoin",
"EQUI": "EQUI",
"EQUIL": "Equilibrium",
"EQUITOKEN": "EQUI Token",
@@ -4230,11 +4912,13 @@
"ESN": "Ethersocial",
"ESNC": "Galaxy Arena Metaverse",
"ESP": "Espers",
+ "ESPL": "ESPL ARENA",
"ESPR": "Espresso Bot",
"ESRC": "ESR Coin",
"ESS": "Essentia",
"EST": "ESports Chain",
"ESTATE": "AgentMile",
+ "ESTEE": "Kaga No Fuuka Go Sapporo Kagasou",
"ESW": "eSwitch®",
"ESZ": "EtherSportz",
"ET": "ENDO",
@@ -4257,11 +4941,17 @@
"ETH2X-FLI": "ETH 2x Flexible Leverage Index",
"ETHA": "ETHA Lend",
"ETHAX": "ETHAX",
- "ETHB": "EtherBTC",
+ "ETHB": "ETHEREUM ON BASE",
"ETHBN": "EtherBone",
"ETHD": "Ethereum Dark",
+ "ETHDOG": "Ethereumdog",
"ETHER": "Etherparty",
+ "ETHERBTC": "EtherBTC",
"ETHERDELTA": "EtherDelta",
+ "ETHERE": "Ethereal",
+ "ETHEREM": "Etherempires",
+ "ETHEREUMMEME": "Solana Ethereum Meme",
+ "ETHEREUMP": "ETHEREUMPLUS",
"ETHERINC": "EtherInc",
"ETHERKING": "Ether Kingdoms Token",
"ETHERNITY": "Ethernity Chain",
@@ -4295,6 +4985,7 @@
"ETM": "En-Tan-Mo",
"ETN": "Electroneum",
"ETNA": "ETNA Network",
+ "ETNY": "Ethernity",
"ETP": "Metaverse",
"ETPOS": "EtherPOS",
"ETR": "Electric Token",
@@ -4310,23 +5001,35 @@
"EUC": "Eurocoin",
"EUCOIN": "EU Coin",
"EUCX": "EUCX",
+ "EUD": "Eurodom",
"EUL": "Euler",
"EULER": "Euler Tools",
"EUM": "Elitium",
"EUNO": "EUNO",
"EURC": "Euro Coin",
+ "EURCV": "EUR CoinVertible",
+ "EURCVV1": "EUR CoinVertible v1",
"EURE": "Monerium EUR emoney",
+ "EURI": "Eurite",
"EURN": "NOKU EUR",
+ "EUROCUP": "EURO CUP INU",
"EUROE": "EUROe Stablecoin",
+ "EUROP": "Europa Coin",
+ "EURQ": "Quantoz EURQ",
+ "EURR": "StablR Euro",
"EURS": "STASIS EURS",
"EURT": "Euro Tether",
+ "EURTV1": "Euro Tether v1",
"EURU": "Upper Euro",
"EURX": "eToro Euro",
"EUSD": "Egoras Dollar",
+ "EUTBL": "Spiko EU T-Bills Money Market Fund",
"EV": "EVAI",
"EVA": "Evadore",
+ "EVAI": "EVA Intelligence",
"EVAN": "Evanesco Network",
"EVAULT": "EthereumVault",
+ "EVAV1": "Evadore v1",
"EVC": "Eventchain",
"EVCC": "Eco Value Coin",
"EVCOIN": "EverestCoin",
@@ -4342,9 +5045,11 @@
"EVERGREEN": "EverGreenCoin",
"EVERLIFE": "EverLife.AI",
"EVERMOON": "EverMoon",
+ "EVERV": "EverValue Coin",
"EVERY": "Everyworld",
"EVIL": "EvilCoin",
"EVILPEPE": "Evil Pepe",
+ "EVIN": "Evin Token",
"EVMOS": "Evmos",
"EVN": "Evn Token",
"EVO": "EvoVerses",
@@ -4388,6 +5093,7 @@
"EXO": "Exosis",
"EXOS": "Exobots",
"EXP": "Expanse",
+ "EXPAND": "Gems",
"EXPO": "Exponential Capital",
"EXRD": "Radix",
"EXRN": "EXRNchain",
@@ -4402,12 +5108,16 @@
"EYETOKEN": "EYE Token",
"EZ": "EasyFi V2",
"EZC": "EZCoin",
+ "EZEIGEN": "Restaked EIGEN",
"EZETH": "Renzo Restaked ETH",
"EZI": "Ezillion",
"EZM": "EZMarket",
+ "EZPZ": "Eazy Peazy",
+ "EZSOL": "Renzo Restaked SOL",
"EZT": "EZToken",
"EZY": "EzyStayz",
"ElvishMagic": "EMAGIC",
+ "F": "SynFutures",
"F16": "F16Coin",
"F1C": "Future1coin",
"F2C": "Ftribe Fighters",
@@ -4423,21 +5133,26 @@
"FACETER": "Faceter",
"FACT": "Orcfax",
"FACTOM": "Factom",
+ "FACTORY": "ChainFactory",
"FACTR": "Defactor",
"FADO": "FADO Go",
"FAG": "PoorFag",
- "FAI": "Fairum",
+ "FAH": "Falcons",
+ "FAI": "Freysa AI",
"FAIR": "FairCoin",
"FAIRC": "Faireum Token",
"FAIRG": "FairGame",
+ "FAIRUM": "Fairum",
"FAKE": "FAKE COIN",
"FAKEAI": "DeepFakeAI",
"FAKT": "Medifakt",
"FALCONS": "Falcon Swaps",
"FALX": "FalconX",
+ "FAM": "Family",
"FAME": "Fame MMA",
"FAMEC": "FameCoin",
"FAMILY": "The Bitcoin Family",
+ "FAML": "FAML",
"FAMOUSF": "Famous Fox Federation",
"FAN": "Fanadise",
"FAN360": "Fan360",
@@ -4447,19 +5162,26 @@
"FANV": "FanVerse",
"FANX": "FrontFanz",
"FANZ": "FanChain",
+ "FAPTAX": "Faptax",
"FAR": "Farmland Protocol",
"FARA": "FaraLand",
"FARCA": "Farcana",
"FARM": "Harvest Finance",
"FARMA": "FarmaTrust",
"FARMC": "FARM Coin",
+ "FARME": "Farmers Only",
"FARMING": "Farming Bad",
"FARMS": "Farmsent",
+ "FARTCOIN": "Fartcoin",
+ "FAS": "fast construction coin",
"FAST": "Fastswap",
+ "FASTAI": "Fast And Ai",
"FASTMOON": "FastMoon",
+ "FASTUSD": "Sei fastUSD",
"FASTV1": "Fastswap v1",
"FAT": "Fatcoin",
"FATCAKE": "FatCake",
+ "FATH": "Father Of Meme: Origin",
"FATHER": "DogeFather",
"FATHOM": "Fathom",
"FATMICHI": "FATMICHI",
@@ -4474,6 +5196,8 @@
"FBG": "Fort Block Games",
"FBN": "Five balance",
"FBNB": "ForeverBNB",
+ "FBOMB": "fBomb",
+ "FBOMBV1": "fBomb v1",
"FBURN": "Forever Burn",
"FBX": "Finance Blocks",
"FC": "Facecoin",
@@ -4493,6 +5217,7 @@
"FCS": "CryptoFocus",
"FCT": "FirmaChain",
"FCTC": "FaucetCoin",
+ "FCTR": "FactorDAO",
"FDC": "Fidance",
"FDLS": "FIDELIS",
"FDM": "Fandom",
@@ -4503,7 +5228,9 @@
"FDX": "fidentiaX",
"FDZ": "Friendz",
"FEAR": "Fear",
+ "FEARNOT": "FEAR NOT",
"FECES": "FECES",
+ "FEE": "FEED EVERY GORILLA",
"FEED": "Feeder Finance",
"FEENIXV2": "ProjectFeenixv2",
"FEES": "UNIFEES",
@@ -4522,8 +5249,9 @@
"FERT": "Chikn Fert",
"FERZAN": "Ferzan",
"FESS": "Fesschain",
- "FET": "Fetch.AI",
+ "FET": "Artificial Superintelligence Alliance",
"FETCH": "Fetch",
+ "FETS": "FE TECH",
"FEVR": "RealFevr",
"FEX": "FEX Token",
"FEY": "Feyorra",
@@ -4534,6 +5262,7 @@
"FFCT": "FortFC",
"FFM": "Files.fm Library",
"FFN": "Fairy Forest",
+ "FFTP": "FIGHT FOR THE PEOPLE",
"FFUEL": "getFIFO",
"FFYI": "Fiscus FYI",
"FGC": "FantasyGold",
@@ -4558,7 +5287,11 @@
"FIF": "flokiwifhat",
"FIFTY": "FIFTYONEFIFTY",
"FIG": "FlowCom",
+ "FIGH": "FIGHT FIGHT FIGHT",
"FIGHT": "Crypto Fight Club",
+ "FIGHTMAGA": "FIGHT MAGA",
+ "FIGHTPEPE": "FIGHT PEPE",
+ "FIGHTRUMP": "FIGHT TRUMP",
"FIH": "Fidelity House",
"FIII": "Fiii",
"FIL": "FileCoin",
@@ -4570,9 +5303,11 @@
"FIN": "DeFiner",
"FINA": "Defina Finance",
"FINALE": "Ben's Finale",
+ "FINAN": "FINANCIAL TRANSACTION SYSTEM",
"FINB": "Finblox",
"FINC": "Finceptor",
"FIND": "FindCoin",
+ "FINDER": "Finder AI",
"FINE": "Refinable",
"FINGER": "Finger Blast",
"FINK": "FINK",
@@ -4582,15 +5317,20 @@
"FINT": "FintraDao",
"FINU": "Formula Inu",
"FIO": "FIO Protocol",
+ "FIONA": "Fiona",
+ "FIONABSC": "Fiona",
"FIRA": "Defira",
"FIRE": "Matr1x Fire",
"FIRECOIN": "FireCoin",
+ "FIREW": "Fire Wolf",
"FIRO": "Firo",
"FIRSTHARE": "FirstHare",
"FIRU": "Firulais Finance",
"FIS": "Stafi",
"FISH": "Polycat Finance",
- "FIST": "FistBump",
+ "FISHK": "Fishkoin",
+ "FIST": "Fistbump",
+ "FISTBUMP": "FistBump",
"FIT": "Financial Investment Token",
"FITC": "Fitcoin",
"FITFI": "Step App",
@@ -4610,17 +5350,23 @@
"FKSK": "Fatih Karagümrük SK",
"FKX": "FortKnoxster",
"FL": "Freeliquid",
+ "FLA": "Flappy",
"FLAG": "Flag Network",
+ "FLAKY": "FLAKY",
"FLAME": "FireStarter",
"FLAP": "Flappy Coin",
"FLAPPY": "Flappy",
+ "FLAREF": "FlareFoxInu",
"FLAS": "Flas Exchange Token",
"FLASH": "Flashstake",
"FLASHC": "FLASH coin",
+ "FLAVIA": "Flavia Is Online",
+ "FLAY": "Flayer",
"FLC": "FlowChainCoin",
"FLD": "FluidAI",
"FLDC": "Folding Coin",
"FLDT": "FairyLand",
+ "FLEA": "FLEABONE",
"FLEPE": "Floki VS Pepe",
"FLETA": "FLETA",
"FLEX": "FLEX Coin",
@@ -4654,10 +5400,14 @@
"FLOKINY": "Floki New Year",
"FLOKIPEPE": "FlokiPepe",
"FLOKITA": "FLOKITA",
+ "FLOKIV1": "Floki v1",
+ "FLOKIV2": "Floki v2",
+ "FLOKIV3": "Floki v3",
"FLOKIX": "FLOKI X",
"FLOOF": "FLOOF",
"FLOOR": "FloorDAO",
"FLOP": "Big Floppa",
+ "FLOPPA": "Floppa Cat",
"FLORK": "FLORK BNB",
"FLORKY": "Florky",
"FLOSHIDO": "FLOSHIDO INU",
@@ -4665,6 +5415,7 @@
"FLOVI": "Flovi inu",
"FLOVM": "FLOV MARKET",
"FLOW": "Flow",
+ "FLOWER": "FlowerAI",
"FLOWP": "Flow Protocol",
"FLOYX": "Floyx",
"FLP": "Gameflip",
@@ -4673,7 +5424,10 @@
"FLRS": "Flourish Coin",
"FLS": "Flits",
"FLT": "Fluence",
+ "FLUFFI": "Fluffington",
+ "FLUFFY": "FLUFFY",
"FLUFFYS": "Fluffys",
+ "FLUI": "Fluidity",
"FLUID": "Fluid",
"FLURRY": "Flurry Finance",
"FLUT": "Flute",
@@ -4709,9 +5463,11 @@
"FNLX": "Fignal X",
"FNO": "Fonero",
"FNP": "FlipNpik",
+ "FNS": "FAUNUS",
"FNSA": "FINSCHIA",
"FNTB": "FinTab",
"FNX": "FinNexus",
+ "FNXAI": "Finanx AI",
"FNZ": "Fanzee",
"FO": "FIBOS",
"FOA": "Fragments of arker",
@@ -4720,14 +5476,18 @@
"FOCV": "FOCV",
"FODL": "Fodl Finance",
"FOF": "Future Of Fintech",
- "FOFAR": "Fofar",
+ "FOFAR": "FoFar",
+ "FOFARBASE": "FOFAR",
+ "FOFARIO": "Fofar",
"FOFO": "FOFO Token",
"FOGE": "Fat Doge",
"FOIN": "Foin",
"FOL": "Folder Protocol",
"FOLD": "Manifold Finance",
"FOLO": "Alpha Impact",
- "FOMO": "Aavegotchi FOMO",
+ "FOMO": "FOMO BULL CLUB",
+ "FOMON": "FOMO Network",
+ "FOMOSOL": "FOMOSolana",
"FON": "INOFI",
"FONE": "Fone",
"FONS": "FONSmartChain",
@@ -4743,6 +5503,7 @@
"FORCE": "TriForce Tokens",
"FORCEC": "Force Coin",
"FORE": "FORE Protocol",
+ "FOREST": "FOREST",
"FORESTPLUS": "The Forbidden Forest",
"FOREVER": "Forever Coin",
"FOREVERFOMO": "ForeverFOMO",
@@ -4771,9 +5532,11 @@
"FOXE": "Foxe",
"FOXF": "Fox Finance",
"FOXGIRL": "FoxGirl",
+ "FOXI": "Foxify",
"FOXSY": "Foxsy AI",
"FOXT": "Fox Trading",
"FOXV2": "FoxFinanceV2",
+ "FOXXY": "FOXXY",
"FOXY": "Foxy",
"FP": "Fren Pet",
"FPAD": "FantomPAD",
@@ -4786,6 +5549,7 @@
"FR": "Freedom Reserve",
"FRA": "Findora",
"FRAC": "FractalCoin",
+ "FRATT": "Frogg and Ratt",
"FRAX": "Frax",
"FRAZ": "FrazCoin",
"FRBK": " FreeBnk",
@@ -4793,15 +5557,20 @@
"FRD": "Farad",
"FRDX": "Frodo Tech",
"FRE": "FreeCoin",
+ "FREAK": "Freakoff",
"FREC": "Freyrchain",
"FRECNX": "FreldoCoinX",
- "FRED": "FREDEnergy",
+ "FRED": "First Convicted Raccon Fred",
"FREDDY": "FREDDY",
+ "FREDE": "FREDEnergy",
"FREE": "FREE coin",
"FREED": "FreedomCoin",
"FREEDO": "Freedom",
+ "FREEDOM": "Freedom Protocol Token",
"FREELA": "DecentralFree",
+ "FREEPAVEL": "Free Pavel",
"FREEROSS": "FreeRossDAO",
+ "FREET": "FreeTrump",
"FREL": "Freela",
"FREN": "FREN",
"FRENCH": "French On Base",
@@ -4828,8 +5597,12 @@
"FROGGY": "Froggy",
"FROGLIC": "Pink Hood Froglicker",
"FROGO": "Frogo",
+ "FROK": "Frok.ai",
"FRONK": "Fronk",
"FRONT": "Frontier",
+ "FROP": "Popo The Frog",
+ "FROSTY": "Frosty the Polar Bear",
+ "FROX": "Frox",
"FROYO": "Froyo Games",
"FROZE": "FrozenAi",
"FRP": "Fame Reward Plus",
@@ -4852,6 +5625,7 @@
"FSHN": "Fashion Coin",
"FSM": "Floki SafeMoon",
"FSN": "Fusion",
+ "FSNV1": "Fusion v1",
"FSO": "FSociety",
"FST": "Futureswap",
"FSTC": "FastCoin",
@@ -4859,6 +5633,7 @@
"FT": "Fracton Protocol",
"FTB": "Fit&Beat",
"FTC": "FeatherCoin",
+ "FTD": "42DAO",
"FTG": "fantomGO",
"FTH": "Fintyhub Token",
"FTHM": "Fathom Protocol",
@@ -4868,6 +5643,7 @@
"FTMO": "Fantom Oasis",
"FTN": "Fasttoken",
"FTO": "FuturoCoin",
+ "FTON": "Fanton",
"FTP": "FuturePoints",
"FTR": "FactR",
"FTRB": "Faith Tribe",
@@ -4875,18 +5651,23 @@
"FTS": "Fortress Lending",
"FTT": "FTX Token",
"FTTOKEN": "Finance Token",
+ "FTTT": "FTT Token",
"FTUM": "Fatum",
"FTVT": "FashionTV Token",
"FTW": "FutureWorks",
"FTX": "FintruX",
"FTXT": "FUTURAX",
+ "FU": "FU Money",
"FUBAO": "FUBAO",
"FUCK": "Fuck Token",
"FUD": "FUD.finance",
- "FUEL": "Jetfuel Finance",
+ "FUEGO": "FUEGO",
+ "FUEL": "Fuel Network",
+ "FUELX": "Fuel",
"FUFU": "Fufu Token",
+ "FUG": "FUG",
"FUJIN": "Fujinto",
- "FUKU": "Furukuru",
+ "FUKU": "FUKU-KUN",
"FUL": "Fulcrom Finance",
"FUMO": "Alien Milady Fumo",
"FUN": "FUN Token",
@@ -4906,6 +5687,7 @@
"FUR": "Furio",
"FURIE": "Matt Furie",
"FURU": "Furucombo",
+ "FURUKURU": "Furukuru",
"FURY": "Engines of Fury",
"FURYX": "Metafury",
"FUS": "Fus",
@@ -4914,7 +5696,9 @@
"FUSE": "Fuse Network Token",
"FUSION": "FusionBot",
"FUSO": "Fusotao",
+ "FUT": "FuturesAI",
"FUTC": "FutCoin",
+ "FUTUR": "Future Token",
"FUTURE": "FutureCoin",
"FUTUREAI": "Future AI",
"FUZE": "FUZE Token",
@@ -4925,6 +5709,7 @@
"FWB": "Friends With Benefits Pro",
"FWC": "Qatar 2022",
"FWH": "FigureWifHat",
+ "FWOG": "Fwog",
"FWT": "Freeway Token",
"FWW": "Farmers World Wood",
"FX": "Function X",
@@ -4934,17 +5719,20 @@
"FXDX": "FXDX",
"FXF": "Finxflo",
"FXI": "FX1 Sports",
+ "FXN": "FXN",
"FXP": "FXPay",
"FXS": "Frax Share",
"FXST": "FX Stock Token",
"FXT": "FuzeX",
+ "FXUSD": "f(x) Protocol fxUSD",
"FXY": "Floxypay",
"FYD": "FYDcoin",
+ "FYDO": "Fly Doge",
"FYN": "Affyn",
"FYP": "FlypMe",
"FYZ": "Fyooz",
"FYZNFT": "Fyooz NFT",
- "G": "GRN Grid",
+ "G": "Gravity",
"G1X": "GoldFinX",
"G3": "GAM3S.GG",
"G50": "G50",
@@ -4975,22 +5763,32 @@
"GALO": "Clube Atlético Mineiro Fan Token",
"GALT": "Galtcoin",
"GAM": "Gambit coin",
+ "GAMA": "GAMA Coin",
"GAMB": "GAMB",
+ "GAMBI": "Gambi Fi",
"GAMBIT": "Gambit",
"GAMBL": "Metagamble",
"GAME": "GameBuild",
"GAMEBUD": "GAMEBUD",
"GAMEC": "Game",
+ "GAMECO": "Game.com",
"GAMECRED": "GameCredits",
+ "GAMEF": "Game Fantasy Token",
"GAMEFI": "GameFi Token",
"GAMEFORK": "GameFork",
"GAMEIN": "Game Infinity",
"GAMER": "GameStation",
"GAMERFI": "GamerFI",
"GAMES": "Gamestarter",
+ "GAMEST": "GameStop Coin",
"GAMESTARS": "Game Stars",
+ "GAMESTO": "GameStop",
+ "GAMESTOP": "GameStop",
+ "GAMESTUMP": "GAMESTUMP",
+ "GAMET": "GAME Token",
"GAMEX": "GameX",
"GAMI": "GAMI World",
+ "GAMIN": "Gaming Stars",
"GAMINGDOGE": "GAMINGDOGE",
"GAMINGSHIBA": "GamingShiba",
"GAMMA": "Gamma Strategies",
@@ -5020,6 +5818,7 @@
"GATSBY": "Gatsby Inu",
"GAU": "Gamer Arena",
"GAUSS": "Gauss0x",
+ "GAY": "GAY",
"GAYPEPE": "Gay Pepe",
"GAYSLER": "Gaysler",
"GAZE": "GazeTV",
@@ -5052,6 +5851,7 @@
"GCAT": "Giga Cat on Base",
"GCB": "Global Commercial Business",
"GCC": "GuccioneCoin",
+ "GCCO": "GCCOIN",
"GCME": "GoCryptoMe",
"GCN": "gCn Coin",
"GCOIN": "Galaxy Fight Club",
@@ -5066,6 +5866,7 @@
"GDE": "Golden Eagle",
"GDL": "GodlyCoin",
"GDO": "GroupDao",
+ "GDOG": "GDOG",
"GDOGE": "Golden Doge",
"GDR": "Guider.Travel",
"GDRT": "Good Driver Reward Token",
@@ -5078,7 +5879,10 @@
"GEAR": "Gearbox Protocol",
"GEC": "Geco.one",
"GECKO": "Gecko Coin",
+ "GECKY": "Gecky",
+ "GEEK": "De:Lithe Last Memories",
"GEEQ": "Geeq",
+ "GEF": "GemFlow",
"GEGE": "Gege",
"GEIST": "Geist Finance",
"GEKKO": "Gekko HQ",
@@ -5086,15 +5890,17 @@
"GELO": "Grok Elo",
"GEM": "Gemie",
"GEMA": "Gemera",
- "GEME": "GAMESTUMP",
+ "GEME": "GEME",
"GEMG": "GemGuardian",
+ "GEMI": "Gemini Inu",
"GEMINI": "Gemini Ai",
"GEMINIT": "Gemini",
- "GEMS": "Gems",
+ "GEMS": "Gems VIP",
"GEMSTON": "GEMSTON",
"GEMZ": "Gemz Social",
"GEN": "DAOstack",
"GENE": "Genopets",
+ "GENECTO": "Gene",
"GENESIS": "Genesis Worlds",
"GENI": "Genius",
"GENIE": "The Genie",
@@ -5105,6 +5911,7 @@
"GENS": "Genshiro",
"GENSLR": "Good Gensler",
"GENSTAKE": "Genstake",
+ "GENT": "Gentleman",
"GENX": "Genx Token",
"GENXNET": "Genesis Network",
"GENZ": "GENZ Token",
@@ -5124,6 +5931,7 @@
"GET": "Guaranteed Entrance Token",
"GETA": "Getaverse",
"GETH": "Guarded Ether",
+ "GETLIT": "LIT",
"GETX": "Guaranteed Ethurance Token Extra",
"GEX": "Gexan",
"GEZY": "EZZY GAME GEZY",
@@ -5142,6 +5950,7 @@
"GFY": "go fu*k yourself",
"GG": "Reboot",
"GGAVAX": "GoGoPool AVAX",
+ "GGB": "GGEBI",
"GGC": "Global Game Coin",
"GGCM": "Gold Guaranteed Coin",
"GGG": "Good Games Guild",
@@ -5149,7 +5958,6 @@
"GGM": "Monster Galaxy",
"GGMT": "GG MetaGame",
"GGOLD": "GramGold Coin",
- "GGP": "GGPro",
"GGPT": "Generative GPT",
"GGR": "GGRocket",
"GGS": "Gilgam",
@@ -5158,10 +5966,15 @@
"GGTKN": "GG Token",
"GHA": "Ghast",
"GHC": "Galaxy Heroes Coin",
- "GHCOLD": "Galaxy Heroes Coin",
+ "GHCV1": "Galaxy Heroes Coin v1",
+ "GHCV2": "Galaxy Heroes Coin v2",
+ "GHCV3": "Galaxy Heroes Coin v3",
"GHD": "Giftedhands",
+ "GHDV1": "Giftedhands v1",
+ "GHE": "GHETTO PEPE",
"GHNY": "Grizzly Honey",
"GHO": "GHO",
+ "GHOAD": "GhoadCoin",
"GHOST": "GhostbyMcAfee",
"GHOSTCOIN": "GhostCoin",
"GHOSTM": "GhostMarket",
@@ -5179,30 +5992,44 @@
"GIF": "Gift Token",
"GIFT": "GiftNet",
"GIG": "GigaCoin",
- "GIGA": "GigaSwap",
+ "GIGA": "Gigachad",
+ "GIGACAT": "GIGACAT",
"GIGACHAD": "GigaChad",
+ "GIGASWAP": "GigaSwap",
+ "GIGGLE": "Giggle Academy",
+ "GIGS": "Climate101",
"GIGX": "GigXCoin",
"GIKO": "Giko Cat",
+ "GILOEX": "Gilo",
"GIM": "Gimli",
"GIMMER": "Gimmer",
+ "GIMMERV1": "Gimmer v1",
"GIN": "GINcoin",
"GINGER": "GINGER",
+ "GINNAN": "Ginnan The Cat",
"GINOA": "Ginoa",
+ "GINU": "Green Shiba Inu",
"GINUX": "Green Shiba Inu",
"GINZA": "GINZA NETWORK",
"GIO": "Graviocoin",
"GIOT": "Giotto Coin",
"GIOVE": "GIOVE",
"GIR": "Girlfriend",
+ "GIRLS": "Girls Club",
+ "GITH": "GitHub's Mascot Octocat",
"GIV": "Giveth",
"GIVE": "GiveCoin",
"GIZ": "GIZMOcoin",
+ "GIZMO": "GIZMO•IMAGINARY• KITTEN (Runes)",
"GJC": "Global Jobcoin",
+ "GKAPPA": "Golden Kappa",
"GKF": "Galatic Kitty Fighters",
"GKI": "GKi",
"GL": "Lemmings",
"GLA": "Gladius",
+ "GLASS": "Glass Chain",
"GLAX": "BLOCK GALAXY NETWORK",
+ "GLAZE": "Glaze",
"GLB": "Golden Ball",
"GLC": "GoldCoin",
"GLCH": "Glitch",
@@ -5218,19 +6045,23 @@
"GLFT": "Global Fan Token",
"GLI": "GLI TOKEN",
"GLIDE": "Glide Finance",
+ "GLIESE": "GlieseCoin",
"GLINK": "Gemlink",
"GLINT": "BeamSwap",
"GLM": "Golem Network Token",
"GLMR": "Moonbeam",
+ "GLMV1": "Golem Network Token v1",
"GLN": "Galion Token",
+ "GLO": "Global Innovation Platform",
"GLOBAL": "GlobalCoin",
"GLOBE": "Global",
+ "GLORP": "Glorp",
"GLORY": "SEKAI GLORY",
"GLOS": "GLOS",
"GLOWSHA": "GlowShares",
"GLQ": "GraphLinq Protocol",
"GLR": "Glory Finance",
- "GLS": "Glass Chain",
+ "GLS": "Glacier",
"GLT": "GlobalToken",
"GLX": "GalaxyCoin",
"GLYPH": "GlyphCoin",
@@ -5247,6 +6078,7 @@
"GME": "GameStop",
"GMEE": "GAMEE",
"GMEPEPE": "GAMESTOP PEPE",
+ "GMETHERFRENS": "GM",
"GMETRUMP": "GME TRUMP",
"GMEX": "Game Coin",
"GMFAM": "GMFAM",
@@ -5254,11 +6086,13 @@
"GMI": "GamiFi",
"GML": "GameLeagueCoin",
"GMM": "Gamium",
- "GMMT": "Green Mining Movement Token",
+ "GMMT": "Giant Mammoth",
"GMNG": "Global Gaming",
"GMNT": "Gmining",
"GMPD": "GamesPad",
"GMR": "GAMER",
+ "GMRV1": "GAMER v1",
+ "GMRV2": "GAMER v2",
"GMRX": "Gaimin",
"GMS": "Gemstra",
"GMT": "STEPN",
@@ -5276,6 +6110,8 @@
"GNNX": "Gennix",
"GNO": "Gnosis",
"GNOME": "GNOME",
+ "GNOMY": "Gnomy",
+ "GNON": "Numogram",
"GNR": "Gainer",
"GNS": "Gains Network",
"GNT": "GreenTrust",
@@ -5288,11 +6124,17 @@
"GOAL": "GOAL token",
"GOALBON": "Goal Bonanza",
"GOALS": "UnitedFans",
- "GOAT": "Goat",
+ "GOAT": "Goatseus Maximus",
+ "GOATAI": "GOAT AI",
+ "GOATCOIN": "Goat",
+ "GOATSE": "GOATSE",
"GOB": "Goons of Balatroon",
"GOC": "GoCrypto",
+ "GOCHU": "Gochujangcoin",
"GOD": "Bitcoin God",
+ "GODCAT": "GodcatExplodingKittens",
"GODE": "Gode Chain",
+ "GODEX": "GUARD OF DECENT",
"GODL": "GODL",
"GODS": "Gods Unchained",
"GODZ": "Cryptogodz",
@@ -5301,6 +6143,7 @@
"GOFF": "Gift Off Token",
"GOFX": "GooseFX",
"GOG": "Guild of Guardians",
+ "GOGLZ": "GOGGLES",
"GOGO": "GOGO Finance",
"GOGU": "GOGU Coin",
"GOIN": "GOinfluencer",
@@ -5310,43 +6153,63 @@
"GOLC": "GOLCOIN",
"GOLD": "CyberDragon Gold",
"GOLDCAT": "GOLD CAT",
+ "GOLDCOINETH": "Gold",
+ "GOLDE": "GOLDEN AGE",
"GOLDEN": "Golden Inu",
"GOLDENG": "Golden Goose",
"GOLDF": "Gold Fever",
"GOLDMIN": "GoldMiner",
+ "GOLDN": "GoLondon",
"GOLDPIECES": "GoldPieces",
+ "GOLDS": "Gold Standard",
"GOLDX": "eToro Gold",
"GOLDY": "DeFi Land Gold",
"GOLF": "GolfCoin",
+ "GOLFI": "Golf is Boring",
"GOLOS": "Golos",
"GOLOSBLOCKCHAIN": "Golos Blockchain",
"GOM": "Gomics",
"GOM2": "GoMoney2",
"GOMA": "GOMA Finance",
+ "GOMAV1": "GOMA Finance v1",
+ "GOMAV2": "GOMA Finance v2",
"GOMD": "GOMDori",
"GOME": "Game of Memes",
"GOMT": "GoMeat",
+ "GOMV1": "GoMoney",
+ "GONDOLA": "Gondola",
"GONE": "GONE",
+ "GONG": "GONG",
"GOO": "Gooeys",
"GOOCH": "Gooch",
"GOOD": "Goodomy",
+ "GOODM": "Good Morning!",
+ "GOODMO": "Good Morning",
+ "GOOG": "Googly Cat",
"GOOGLE": "Deepmind Ai",
"GOOGLY": "Googly Cat",
+ "GOOMPY": "Goompy by Matt Furie",
"GOON": "Goonies",
+ "GOP": "The Republican Party",
"GOPX": "GOPX Token",
"GORA": "Gora",
"GOREC": "GoRecruit",
"GORGONZOLA": "Heroes 3 Foundation",
+ "GORGONZOLAV1": "Heroes 3 Foundation v1",
"GORILLA": "Gorilla",
"GORILLAD": "Gorilla Diamond",
"GORILLAINU": "Gorilla Inu",
+ "GORPLE": "GorplesCoin",
"GOS": "Gosama",
"GOSS": "GOSSIP-Coin",
"GOST": "SoulCoin",
"GOT": "ParkinGo",
"GOTEM": "gotEM",
"GOTG": "Got Guaranteed",
+ "GOTTI": "Gotti Token",
"GOTX": "GothicCoin",
+ "GOU": "Gou",
+ "GOUT": "GOUT",
"GOV": "SubDAO",
"GOVI": "Govi",
"GOVT": "The Government Network",
@@ -5379,8 +6242,11 @@
"GRAI": "Gravita Protocol",
"GRAIL": "Camelot Token",
"GRAIN": "Granary",
+ "GRAM": "Gram",
"GRANDCOIN": "GrandCoin",
+ "GRANDMA": "Grandma",
"GRAPE": "GrapeCoin",
+ "GRASS": "Grass",
"GRAV": "Graviton",
"GRAVITAS": "Gravitas",
"GRAVITYF": "Gravity Finance",
@@ -5390,10 +6256,15 @@
"GRC": "GreenCoin.AI",
"GRE": "GreenCoin",
"GREARN": "GrEarn",
+ "GREE": "Green God Candle",
"GREEN": "GreenX",
+ "GREENH": "Greenheart CBD",
+ "GREENMMT": "Green Mining Movement Token",
+ "GREENPOWER": "GreenPower",
"GREENT": "Greentoken",
"GREG": "greg",
"GRELF": "GRELF",
+ "GREMLY": "Gremly",
"GREXIT": "GrexitCoin",
"GREY": "Grey Token",
"GRFT": "Graft Blockchain",
@@ -5401,6 +6272,8 @@
"GRID": "Grid+",
"GRIDCOIN": "GridCoin",
"GRIDZ": "GridZone.io",
+ "GRIFFAIN": "GRIFFAIN",
+ "GRIFT": "ORBIT",
"GRIM": "GRIMREAPER",
"GRIMACE": "Grimace",
"GRIMEVO": "Grim EVO",
@@ -5410,9 +6283,11 @@
"GRLC": "Garlicoin",
"GRM": "GridMaster",
"GRMD": "GreenMed",
- "GRN": "GreenPower",
+ "GRN": "GRN Grid",
"GRND": "SuperWalk",
+ "GRNV1": "GRN Grid v1",
"GRO": "Gro DAO Token",
+ "GROGGO": "Groggo By Matt Furie",
"GROK": "Grok",
"GROK2": "GROK 2.0",
"GROKBANK": "Grok Bank",
@@ -5480,6 +6355,7 @@
"GTAVI": "GTAVI",
"GTBOT": "Gaming-T-Bot",
"GTC": "Gitcoin",
+ "GTCC": "GTC COIN",
"GTCOIN": "Game Tree",
"GTE": "GreenTek",
"GTF": "GLOBALTRUSTFUND TOKEN",
@@ -5494,7 +6370,9 @@
"GTSE": "Global Tourism Sharing Ecology",
"GTTM": "Going To The Moon",
"GTX": "GALLACTIC",
+ "GUA": "GUA",
"GUAC": "Guacamole",
+ "GUAN": "Guanciale by Virtuals",
"GUAP": "Guapcoin",
"GUAR": "Guarium",
"GUARD": "Guardian",
@@ -5503,6 +6381,7 @@
"GUCCI": "GUCCI",
"GUE": "GuerillaCoin",
"GUESS": "Peerguess",
+ "GUGU": "gugu",
"GUI": "Gui Inu",
"GUILD": "BlockchainSpace",
"GUISE": "GUISE",
@@ -5515,14 +6394,18 @@
"GUNS": "GeoFunders",
"GUP": "Guppy",
"GURL": "Gently Used Girl",
+ "GURU": "Guru Network",
+ "GUS": "Gus",
"GUSD": "Gemini Dollar",
"GUSDT": "Global Utility Smart Digital Token",
"GUT": "Genesis Universe",
"GUUFY": "Guufy",
+ "GUZUTA": "CLYDE",
"GVC": "Global Virtual Coin",
"GVE": "Globalvillage Ecosystem",
"GVL": "Greever",
"GVR": "Grove [OLD]",
+ "GVRV1": "Grove v1",
"GVT": "Genesis Vision",
"GW": "Gyrowin",
"GWD": "GreenWorld",
@@ -5556,8 +6439,13 @@
"HABIBI": "The Habibiz",
"HAC": "Hackspace Capital",
"HACD": "Hacash Diamond",
+ "HACH": "Hachiko",
"HACHI": "Hachi",
+ "HACHIK": "Hachiko",
"HACHIKO": "Hachiko Inu Token",
+ "HACHIONB": "Hachi On Base",
+ "HACK": "HACK",
+ "HAGGIS": "New Born Haggis Pygmy Hippo",
"HAHA": "Hasaki",
"HAI": "Hacken Token",
"HAIR": " HairDAO",
@@ -5575,9 +6463,12 @@
"HAMI": "Hamachi Finance",
"HAMMY": "SAD HAMSTER",
"HAMS": "HamsterCoin",
+ "HAMSTER": "Space Hamster",
+ "HAMSTERB": "HamsterBase",
"HAMSTR": "Hamster Coin",
"HAN": "HanChain",
"HANA": "Hanacoin",
+ "HANAETHCTO": "HANA",
"HAND": "ShowHand",
"HANDY": "Handy",
"HANK": "Hank",
@@ -5585,13 +6476,20 @@
"HAO": "HistoryDAO",
"HAP": "Happy Train",
"HAPI": "HAPI",
+ "HAPPY": "Happy Cat",
+ "HAR": "Harambe Coin",
"HARAM": "HARAM",
"HARAMBE": "Harambe on Solana",
"HARD": "Kava Lend",
"HARE": "Hare Token",
"HAREPLUS": "Hare Plus",
"HAROLD": "Harold",
+ "HARPER": "Harper",
+ "HARR": "HARRIS DOGS",
+ "HARRIS": "KAMALA HARRIS",
+ "HARRISV": "Harris V Trump",
"HARRYP": "HarryPotterObamaSonic10Inu (ERC20)",
+ "HARRYPO": "HarryPotterObamaPacMan8Inu",
"HART": "HARA",
"HASBIK": "Hasbulla",
"HASH": "Provenance Blockchain",
@@ -5605,17 +6503,22 @@
"HAUS": "DAOhaus",
"HAVOC": "Havoc",
"HAVY": "Havy",
+ "HAW": "Hawk Tuah",
"HAWK": "Hawksight",
+ "HAWKCITY": "Hawk",
+ "HAWKPTAH": "Hawk Ptah",
"HAWKTUAH": "Hawk Tuah",
- "HAY": "Destablecoin HAY",
+ "HAXS": "Axie Infinity Shards (Harmony One Bridge)",
"HAYYA": "GO HAYYA",
"HAZ": "Hazza",
"HAZE": "HazeCoin",
"HB": "HeartBout",
"HBAR": "Hedera Hashgraph",
+ "HBARBARIAN": "HBARbarian",
"HBARX": "HBARX",
"HBB": "Hubble",
"HBC": "HBTC Captain Token",
+ "HBCH": "Huobi BCH",
"HBD": "Hive Dollar",
"HBDC": "Happy Birthday Coin",
"HBE": "healthbank",
@@ -5624,9 +6527,11 @@
"HBO": "Hash Bridge Oracle",
"HBOT": "Hummingbot",
"HBRS": "HubrisOne",
+ "HBSV": "Huobi BSV",
"HBT": "Habitat",
"HBTC": "Huobi BTC",
"HBX": "Hyperbridge",
+ "HBZ": "HBZ Coin",
"HC": "HyperCash",
"HCC": "HappyCreatorCoin",
"HCT": "HurricaneSwap Token",
@@ -5641,7 +6546,9 @@
"HDV": "Hydraverse",
"HDX": "HydraDX",
"HE": "Heroes & Empires",
+ "HEA": "Healium",
"HEAL": "Etheal",
+ "HEALT": "Healthmedi",
"HEART": "Humans",
"HEARTBOUT": "HeartBout Pay",
"HEARTR": "Heart Rate",
@@ -5657,25 +6564,40 @@
"HEGE": "Hege",
"HEGG": "Hummingbird Egg",
"HEGIC": "Hegic",
+ "HEHE": "hehe",
+ "HEL": "Hello Puppy",
+ "HELA": "Science Cult Mascot",
+ "HELI": "Helion",
+ "HELINK": "Chainlink (Huobi Exchange)",
"HELIOS": "Mission Helios",
"HELL": "HELL COIN",
"HELLO": "HELLO",
"HELMET": "Helmet Insure",
"HELPS": "HelpSeed",
+ "HEM": "Hemera",
"HEMAN": "HE-MAN",
"HEMULE": "Hemule",
+ "HENG": "HengCoin",
+ "HENLO": "Henlo",
+ "HENLOV1": "Henlo v1",
"HEP": "Health Potion",
"HER": "Hero Node",
"HERA": "Hero Arena",
"HERB": "HerbCoin",
"HERBE": "Herbee",
+ "HERME": "Hermes DAO",
"HERMES": "Hermes Protocol",
+ "HERMIONE": "Hermione",
+ "HERMY": "Hermy The Stallion",
"HERO": "Metahero",
+ "HEROC": "HEROcoin",
"HEROES": "Dehero Community Token",
"HEROESC": "HeroesChained",
+ "HEROI": "Heroic Saga Shiba",
"HET": "HavEther",
"HETA": "HetaChain",
"HETH": "Huobi Ethereum",
+ "HEWE": "Health & Wealth",
"HEX": "HEX",
"HEXC": "HexCoin",
"HEZ": "Hermez Network Token",
@@ -5683,6 +6605,7 @@
"HFI": "Holder Finance",
"HFIL": "Huobi Fil",
"HFT": "Hashflow",
+ "HFUN": "Hold.fun",
"HGEN": "HGEN DAO",
"HGET": "Hedget",
"HGHG": "HUGHUG Coin",
@@ -5718,6 +6641,7 @@
"HIH": "HiHealth",
"HIKARI": "Hikari Protocol",
"HILL": "President Clinton",
+ "HILO": "HILO",
"HIM": "Human Intelligence Machine",
"HIMAYC": "hiMAYC",
"HIME": "Phantom of the Kill",
@@ -5733,12 +6657,14 @@
"HIP": "HIPPOP",
"HIPENGUINS": "hiPENGUINS",
"HIPP": "El Hippo",
+ "HIPPO": "sudeng",
"HIPUNKS": "hiPUNKS",
"HIRE": "HireMatch",
"HIRENGA": "hiRENGA",
"HISAND33": "hiSAND33",
"HISEALS": "hiSEALS",
"HISQUIGGLE": "hiSQUIGGLE",
+ "HISS": "Snake of Solana",
"HIT": "HitChain",
"HITBTC": "HitBTC Token",
"HITOP": "Hitop",
@@ -5757,13 +6683,17 @@
"HLD": "HyperLending",
"HLDY": "HOLIDAY",
"HLG": "Holograph",
+ "HLINK": "Chainlink (Harmony One Bridge)",
"HLM": "Helium",
"HLN": "Holonus",
+ "HLO": "Halo",
+ "HLOV1": "Halo v1",
"HLP": "Purpose Coin",
"HLPR": "HELPER COIN",
"HLPT": "HLP Token",
"HLS": "Halis",
"HLT": "HyperLoot",
+ "HLTC": "Huobi LTC",
"HLX": "Helex",
"HMC": "Hi Mutual Society",
"HMD": "Homelend",
@@ -5777,12 +6707,15 @@
"HMR": "Homeros",
"HMRN": "Homerun",
"HMST": "Hamster Marketplace Token",
+ "HMSTR": "Hamster Kombat",
"HMT": "HUMAN Token",
"HMTT": "Hype Meme Token",
+ "HMU": "hit meeee upp",
"HMX": "HMX",
"HNB": "HashNet BitEco",
"HNC": "Hellenic Coin",
"HNCN": "Huncoin",
+ "HND": "Hundred Finance",
"HNS": "Handshake",
"HNST": "Honest",
"HNT": "Helium",
@@ -5812,21 +6745,29 @@
"HOM": "Homeety",
"HOME": "OtterHome",
"HOMER": "Homer Simpson",
+ "HOMERB": "Homer BSC",
+ "HOMERO": "Homer Of Meme",
"HOMI": "HOMIHELP",
"HOMIECOIN": "Homie Wars",
"HOMMIES": "HOMMIES",
+ "HOMS": "Heroes of memes",
"HON": "SoulSociety",
"HONEY": "Hivemapper",
"HONEYCOIN": "Honey",
"HONG": "HongKongDAO",
"HONK": "Honk",
+ "HONKLER": "Honkler",
"HONOR": "HonorLand",
"HOOF": "Metaderby Hoof",
"HOOK": "Hooked Protocol",
"HOOP": "Chibi Dinos",
+ "HOOPS": "Hoops",
+ "HOOT": "HOOT",
"HOP": "Hop Protocol",
"HOPPY": "Hoppy",
+ "HOPPYTOKEN": "Hoppy",
"HOPR": "HOPR",
+ "HOR": "HorizonDEX",
"HORD": "Hord",
"HORSE": "Ethorse",
"HORUS": "HorusPay",
@@ -5865,18 +6806,21 @@
"HRDG": "HRDGCOIN",
"HRM": "Honorarium",
"HRO": "HEROIC.com",
+ "HRSE": "The Winners Circle",
"HRT": "HIRO",
"HRTS": "YellowHeart Protocol",
"HRX": "HorusLayer",
"HSAI": "HealthSci.AI",
"HSC": "HashCoin",
"HSF": "Hillstone Finance",
+ "HSK": "HashKey Platform Token",
"HSN": "Hyper Speed Network",
"HSP": "Horse Power",
"HSS": "Hashshare",
"HST": "Decision Token",
"HSUI": "Suicune",
"HSUITE": "HbarSuite",
+ "HSUSDC": "Holdstation USDC",
"HT": "Huobi Token",
"HTA": "Historia",
"HTB": "Hotbit",
@@ -5885,6 +6829,8 @@
"HTDF": "Orient Walt",
"HTE": "Hepton",
"HTER": "Biogen",
+ "HTERM": "Hiero Terminal",
+ "HTK": "Hard To Kill",
"HTM": "Hatom",
"HTML": "HTML Coin",
"HTMOON": "HTMOON",
@@ -5897,21 +6843,25 @@
"HUAHUA": "Chihuahua Chain",
"HUB": "Hub Token",
"HUBII": "Hubii Network",
+ "HUBSOL": "SolanaHub staked SOL",
"HUC": "HunterCoin",
"HUDI": "Hudi",
- "HUGE": "BigCoin",
+ "HUE": "Huebel Bolt",
+ "HUGE": "HugeWin",
"HUGO": "Hugo Inu",
"HUH": "HUH Token",
"HUHCAT": "huhcat",
"HUM": "Humanscape",
"HUMAI": "Humanoid AI",
"HUMP": "Hump",
+ "HUMV1": "Humanscape v1",
"HUND": "HUND MEME COIN",
"HUNDRED": "HUNDRED",
"HUNNY": "Pancake Hunny",
"HUNT": "HUNT",
"HUR": "Hurify",
"HUS": "HUSSY",
+ "HUSBY": "HUSBY",
"HUSD": "HUSD",
"HUSH": "Hush",
"HUSKY": "Husky",
@@ -5940,6 +6890,7 @@
"HYBRID": "Hybrid Bank Cash",
"HYC": "HYCON",
"HYCO": "HYPERCOMIC",
+ "HYD": "HYDRA",
"HYDRA": "Hydra",
"HYDRO": "Hydro",
"HYDROMINER": "Hydrominer",
@@ -5948,13 +6899,15 @@
"HYN": "Hyperion",
"HYP": "HyperStake",
"HYPC": "HyperCycle",
- "HYPE": "Hype",
+ "HYPE": "Hyperliquid",
"HYPER": "HyperChainX",
"HYPERAI": "HyperHash AI",
"HYPERCOIN": "HyperCoin",
"HYPERD": "HyperDAO",
+ "HYPERIONX": "HyperionX",
"HYPERS": "HyperSpace",
"HYPES": "Supreme Finance",
+ "HYPEV1": "Hype v1",
"HYPR": "Hypr Network",
"HYS": "Heiss Shares",
"HYT": "HoryouToken",
@@ -5965,6 +6918,7 @@
"HZN": "Horizon Protocol",
"HZT": "HazMatCoin",
"I0C": "I0coin",
+ "I3D": "i3D Protocol",
"I7": "ImpulseVen",
"I9C": "i9 Coin",
"IAG": "IAGON",
@@ -5989,8 +6943,11 @@
"ICAP": "ICAP Token",
"ICASH": "ICASH",
"ICB": "IceBergCoin",
+ "ICBX": "ICB Network",
"ICC": "Insta Cash Coin",
"ICE": "Ice Open Network",
+ "ICEC": "IceCream",
+ "ICECR": "Ice Cream Sandwich",
"ICELAND": "ICE LAND",
"ICETH": "Interest Compounding ETH Index",
"ICG": "Invest Club Global",
@@ -5998,6 +6955,7 @@
"ICHI": "ICHI",
"ICHN": "i-chain",
"ICHX": "IceChain",
+ "ICL": "ICLighthouse DAO",
"ICLICK": "Iclick inu",
"ICN": "Iconomi",
"ICNX": "Icon.X World",
@@ -6033,6 +6991,7 @@
"IDO": "Idexo",
"IDOL": "IDOLINU",
"IDORU": "Vip2Fan",
+ "IDRISS": "IDRISS",
"IDRT": "Rupiah Token",
"IDRX": "IDRX",
"IDT": "InvestDigital",
@@ -6046,9 +7005,11 @@
"IEC": "IvugeoEvolutionCoin",
"IETH": "iEthereum",
"IF": "Impossible Finance",
+ "IFBTC": "Ignition FBTC",
"IFC": "Infinite Coin",
"IFIT": "CALO INDOOR",
"IFLT": "InflationCoin",
+ "IFOR": "iFortune",
"IFT": "InvestFeed",
"IFUM": "Infleum",
"IFUND": "Unifund",
@@ -6058,6 +7019,7 @@
"IGG": "IG Gold",
"IGI": "Igi",
"IGNIS": "Ignis",
+ "IGT": "Infinitar",
"IGTT": "IGT",
"IGU": "IguVerse",
"IGUP": "IguVerse",
@@ -6067,7 +7029,9 @@
"IIC": "Intelligent Investment Chain",
"IJC": "IjasCoin",
"IJZ": "iinjaz",
+ "IJZV1": "iinjaz v1",
"IKI": "ikipay",
+ "IKIGAI": "Ikigai",
"ILA": "Infinite Launch",
"ILC": "ILCOIN",
"ILCT": "ILCoin Token",
@@ -6085,6 +7049,7 @@
"IMI": "Influencer",
"IML": "IMMLA",
"IMMO": "ImmortalDAO Finance",
+ "IMMORTAL": "IMMORTAL.COM",
"IMO": "IMO",
"IMP": "CoinIMP",
"IMPACT": "Impact",
@@ -6103,11 +7068,14 @@
"IMVR": "ImmVRse",
"IMX": "Immutable X",
"IN": "InCoin",
+ "INA": "pepeinatux",
"INARI": "Inari",
"INB": "Insight Chain",
"INC": "Incrementum",
"INCAKE": "InfinityCAKE",
+ "INCEPT": "Incept",
"INCNT": "Incent",
+ "INCO": "InfinitiCoin",
"INCORGNITO": "Incorgnito",
"INCP": "InceptionCoin",
"IND": "Indorse",
@@ -6116,6 +7084,7 @@
"INDEX": "Index Cooperative",
"INDI": "IndiGG",
"INDIA": "Indiacoin",
+ "INDIAN": "Indian Call Center",
"INDICOIN": "IndiCoin",
"INDU": "INDU4.0",
"INDY": "Indigo Protocol",
@@ -6124,10 +7093,11 @@
"INERY": "Inery",
"INES": "Inescoin",
"INET": "Insure Network",
+ "INETH": "Inception Restaked ETH",
"INEX": "Inex Project",
"INF": "Infinium",
"INFC": "Influence Chain",
- "INFI": "Insured Finance",
+ "INFI": "Infinite",
"INFINI": "Infinity Economics",
"INFLR": "Inflr",
"INFO": "Infomatix",
@@ -6145,18 +7115,24 @@
"INOVAI": "INOVAI",
"INP": "Ionic Pocket Token",
"INRT": "INRToken",
+ "INRX": "INRx",
+ "INRXV1": "INRx v1",
"INS": "Insolar (Old Chain)",
"INSANE": "InsaneCoin",
"INSANITY": "Insanity Coin",
"INSC": "INSC (Ordinals)",
+ "INSE": "INSECT",
"INSN": "Insane Coin",
"INSP": "Inspect",
+ "INSPI": "InspireAI",
"INSR": "Insurabler",
"INST": "Instadapp",
"INSTAMINE": "Instamine Nuggets",
"INSTAR": "Insights Network",
"INSUR": "InsurAce",
+ "INSURANCE": "insurance",
"INSURC": "InsurChain Coin",
+ "INSUREDFIN": "Insured Finance",
"INT": "Internet Node token",
"INTD": "INTDESTCOIN",
"INTE": "InteractWith",
@@ -6179,6 +7155,7 @@
"INVESTEL": "Investelly token",
"INVI": "INVI Token",
"INVIC": "Invictus",
+ "INVITE": "INVITE Token",
"INVOX": "Invox Finance",
"INVX": "Investx",
"INX": "Insight Protocol",
@@ -6215,6 +7192,7 @@
"IPOR": "IPOR",
"IPSX": "IP Exchange",
"IPT": "Crypt-ON",
+ "IPU": "iPulse",
"IPUX": "IPUX",
"IPV": "IPVERSE",
"IPVOLD": "IPVERSE (Klaytn)",
@@ -6232,12 +7210,14 @@
"IRIS": "IRIS Network",
"IRISTOKEN": "Iris Ecosystem",
"IRL": "IrishCoin",
+ "IRO": "Iro-Chan",
"IRON": "Iron Fish",
"IRONBSC": "Iron BSC",
"IRT": "Infinity Rocket",
"IRYDE": "iRYDE COIN",
"ISA": "Islander",
"ISDT": "ISTARDUST",
+ "ISEC": "IntelliSecure Systems",
"ISG": "ISG",
"ISH": "Interstellar Holdings",
"ISHI": "Ishi",
@@ -6268,6 +7248,7 @@
"ITL": "Italian Lira",
"ITLR": "MiTellor",
"ITM": "intimate.io",
+ "ITO": "Ito-chan",
"ITOC": "ITOChain",
"ITR": "INTRO",
"ITSB": "ITSBLOC",
@@ -6282,6 +7263,7 @@
"IVAR": "Ivar Coin",
"IVC": "Investy Coin",
"IVEX": "IVEX Financial",
+ "IVFUN": "Invest Zone",
"IVI": "IVIRSE",
"IVIP": "iVipCoin",
"IVN": "IVN Security",
@@ -6293,6 +7275,7 @@
"IWT": "IwToken",
"IX": "X-Block",
"IXC": "IXcoin",
+ "IXIR": "IXIR",
"IXP": "IMPACTXPRIME",
"IXS": "IX Swap",
"IXT": "iXledger",
@@ -6313,17 +7296,24 @@
"JACY": "JACY",
"JADE": "Jade Protocol",
"JADEC": "Jade Currency",
+ "JAGO": "Jagotrack",
"JAIHO": "Jaiho Crypto",
"JAKE": "Jake The Dog",
"JAM": "Tune.Fm",
"JAN": "Storm Warfare",
"JANE": "JaneCoin",
+ "JANET": "Janet",
+ "JANI": "JANI",
+ "JANRO": "Janro The Rat",
"JAR": "Jarvis+",
"JARED": "Jared From Subway",
"JARY": "JeromeAndGary",
"JASMY": "JasmyCoin",
+ "JASON": "Jason Derulo",
+ "JAV": "Javsphere",
"JAWS": "AutoShark",
"JAY": "Jaypeggers",
+ "JBO": "JBOX",
"JBOT": "JACKBOT",
"JBS": "JumBucks Coin",
"JBX": "Juicebox",
@@ -6334,13 +7324,16 @@
"JCO": "JennyCo",
"JCR": "JustCarbon Removal",
"JCT": "Japan Content Token",
+ "JDAI": "Dai (TON Bridge)",
"JDC": "JustDatingSite",
+ "JDO": "JINDO",
"JED": "JEDSTAR",
"JEDALS": "Yoda Coin Swap",
"JEET": "Jeet",
"JEETOLAX": "Jeetolax",
"JEFE": "JEFE TOKEN",
"JEFF": "Jeff in Space",
+ "JEFFRY": "jeffry",
"JEJUDOGE": "Jejudoge",
"JELLI": "JELLI",
"JELLY": "Jelly eSports",
@@ -6351,25 +7344,32 @@
"JERRY": "Jerry Inu",
"JERRYINU": "JERRYINU",
"JES": "Jesus",
+ "JEST": "Jester",
"JESUS": "Jesus Coin",
"JET": "Jet Protocol",
+ "JETCAT": "Jetcat",
"JETCOIN": "Jetcoin",
+ "JETFUEL": "Jetfuel Finance",
"JETTON": "JetTon Game",
"JEUR": "Jarvis Synthetic Euro",
"JEW": "Shekel",
"JEWEL": "DeFi Kingdoms",
+ "JEWELRY": "Jewelry Token",
"JEX": "JEX Token",
"JF": "Jswap.Finance",
"JFI": "JackPool.finance",
"JFIN": "JFIN Coin",
"JFIVE": "Jonny Five",
+ "JFP": "JUSTICE FOR PEANUT",
"JGLP": "Jones GLP",
"JGN": "Juggernaut",
+ "JHH": "Jen-Hsun Huang",
"JIAOZI": "Jiaozi",
"JIB": "Jibbit",
"JIF": "JiffyCoin",
"JIG": "Jigen",
"JIM": "Jim",
+ "JIN": "JinPeng",
"JIND": "JINDO INU",
"JINDOGE": "Jindoge",
"JIO": "JIO Token",
@@ -6382,12 +7382,14 @@
"JKC": "JunkCoin",
"JKL": "Jackal Protocol",
"JLP": "Jupiter Perps LP",
+ "JLY": "Jellyverse",
"JM": "JustMoney",
"JMC": "Junson Ming Chan Coin",
"JMPT": "JumpToken",
"JMT": "JMTIME",
"JMZ": "Jimizz",
"JNB": "Jinbi Token",
+ "JNFTC": "Jumbo Blockchain",
"JNGL": "Jungle Labz",
"JNS": "Janus",
"JNT": "Jibrel Network Token",
@@ -6397,7 +7399,9 @@
"JOBS": "JobsCoin",
"JOC": "Speed Star JOC",
"JOE": "JOE",
+ "JOEB": "Joe Biden",
"JOEBIDEN2024 ": "JOEBIDEN2024",
+ "JOECOIN": "Joe Coin",
"JOEY": "Joey Inu",
"JOGECO": "Jogecodog",
"JOHM": "Johm lemmon",
@@ -6407,13 +7411,20 @@
"JOK": "JokInTheBox",
"JOKER": "JOKER",
"JOKERCOIN": "JokerCoin",
+ "JOKERERC": "Joker",
"JOL": "Jolofcoin",
"JOLT": "Joltify",
+ "JOMA": "Joma",
"JONES": "Jones DAO",
+ "JONESUSDC": "Jones USDC",
"JOOPS": "JOOPS",
+ "JOPER": "Joker Pepe",
+ "JOSE": "Jose",
"JOTCHUA": "Perro Dinero",
+ "JOULE": "Joule",
"JOWNES": "Alux Jownes",
"JOY": "Joystream",
+ "JOYCAT": "JoyCat Coin",
"JOYS": "JOYS",
"JOYT": "JoyToken",
"JOYTOKEN": "Joycoin",
@@ -6427,6 +7438,7 @@
"JRIT": "JERITEX",
"JRT": "Jarvis Reward Token",
"JSE": "JSEcoin",
+ "JSET": "Jsetcoin",
"JSM": "Joseon Mun",
"JSOL": "JPool Staked SOL",
"JST": "JUST",
@@ -6439,44 +7451,61 @@
"JUDGE": "JudgeCoin",
"JUGNI": "JUGNI",
"JUI": "Juiice",
+ "JUIC": "Juice",
"JUICE": "Juice Finance",
+ "JUICEB": "Juice",
"JUL": "Joule",
"JULB": "JustLiquidity Binance",
"JULD": "JulSwap",
+ "JUM": "Jumoney",
"JUMBO": "Jumbo Exchange",
"JUMP": "Jumpcoin",
"JUN": "Jun \"M\" Coin",
"JUNGLE": "JUNGLEDOGE",
+ "JUNGLEKING": "JungleKing TigerCoin",
+ "JUNIOR": "Junior",
"JUNKIE": "Junkie Cats",
"JUNO": "JUNO",
"JUP": "Jupiter",
"JUPI": "Jupiter",
"JUPSOL": "Jupiter Staked SOL",
"JUR": "Jur",
+ "JUS": "Just The Tip",
"JUSD": "JUSD Stable Token",
- "JUSDC": "Jones USDC",
+ "JUSDC": "USD Coin (TON Bridge)",
"JUSDT": "TON Bridged USDT",
+ "JUST": "just a cat",
+ "JUSTI": "Justin MEME",
"JUSTICE": "AssangeDAO",
"JUV": "Juventus Fan Token",
"JVL": "Javelin",
+ "JVT": "JVault",
"JVY": "Javvy",
"JW": "Jasan Wellness",
+ "JWBTC": "Wrapped Bitcoin (TON Bridge)",
"JWIF": "Jerrywifhat",
"JWL": "Jewels",
"JYC": "Joe-Yo Coin",
"K21": "K21",
"K2G": "Kasko2go",
+ "KAAI": "KanzzAI",
"KAAS": "KAASY.AI",
+ "KAB": "KABOSU",
"KABOSU": "Kabosu Family",
"KABY": "Kaby Arena",
"KAC": "KACO Finance",
"KACY": "Kassandra",
+ "KADYROV": "Ramzan",
"KAF": "KAIF Platform",
"KAG": "Silver",
+ "KAGE": "Kage Network",
"KAI": "KardiaChain",
+ "KAIA": "Kaia",
"KAID": "KAIDEX",
"KAIJU": "KAIJUNO8",
+ "KAIK": "KAI KEN",
"KAIKEN": "Kaiken Shiba",
+ "KAILY": "Kailith",
"KAINET": "KAINET",
"KAKA": "KAKA NFT World",
"KAKAXA": "KAKAXA",
@@ -6491,13 +7520,23 @@
"KALM": "KALM",
"KALYCOIN": "KalyCoin",
"KAM": "BitKAM",
+ "KAMA": "Kamala Horris",
+ "KAMAL": "Kamala Harris",
+ "KAMALA": "Kamala Harris",
+ "KAMALAHARRIS": "KAMALA HARRIS",
+ "KAMLA": "KAMALAMA (kamalama.org)",
"KAMPAY": "KamPay",
"KAN": "Bitkan",
+ "KANG": "Kangamoon",
"KANG3N": "Kang3n",
"KANGAL": "Kangal",
+ "KANGO": "KANGO",
"KAP": "KAP Games",
+ "KAPPY": "Kappy",
"KAPU": "Kapu",
"KAR": "Karura",
+ "KARA": "KarateCat",
+ "KARAT": "KARAT Galaxy",
"KARATE": "Karate Combat",
"KAREN": "KarenCoin",
"KARMA": "Karma",
@@ -6505,6 +7544,10 @@
"KARRAT": "KARRAT",
"KART": "Dragon Kart",
"KAS": "Kaspa",
+ "KASBOT": "KASBOT THE GUARDIAN OF 𐤊ASPA",
+ "KASHIN": "KASHIN",
+ "KASPER": "Kasper the ghost of Kaspa",
+ "KASPY": "KASPY",
"KASSIAHOME": "Kassia Home",
"KASTA": "Kasta",
"KAT": "Kambria",
@@ -6533,6 +7576,7 @@
"KCAL": "Phantasma Energy",
"KCASH": "Kcash",
"KCAT": "KING OF CATS",
+ "KCATS": "KASPA CATS",
"KCCM": "KCC MemePad",
"KCCPAD": "KCCPad",
"KCH": "Keep Calm and Hodl",
@@ -6556,27 +7600,37 @@
"KEK": "KekCoin",
"KEKE": "KEK",
"KEKEC": "THE BALKAN DWARF",
+ "KEKIUS": "Kekius Maximus",
"KEL": "KelVPN",
"KELP": "KELP",
"KELPE": "Kelp Earned Points",
"KELPIE": "Kelpie Inu",
+ "KEM": "Kem Jeng Un",
"KEMA": "Kemacoin",
- "KEN": "Kencoin",
+ "KEN": "Ken",
+ "KENCOIN": "Kencoin",
"KENDU": "Kendu Inu",
"KENKA": "KENKA METAVERSE",
"KENNEL": "Kennel Locker",
+ "KENOBI": "Obi PNut Kenobi",
"KENSHI": "Kenshi",
"KEP": "Kepler",
"KEPT": "KeptChain",
"KERMIT": "KermitTheCoin",
+ "KERN": "Kernel",
+ "KET": "KET",
"KETAMINE": "Ketamine",
"KETAN": "Ketan",
+ "KEVIN": "Kevin (kevinonbase.xyz)",
+ "KEVINTOKENME": "KEVIN (kevintoken.me)",
+ "KEVINTOKENNET": "Kevin",
"KEX": "Kira Network",
"KEXCOIN": "KexCoin",
"KEY": "SelfKey",
"KEYC": "KeyCoin",
"KEYCAT": "Keyboard Cat",
"KEYFI": "KeyFi",
+ "KEYS": "KEYS",
"KEYT": "REBIT",
"KFC": "Chicken",
"KFI": "Klever Finance",
@@ -6588,14 +7642,18 @@
"KGO": "Kiwigo",
"KGT": "Kaby Gaming Token",
"KHAI": "khai",
+ "KHEOWZOO": "khaokheowzoo",
"KHM": "Kohima",
"KI": "Genopets KI",
"KIAN": "Porta",
"KIBA": "Kiba Inu",
+ "KIBAV1": "Kiba Inu v1",
"KIBSHI": "KiboShib",
"KICK": "Kick",
"KICKS": "GetKicks",
+ "KIDEN": "RoboKiden",
"KIF": "KittenFinance",
+ "KIKI": "Kiki Flaminki",
"KIKO": "KIKO",
"KILLA": "The Bitcoin Killa",
"KILLER": "Fat Cat Killer",
@@ -6607,15 +7665,20 @@
"KIN": "Kin",
"KIND": "Kind Ads",
"KINE": "Kine Protocol",
+ "KINET": "KinetixFi",
"KING": "KING",
"KING93": "King93",
"KINGB": "King Bean",
"KINGBONK": "King Bonk",
"KINGCAT": "King Cat",
+ "KINGD": "Kingdom of Ants",
"KINGDOG": "King Dog Inu",
"KINGDOMQUEST": "Kingdom Quest",
"KINGF": "King Finance",
"KINGGROK": "King Grok",
+ "KINGNEIRO": "King Neiro",
+ "KINGO": "King of memes",
+ "KINGOF": "King Of Memes",
"KINGPEPE": "KING PEPE",
"KINGSHIB": "King Shiba",
"KINGSLERF": "King Slerf",
@@ -6626,6 +7689,7 @@
"KINGWIF": "King WIF",
"KINGY": "KINGYTON",
"KINIC": "Kinic",
+ "KINK": "Kinka",
"KINT": "Kintsugi",
"KINU": "Kragger Inu",
"KIRA": "Kira the Injective Cat",
@@ -6639,17 +7703,24 @@
"KISHU": "Kishu Inu",
"KIT": "Kitsune",
"KITA": "KITA INU",
+ "KITE": "Kite",
+ "KITEAI": "KITEAI",
"KITSU": "Kitsune Inu",
+ "KITTE": "Kittekoin",
"KITTENS": "Kitten Coin",
"KITTENWIF": "KittenWifHat",
"KITTI": "KITTI TOKEN",
- "KITTY": "Kitty Inu",
+ "KITTY": "Roaring Kitt",
+ "KITTYINU": "Kitty Inu",
+ "KITTYINUV1": "Kitty Inu v1",
+ "KITTYS": "KITTY Sol",
+ "KITTYSOL": "Kitty Solana",
"KIWI": "kiwi",
"KIZUNA": "KIZUNA",
"KKO": "Kineko",
"KKT": "Kingdom Karnage",
"KLAP": "Klap Finance",
- "KLAY": "Klaytn",
+ "KLAUS": "Klaus",
"KLC": "KiloCoin",
"KLD": "Koduck",
"KLEE": "KleeKai",
@@ -6664,6 +7735,7 @@
"KLT": "Kamaleont",
"KLUB": "KlubCoin",
"KLV": "Klever",
+ "KLY": "Klayr",
"KMA": "Calamari Network",
"KMC": "Kitsumon",
"KMD": "Komodo",
@@ -6680,6 +7752,7 @@
"KNFT": "KStarNFT",
"KNG": "BetKings",
"KNGN": "KingN Coin",
+ "KNI": "Knights of Cathena",
"KNIGHT": "Forest Knight",
"KNINE": "K9 Finance",
"KNJ": "Kunji Finance",
@@ -6690,7 +7763,9 @@
"KNS": "Kenshi",
"KNT": "Knekted",
"KNTO": "Kento",
+ "KNU": "Keanu",
"KNW": "Knowledge",
+ "KOAI": "KOI",
"KOBE": "Shabu Shabu",
"KOBO": "KoboCoin",
"KODA": "Koda Cryptocurrency",
@@ -6698,6 +7773,7 @@
"KOGE": "BNB48 Club Token",
"KOGECOIN": "KogeCoin.io",
"KOI": "Koi",
+ "KOII": "Koii",
"KOIN": "Koinos",
"KOINB": "KoinBülteni Token",
"KOINETWORK": "Koi Network",
@@ -6706,19 +7782,26 @@
"KOK": "KOK Coin",
"KOKO": "KokoSwap",
"KOL": "Kollect",
+ "KOLANA": "KOLANA",
"KOLION": "Kolion",
+ "KOLT": "Kolt",
"KOM": "Kommunitas",
+ "KOMA": "Koma Inu",
"KOMO": "Komoverse",
"KOMP": "Kompass",
"KOMPETE": "KOMPETE",
"KON": "KonPay",
+ "KONAN": "Konan of Kaspa",
+ "KONET": "KONET",
"KONG": "KONG",
"KONO": "Konomi Network",
"KORA": "Kortana",
+ "KORC": "King of Referral Coin",
"KORE": "KORE Vault",
"KOREC": "Kore",
"KORRA": "KORRA",
"KOSS": "Koss",
+ "KOTARO": "KOTARO",
"KOTO": "Koto",
"KOY": "Koyo",
"KOZ": "Kozjin",
@@ -6726,13 +7809,19 @@
"KP4R": "Keep4r",
"KPAD": "KickPad",
"KPAPA": "KPAPA",
+ "KPAW": "KasPaw",
"KPC": "KEEPs Coin",
"KPHI": "Kephi Gallery",
+ "KPK": "ParkCoin",
"KPL": "Kepple",
"KPN": "KonnektVPN",
"KPOP": "KPOP Coin",
+ "KPOPFUN": "KPOP (kpop.fun)",
"KRAK": "Kraken",
"KRATOS": "KRATOS",
+ "KRAV": "Krav",
+ "KRAZY": "krazy n.d.",
+ "KRAZYKAMALA": "KRAZY KAMALA",
"KRB": "Karbo",
"KRC": "KRCoin",
"KRD": "Krypton DAO",
@@ -6755,6 +7844,8 @@
"KRUGERCOIN": "KrugerCoin",
"KRX": "RAVN Korrax",
"KRY": "Krypdraw",
+ "KRYP": "Krypto Trump",
+ "KS": "kittyspin",
"KS2": "Kingdomswap",
"KSC": "KStarCoin",
"KSH": "Kahsh",
@@ -6774,6 +7865,7 @@
"KTN": "Kattana",
"KTO": "Kounotori",
"KTON": "Darwinia Commitment Token",
+ "KTR": "Kitty Run",
"KTS": "Klimatas",
"KTT": "K-Tune",
"KTX": "KwikTrust",
@@ -6781,6 +7873,7 @@
"KUBE": "KubeCoin",
"KUBO": "KUBO",
"KUBOS": "KubosCoin",
+ "KUDAI": "Kudai",
"KUE": "Kuende",
"KUJI": "Kujira",
"KUKU": "KuKu",
@@ -6788,6 +7881,7 @@
"KUMU": "Kumu Finance",
"KUNAI": "KunaiKash",
"KUNCI": "Kunci Coin",
+ "KUNDALINI": "Kundalini is a real girl",
"KUR": "Kuro",
"KURO": "Kurobi",
"KURT": "Kurrent",
@@ -6804,6 +7898,7 @@
"KWAI": "KWAI",
"KWATT": "4New",
"KWD": "KIWI DEFI",
+ "KWEEN": "KWEEN",
"KWENTA": "Kwenta",
"KWH": "KWHCoin",
"KWIK": "KwikSwap",
@@ -6815,21 +7910,27 @@
"KYCC": "KYCCOIN",
"KYL": "Kylin Network",
"KYOKO": "Kyoko",
+ "KYRA": "KYRA",
+ "KYSOL": "Kyros Restaked SOL",
"KYTE": "Kambria Yield Tuning Engine",
"KYUB": "Kyuubi",
"KYVE": "KYVE Network",
"KZC": "KZCash",
"KZEN": "Kaizen",
"L": "L inu",
+ "L1": "Lamina1",
"L2": "Leverj Gluon",
"L2DAO": "Layer2DAO",
+ "L3": "Layer3",
"L3P": "Lepricon",
"L3USD": "L3USD",
"L7": "L7",
"LA": "LATOKEN",
"LAB": "Labrys",
+ "LABORCRYPTO": "LaborCrypto",
"LABRA": "LabraCoin",
"LABS": "LABS Group",
+ "LABUBU": "Labubu",
"LABX": "Stakinglab",
"LABZ": "Insane Labz",
"LACCOIN": "LocalAgro",
@@ -6840,6 +7941,7 @@
"LADYS": "Milady Meme Coin",
"LAEEB": "LaEeb",
"LAELAPS": "Laelaps",
+ "LAFFIN": "Laffin Kamala",
"LAI": "LayerAI",
"LAIKA": "Laika Protocol",
"LAINESOL": "Laine Staked SOL",
@@ -6852,35 +7954,45 @@
"LANC": "Lanceria",
"LAND": "Landshare",
"LANDB": "LandBox",
+ "LANDLORD": "LANDLORD RONALD",
"LANDS": "Two Lands",
"LANDV1": "Landshare v1",
+ "LANDW": "LandWolf",
"LANDWOLF": "LANDWOLF",
+ "LANDWOLFETH": "Landwolf",
"LANDWU": "LandWu",
"LANE": "LaneAxis",
"LAO": "LC Token",
+ "LAOS": "LAOS Network",
"LAPI": "Lapis Inu",
"LAPTOP": "Hunter Biden's Laptop",
+ "LAPUPU": "Lapupu",
"LAR": "LinkArt",
"LARIX": "Larix",
"LARO": "Anito Legends",
"LARR": "larrywifhat",
"LARRY": "LarryCoin",
"LAS": "LNAsolution Coin",
+ "LASOL": "LamaSol",
"LAT": "PlatON Network",
"LATOM": "Liquid ATOM",
"LATTE": "LatteSwap",
"LATX": "Latium",
"LAUGHCOIN": "Laughcoin",
"LAUNCH": "Launchblock.com",
- "LAVA": "Lavaswap",
+ "LAVA": "Lava Network",
+ "LAVASWAP": "Lavaswap",
"LAVAX": "LavaX Labs",
"LAVE": "Lavandos",
"LAVITA": "Lavita AI",
"LAW": "Law Token",
+ "LAWO": "Law Of Attraction",
"LAX": "LAPO",
+ "LAY3R": "AutoLayer",
"LAYER": "UniLayer",
"LAZ": "Lazarus",
"LAZIO": "Lazio Fan Token",
+ "LAZYCAT": "LAZYCAT",
"LB": "LoveBit",
"LBA": "Cred",
"LBC": "LBRY Credits",
@@ -6888,21 +8000,24 @@
"LBL": "LABEL Foundation",
"LBLOCK": "Lucky Block",
"LBM": "Libertum",
- "LBR": "LaborCrypto",
+ "LBR": "Lybra Finance",
+ "LBRV1": "Lybra Finance v1",
"LBT": "Law Blocks",
- "LBTC": "LiteBitcoin",
+ "LBTC": "Lombard Staked BTC",
"LBXC": "LUX BIO EXCHANGE COIN",
"LC": "Lotus Capital",
"LC4": "LEOcoin",
"LCASH": "LitecoinCash",
+ "LCAT": "Lion Cat",
"LCC": "LitecoinCash",
"LCD": "Lucidao",
"LCG": "LCG",
+ "LCI": "LOVECHAIN",
"LCK": "Luckbox",
"LCMG": "ElysiumG",
"LCMS": "LCMS",
"LCP": "Litecoin Plus",
- "LCR": "Lucre",
+ "LCR": "Lucro",
"LCRO": "Liquid CRO",
"LCS": "LocalCoinSwap",
"LCSN": "Lacostoken",
@@ -6930,6 +8045,8 @@
"LEE": "Love Earn Enjoy",
"LEET": "LeetSwap",
"LEG": "Legia Warsaw Fan Token",
+ "LEGEND": "Legend",
+ "LEGION": "LEGION",
"LEGO": "Lego Coin",
"LEIA": "Leia",
"LELE": "Lelecoin",
@@ -6938,6 +8055,7 @@
"LEMN": "LEMON",
"LEMO": "LemoChain",
"LEMON": "LemonCoin",
+ "LEMX": "LEMON",
"LEN": "Liqnet",
"LENARD": "Lenard",
"LEND": "Aave",
@@ -6945,17 +8063,23 @@
"LENDS": "Lends",
"LENFI": "Lenfi",
"LENIN": "LeninCoin",
+ "LENS": "Len Sassaman (len-sassaman.vip)",
"LEO": "LEO Token",
+ "LEOCOIN": "LEO",
"LEOPARD": "Leopard",
"LEOS": "Leonicorn Swap",
"LEOX": "Galileo",
"LEPA": "Lepasa",
"LEPEN": "LePenCoin",
+ "LEPER": "Leper",
"LESBIAN": "Lesbian Inu",
+ "LESLIE": "Leslie",
"LESS": "Less Network",
"LESSF": "LessFnGas",
+ "LESTER": "Litecoin Mascot",
"LET": "LinkEye",
"LETIT": "Letit",
+ "LETS": "Let's WIN This",
"LETSGO": "Lets Go Brandon",
"LEU": "CryptoLEU",
"LEV": "Levante U.D. Fan Token",
@@ -6971,9 +8095,11 @@
"LEZGI": "LEZGI Token",
"LF": "Linkflow",
"LFC": "BigLifeCoin",
+ "LFDOG": "lifedog",
"LFG": "Gamerse",
"LFGO": "Lets Fuckin Go",
"LFI": "LunaFi",
+ "LFIT": "LFIT",
"LFNTY": "Lifinity",
"LFT": "Lend Flare Dao",
"LFW": "Linked Finance World",
@@ -6982,6 +8108,7 @@
"LGC": "LiveGreen Coin",
"LGCY": "LGCY Network",
"LGD": "Legends Cryptocurrency",
+ "LGNDX": "LegendX",
"LGO": "Legolas Exchange",
"LGOLD": "LYFE GOLD",
"LGOT": "LGO Token",
@@ -7002,27 +8129,36 @@
"LIBRE": "Libre",
"LIC": "Ligercoin",
"LICK": "PetLFG",
+ "LICKER": "LICKER",
"LICO": "Liquid Collectibles",
"LID": "Liquidity Dividends Protocol",
"LIDER": "Lider Token",
+ "LIE": "it’s all a lie",
"LIEN": "Lien",
"LIF": "Winding Tree",
"LIF3": "LIF3",
"LIFE": "Life Crypto",
"LIFEBIRD": "LIFEBIRD",
+ "LIFET": "LifeTime",
"LIFETOKEN": "LIFE",
"LIFT": "Uplift",
"LIGER": "Ligercoin",
"LIGHT": "LightChain",
+ "LIGHTSPEED": "LightSpeedCoin",
"LIGMA": "Ligma Node",
"LIGO": "Ligo",
+ "LIHUA": "LIHUA",
"LIKE": "Only1",
"LIKEC": "LikeCoin",
"LILA": "LiquidLayer",
+ "LILB": "Lil Brett",
"LILFLOKI": "Lil Floki",
"LILPUMP": "lilpump",
+ "LILY": "LILY-The Gold Digger",
+ "LIMBO": "Limbo",
"LIME": "iMe Lab",
"LIMEX": "Limestone Network",
+ "LIMITEDCOIN": "Limited Coin",
"LIMO": "Limoverse",
"LIMX": "LimeCoinX",
"LINA": "Linear",
@@ -7031,6 +8167,7 @@
"LINDACEO": "LindaYacc Ceo",
"LINEA": "Linea",
"LING": "Lingose",
+ "LINGO": "Lingo",
"LINK": "Chainlink",
"LINKA": "LINKA",
"LINKC": "LINKCHAIN",
@@ -7039,6 +8176,7 @@
"LINSPIRIT": "linSpirit",
"LINU": "Luna Inu",
"LINX": "Linx",
+ "LIO": "Lio",
"LION": "Lion Token",
"LIPC": "LIpcoin",
"LIPS": "LipChain",
@@ -7046,13 +8184,16 @@
"LIQD": "Liquid Finance",
"LIQR": "Topshelf Finance",
"LIQUI": "Liquidus",
+ "LIQUIDIUM": "LIQUIDIUM•TOKEN",
"LIR": "Let it Ride",
"LIS": "Realis Network",
"LISA": "Lisa Simpson",
"LIST": "KList Protocol",
"LISTA": "Lista DAO",
+ "LISUSD": "lisUSD",
"LIT": "Litentry",
"LITE": "Lite USD",
+ "LITEBTC": "LiteBitcoin",
"LITENETT": "Litenett",
"LITH": "Lithium Finance",
"LITHIUM": "Lithium",
@@ -7061,6 +8202,7 @@
"LITT": "LitLab Games",
"LIV": "LiviaCoin",
"LIVE": "TRONbetLive",
+ "LIVESEY": "Dr. Livesey",
"LIVESTARS": "Live Stars",
"LIXX": "Libra Incentix",
"LIZ": "Lizus Payment",
@@ -7081,6 +8223,7 @@
"LLAND": "Lyfe Land",
"LLG": "Loligo",
"LLION": "Lydian Lion",
+ "LLM": "Large Language Model Based",
"LLT": "LILLIUS",
"LM": "LeisureMeta",
"LMAO": "LMAO Finance",
@@ -7088,6 +8231,8 @@
"LMCH": "Latamcash",
"LMCSWAP": "LimoCoin SWAP",
"LMEOW": "lmeow",
+ "LMF": "Lamas Finance",
+ "LMQ": "Lightning McQueen",
"LMR": "Lumerin",
"LMT": "Lympo Market Token",
"LMTOKEN": "LM Token",
@@ -7109,6 +8254,7 @@
"LNX": "Lunox Token",
"LOA": "League of Ancients",
"LOAF": "LOAF CAT",
+ "LOAFCAT": "LOAFCAT",
"LOAN": "Lendoit",
"LOBO": "LOBO•THE•WOLF•PUP",
"LOBS": "Lobstex",
@@ -7118,6 +8264,7 @@
"LOCG": "LOCGame",
"LOCI": "LociCoin",
"LOCK": "Contracto",
+ "LOCKIN": "LOCK IN",
"LOCO": "Loco",
"LOCOM": "Locomotir",
"LOCUS": "Locus Chain",
@@ -7127,15 +8274,20 @@
"LOFI": "LOFI",
"LOG": "Wood Coin",
"LOGO": "LOGOS",
+ "LOGX": "LogX Network",
"LOIS": "Lois Token",
"LOKA": "League of Kingdoms",
"LOKR": "Polkalokr",
"LOL": "EMOGI Network",
"LOLA": "Lola",
+ "LOLATHECAT": "Lola",
"LOLC": "LOL Coin",
+ "LOLLY": "Lollipop",
+ "LOLO": "Lolo",
"LON": "Tokenlon",
"LONG": "Longdrink Finance",
"LONGFU": "LONGFU",
+ "LONGM": "Long Mao",
"LONGSHINE": "LongShine",
"LOOK": "LookCoin",
"LOOKS": "LooksRare",
@@ -7144,6 +8296,7 @@
"LOON": "Loon Network",
"LOONG": "PlumpyDragons",
"LOOP": "LOOP",
+ "LOOPIN": "LooPIN Network",
"LOOPY": "Loopy",
"LOOT": "LootBot",
"LOOTEX": "Lootex",
@@ -7163,6 +8316,7 @@
"LOTTY": "Lotty",
"LOTUS": "The White Lotus",
"LOUD": "Loud Market",
+ "LOULOU": "LOULOU",
"LOV": "LoveChain",
"LOVE": "Deesse",
"LOVELY": "Lovely finance",
@@ -7177,6 +8331,7 @@
"LPI": "LPI DAO",
"LPK": "Kripton",
"LPL": "LinkPool",
+ "LPM": "Love Power Market",
"LPNT": "Luxurious Pro Network Token",
"LPOOL": "Launchpool",
"LPT": "Livepeer",
@@ -7190,12 +8345,16 @@
"LQDR": "LiquidDriver",
"LQDX": "Liquid Crypto",
"LQR": "Laqira Protocol",
+ "LQT": "Lifty",
"LQTY": "Liquity",
"LRC": "Loopring",
+ "LRDS": "BLOCKLORDS",
"LRG": "Largo Coin",
"LRN": "Loopring [NEO]",
+ "LRT": "LandRocker",
+ "LRT2": "LRT Squared",
"LSC": "LS Coin",
- "LSD": "LightSpeedCoin",
+ "LSD": "Pontem Liquidswap",
"LSDOGE": "LSDoge",
"LSETH": "Liquid Staked ETH",
"LSHARE": "LSHARE",
@@ -7212,6 +8371,7 @@
"LSWAP": "LoopSwap",
"LT": "Loctite Assets Token",
"LTA": "Litra",
+ "LTAI": "LibertAI",
"LTB": "Litebar",
"LTBC": "LTBCoin",
"LTBTC": "Lightning Bitcoin",
@@ -7224,7 +8384,7 @@
"LTCR": "LiteCreed",
"LTCU": "LiteCoin Ultra",
"LTCX": "LitecoinX",
- "LTD": "Limited Coin",
+ "LTD": "Living the Dream",
"LTE": "Local Token Exchange",
"LTEX": "Ltradex",
"LTG": "LiteCoin Gold",
@@ -7238,6 +8398,7 @@
"LTPC": "Lightpaycoin",
"LTR": "LogiTron",
"LTRBT": "Little Rabbit",
+ "LTRBTV1": "Little Rabbit v1",
"LTS": "Litestar Coin",
"LTT": "LocalTrade",
"LTX": "Lattice Token",
@@ -7247,27 +8408,36 @@
"LUBE": "Joe Lube Coin",
"LUC": "Play 2 Live",
"LUCA": "LUCA",
+ "LUCE": "Luce",
"LUCHOW": "LunaChow",
+ "LUCI": "LUCI",
"LUCK": "Lucky Cat",
"LUCKY": "Lucky Lion",
"LUCKYB": "LuckyBlocks",
"LUCKYS": "LuckyStar",
"LUCKYSLP": "LuckysLeprecoin",
+ "LUCRE": "Lucre",
"LUCY": "Lucy",
"LUDO": "Ludo",
"LUFC": "Leeds United Fan Token",
"LUFFY": "Luffy",
"LUFFYG": "Luffy G5",
"LUFFYOLD": "Luffy",
+ "LUFFYV1": "Luffy v1",
"LUIGI": "Luigi Inu",
"LUIS": "Tongue Cat",
"LULU": "LULU",
"LUM": "Illuminates",
"LUMA": "LUMA Token",
"LUMI": "LUMI Credits",
+ "LUMIA": "Lumia",
+ "LUMIO": "Solana Mascot",
+ "LUMOS": "Lumos",
"LUN": "Lunyr",
"LUNA": "Terra",
+ "LUNAB": "Luna by Virtuals",
"LUNAR": "Lunar",
+ "LUNARLENS": "Lunarlens",
"LUNAT": "Lunatics",
"LUNC": "Terra Classic",
"LUNCARMY": "LUNCARMY",
@@ -7282,7 +8452,8 @@
"LUSH": "Lush AI",
"LUT": "Cinemadrom",
"LUTETIUM": "Lutetium Coin",
- "LUX": "LUXCoin",
+ "LUX": "Lux Token",
+ "LUXCOIN": "LUXCoin",
"LUXO": "Luxo",
"LUXU": "Luxury Travel Token",
"LUXY": "Luxy",
@@ -7299,8 +8470,10 @@
"LXF": "LuxFi",
"LXT": "LITEX",
"LXTO": "LuxTTO",
+ "LYA": "Huralya",
"LYB": "LyraBar",
"LYC": "LycanCoin",
+ "LYDI": "Lydia Finance",
"LYF": "Lillian Token",
"LYFE": "Lyfe",
"LYK": "Loyakk Vega",
@@ -7321,31 +8494,43 @@
"LYZI": "Lyzi",
"LZ": "LaunchZone",
"LZM": "LoungeM",
+ "LZUSDC": "LayerZero Bridged USDC (Fantom)",
"M": "MetaVerse-M",
"M1": "SupplyShock",
"M2O": "M2O Token",
+ "M3M3": "M3M3",
"M87": "MESSIER",
"MAAL": "Maal Chain",
"MABA": "Make America Based Again",
"MAC": "MachineCoin",
"MACHO": "macho",
"MADA": "MilkADA",
+ "MADAGASCARTOKEN": "Madagascar Token",
"MADANA": "MADANA",
"MADC": "MadCoin",
+ "MADCOIN": "MAD",
+ "MADH": "Madhouse",
"MADOG": "MarvelDoge",
+ "MADP": "Mad Penguin",
"MADPEPE": "Mad Pepe",
"MAEP": "Maester Protocol",
"MAF": "MetaMAFIA",
- "MAG": "Magnet",
- "MAGA": "MAGA Hat",
+ "MAG": "Magnify Cash",
+ "MAGA": "MAGA",
"MAGA2024": "MAGA2024",
"MAGAA": "MAGA AGAIN",
+ "MAGAC": "MAGA CAT",
+ "MAGACA": "MAGA CAT",
"MAGACAT": "MAGACAT",
"MAGADOGE": "MAGA DOGE",
+ "MAGAHAT": "MAGA Hat",
"MAGAIBA": "Magaiba",
+ "MAGAN": "Maganomics On Solana",
"MAGANOMICS": "Maganomics",
+ "MAGAP": "MAGA PEPE",
"MAGAPEPE": "MAGA PEPE",
"MAGASHIB": "MAGA SHIB",
+ "MAGASOL": "MAGA",
"MAGATRUMP": "MAGA Trump",
"MAGE": "MetaBrands",
"MAGIC": "Magic",
@@ -7353,7 +8538,13 @@
"MAGICK": "Cosmic Universe Magick",
"MAGICV": "Magicverse",
"MAGIK": "Magik Finance",
+ "MAGN": "Magnate Finance",
"MAGNET": "Yield Magnet",
+ "MAGNET6900": "MAGNET6900",
+ "MAGNETWORK": "Magnet",
+ "MAGOA": "Make America Great Once Again",
+ "MAGPAC": "MAGA Meme PAC",
+ "MAH": "Mahabibi Bin Solman",
"MAHA": "MahaDAO",
"MAI": "Mindsync",
"MAIA": "Maia",
@@ -7361,7 +8552,11 @@
"MAIL": "CHAINMAIL",
"MAINSTON": "Ston",
"MAJO": "Majo",
+ "MAJOR": "Major Frog",
+ "MAK": "MetaCene",
"MAKE": "MAKE",
+ "MAKEA": "Make America Healthy Again",
+ "MAKEE": "Make Ethereum Great Again",
"MAKI": "MakiSwap",
"MALGO": "milkALGO",
"MALL": "Metamall",
@@ -7371,12 +8566,14 @@
"MAN": "Matrix AI Network",
"MANA": "Decentraland",
"MANC": "Mancium",
+ "MAND": "Mandala Exchange Token",
"MANDALA": "Mandala Exchange Token",
"MANDOX": "MandoX",
"MANE": "MANE",
"MANEKI": "MANEKI",
"MANGA": "Manga Token",
"MANIA": "ScapesMania",
+ "MANIFEST": "Manifest",
"MANNA": "Manna",
"MANORUKA": "ManoRuka",
"MANT": "Mantle USD",
@@ -7384,6 +8581,7 @@
"MANTLE": "Mantle",
"MANYU": "Little Manyu",
"MAO": "Mao",
+ "MAOW": "MAOW",
"MAP": "MAP Protocol",
"MAPC": "MapCoin",
"MAPE": "Mecha Morphing",
@@ -7391,6 +8589,7 @@
"MAPS": "MAPS",
"MAR3": "Mar3 AI",
"MARCO": "MELEGA",
+ "MARCUS": "Marcus Cesar Inu",
"MARE": "Mare Finance",
"MARGA": "Margaritis",
"MARGINLESS": "Marginless",
@@ -7399,6 +8598,7 @@
"MARIO": "MARIO CEO",
"MARK": "Benchmark Protocol",
"MARKE": "Market Ledger",
+ "MARKETMOVE": "MarketMove",
"MARLEY": "Marley Token",
"MARMAJ": "marmaj",
"MARO": "Maro",
@@ -7406,6 +8606,7 @@
"MARS4": "MARS4",
"MARSC": "MarsCoin",
"MARSH": "Unmarshal",
+ "MARSO": "Marso.Tech",
"MARSRISE": "MarsRise",
"MARSUPILAMI": "MARSUPILAMI INU",
"MARSW": "Marswap",
@@ -7430,36 +8631,49 @@
"MASTER": "Mastercoin",
"MASTERCOIN": "MasterCoin",
"MASTERMINT": "MasterMint",
+ "MASTERTRADER": "MasterTraderCoin",
"MASYA": "MASYA",
"MAT": "MiniApps",
"MATA": "Ninneko",
"MATAR": "MATAR AI",
"MATCH": "Matching Game",
"MATE": "Mate",
+ "MATES": "MATES",
"MATH": "MATH",
"MATIC": "Polygon",
"MATICX": "Stader MaticX",
"MATPAD": "MaticPad",
"MATRIX": "Matrix Labs",
+ "MATT": "Matt Furie",
+ "MATTER": "AntiMatter",
"MAU": "MAU",
"MAUW": "MAUW",
"MAV": "Maverick Protocol",
+ "MAVAX": "Avalanche (Multichain)",
"MAVIA": "Heroes of Mavia",
"MAW": "Mountain Sea World",
- "MAX": "MaxCoin",
+ "MAWA": "Kumala Herris",
+ "MAWC": "Magawincat",
+ "MAX": "Matr1x",
+ "MAXCOIN": "MaxCoin",
+ "MAXETH": "Max on ETH",
"MAXI": "Maximus",
"MAXL": "Maxi protocol",
"MAXR": "Max Revive",
"MAXX": "MAXX Finance",
"MAY": "Theresa May Coin",
"MAYACOIN": "MayaCoin",
+ "MAYO": "Mr Mayonnaise the Cat",
"MAYP": "Maya Preferred",
"MAZC": "MyMazzu",
"MAZI": "MaziMatic",
"MAZZE": "Mazze",
"MB": "MineBee",
+ "MB28": "MBridge28",
"MB4": "Matthew Box 404",
"MB8": "MB8 Coin",
+ "MBAG": "MoonBag",
+ "MBANK": "MetaBank",
"MBAPEPE": "MBAPEPE",
"MBASE": "Minebase",
"MBC": "MicroBitcoin",
@@ -7470,12 +8684,16 @@
"MBET": "MoonBet",
"MBF": "MoonBear.Finance",
"MBI": "Monster Byte Inc",
+ "MBID": "myBID",
+ "MBILLY": "MAMA BILLY",
"MBIT": "Mbitbooks",
"MBL": "MovieBloc",
"MBLC": "Mont Blanc",
"MBLK": "Magical Blocks",
+ "MBLV1": "MovieBloc v1",
"MBM": "MobileBridge Momentum",
"MBN": "Mobilian Coin",
+ "MBNB": "Binance Coin (Multichain)",
"MBONK": "megaBonk",
"MBOT": "MoonBot",
"MBOX": "MOBOX",
@@ -7487,7 +8705,9 @@
"MBTX": "MinedBlock",
"MBX": "Marblex",
"MC": "Merit Circle",
+ "MCA": "Mcashchain",
"MCADE": "Metacade",
+ "MCAKE": "EasyCake",
"MCAP": "MCAP",
"MCAR": "MasterCar",
"MCASH": "Monsoon Finance",
@@ -7496,7 +8716,10 @@
"MCB": "MCDEX",
"MCC": "Magic Cube Coin",
"MCD": "CDbio",
+ "MCDAI": "Dai (Multichain)",
+ "MCDULL": "McDull",
"MCELO": "Moola Celo",
+ "MCEN": "Main Character Energy",
"MCEUR": "Moola Celo EUR",
"MCF": "MCFinance",
"MCG": "MicroChains Gov Token",
@@ -7509,6 +8732,7 @@
"MCN": "mCoin",
"MCO": "Crypto.com",
"MCO2": "Moss Carbon Credit",
+ "MCOI": "MCOIN",
"MCOIN": "MCOIN",
"MCONTENT": "MContent",
"MCP": "My Crypto Play",
@@ -7518,10 +8742,12 @@
"MCRT": "MagicCraft",
"MCS": "MCS Token",
"MCT": "MyConstant",
+ "MCTO": "McToken",
"MCTP": "Metacraft",
"MCU": "MediChain",
"MCUSD": "Moola Celo USD",
"MCV": "MCV Token",
+ "MD": "MetaDeck",
"MDA": "Moeda",
"MDAI": "MindAI",
"MDAO": "MarsDAO",
@@ -7535,6 +8761,7 @@
"MDICE": "Multidice",
"MDM": "Medium",
"MDN": "Modicoin",
+ "MDOGE": "First Dog In Mars",
"MDR": "Mudra MDR",
"MDS": "MediShares",
"MDT": "Measurable Data Token",
@@ -7543,7 +8770,7 @@
"MDUS": "MEDIEUS",
"MDX": "Mdex (BSC)",
"MDXH": "Mdex (HECO)",
- "ME": "All.me",
+ "ME": "Magic Eden",
"MEAN": "Meanfi",
"MEB": "Meblox Protocol",
"MEC": "MegaCoin",
@@ -7557,6 +8784,7 @@
"MEDIC": "MedicCoin",
"MEDICO": "Mediconnect",
"MEDIT": "MediterraneanCoin",
+ "MEDUSA": "MEDUSA",
"MEE": "Medieval Empires",
"MEED": "Meeds DAO",
"MEER": "Qitmeer Network",
@@ -7566,17 +8794,23 @@
"MEFA": "Metaverse Face",
"MEGA": "MegaFlash",
"MEGABOT": "Megabot",
+ "MEGAD": "Mega Dice Casino",
"MEGAHERO": "MEGAHERO",
"MEGALAND": "Metagalaxy Land",
"MEGALANDV1": "Metagalaxy Land v1",
+ "MEGAX": "Megahex",
"MEGE": "MEGE",
"MEH": "meh",
+ "MEI": "Mei Solutions",
+ "MEIZHU": "GUANGZHOU ZOO NEW BABY PANDA",
"MEL": "MELX",
- "MELANIA": "Melania Trump",
+ "MELANIA": "Melania Meme",
+ "MELANIATRUMP": "Melania Trump",
"MELB": "Minelab",
"MELD": "MELD",
"MELI": "Meli Games",
"MELLO": "Mello Token",
+ "MELLOW": "Mellow Man",
"MELLSTROY": "MELLSTROY",
"MELO": "Melo Token",
"MELODITY": "Melodity",
@@ -7592,18 +8826,24 @@
"MEMEETF": "Meme ETF",
"MEMEFI": "MemeFi",
"MEMEINU": "Meme Inu",
+ "MEMEM": "Meme Man",
"MEMEME": "MEMEME",
"MEMEMINT": "MEME MINT",
"MEMEMUSK": "MEME MUSK",
"MEMERUNE": "MEME•ECONOMICS",
"MEMES": "MemeCoinDAO",
+ "MEMESAI": "Memes AI",
+ "MEMESQUAD": "Meme Squad",
"MEMET": "MEMETOON",
"MEMETIC": "Memetic",
"MEMORYCOIN": "MemoryCoin",
+ "MEN": "METAHUB FINANCE",
"MENDI": "Mendi Finance",
"MENGO": "Flamengo Fan Token",
"MENLO": "Menlo One",
+ "MEO": "Meow Of Meme",
"MEOW": "Zero Tech",
+ "MEOWETH": "Meow",
"MEOWG": "MeowGangs",
"MEOWIF": "Meowifhat",
"MEOWM": "Meow Meow Coin",
@@ -7619,6 +8859,7 @@
"MERIDIAN": "Meridian Network LOCK",
"MERKLE": "Merkle Network",
"MERL": "Merlin Chain",
+ "MERLIN": "Oldest Raccoon",
"MERY": "Mistery On Cro",
"MESA": "MetaVisa",
"MESG": "MESG",
@@ -7626,16 +8867,23 @@
"MESSI": "MESSI COIN",
"MESSU": "Loinel Messu",
"MET": "Metronome",
- "META": "Metadium",
+ "META": "MetaDAO",
+ "METAA": "META ARENA",
"METABOT": "Robot Warriors",
"METAC": "Metacoin",
+ "METACA": "MetaCash",
"METACAT": "MetaCat",
+ "METACLOUD": "Metacloud",
"METACR": "Metacraft",
+ "METAD": "MetaDoge",
+ "METADIUM": "Metadium",
"METADOGE": "MetaDoge",
+ "METADOGEV1": "MetaDoge V1",
"METADOGEV2": "MetaDoge V2",
"METAF": "MetaFastest",
"METAG": "MetagamZ",
"METAGEAR": "MetaGear",
+ "METAIVERSE": "MetAIverse",
"METAL": "Metal Blockchain",
"METALCOIN": "MetalCoin",
"METAMEME": "met a meta metameme",
@@ -7646,13 +8894,15 @@
"METAQ": "MetaQ",
"METAS": "Metaseer",
"METAT": "MetaTrace",
+ "METATI": "Metatime Coin",
+ "METATR": "MetaTrace Utility Token",
"METAUFO": "MetaUFO",
"METAV": "MetaVPad",
+ "METAVE": "Metaverse Convergence",
"METAVIE": "Metavie",
"METAW": "MetaWorth",
"METAX": "MetaverseX",
"METEOR": "Meteorite Network",
- "METER": "Meter Stable",
"METFI": "MetFi",
"METH": "Mantle Staked Ether",
"METI": "Metis",
@@ -7663,6 +8913,7 @@
"METRO": "Metropoly",
"MEU": "MetaUnit",
"MEV": "MEVerse",
+ "MEVETH": "mevETH",
"MEVR": "Metaverse VR",
"MEW": "cat in a dogs world",
"MEWC": "Meowcoin",
@@ -7686,10 +8937,12 @@
"MFPS": "Meta FPS",
"MFS": "Moonbase File System",
"MFT": "Hifi Finance (Old)",
+ "MFTM": "Fantom (Multichain)",
"MFTU": "Mainstream For The Underground",
"MFUND": "Memefund",
"MFX": "MFChain",
"MG": "MinerGate Token",
+ "MG8": "Megalink",
"MGAMES": "Meme Games",
"MGAR": "Metagame Arena",
"MGC": "Meta Games Coin",
@@ -7721,24 +8974,33 @@
"MIC": "Mithril Cash",
"MICE": "Mice",
"MICHI": "michi",
+ "MICK": "Mickey Meme",
"MICKEY": "Steamboat Willie",
"MICRO": "Micromines",
+ "MICRODOGE": "MicroDoge",
"MIDAI": "Midway AI",
"MIDAS": "Midas",
"MIDASDOLLAR": "Midas Dollar Share",
"MIDN": "Midnight",
+ "MIDNIGHT": "Midnight",
"MIE": "MIE Network",
"MIF": "monkeywifhat",
"MIG": "Migranet",
+ "MIGGLEI": "Migglei",
+ "MIGGLES": "Mr Miggles",
"MIGMIG": "MigMig Swap",
+ "MIHARU": "Smiling Dolphin",
"MIIDAS": "Miidas NFT",
"MIININGNFT": "MiningNFT",
+ "MIKE": "Mike",
"MIKS": "MIKS COIN",
"MIL": "Milllionaire Coin",
+ "MILA": "MILADY MEME TOKEN",
"MILE": "milestoneBased",
"MILEI": "MILEI",
"MILK": "Milkshake Swap",
"MILK2": "Spaceswap MILK2",
+ "MILKBAG": "MILKBAG",
"MILKYWAY": "MilkyWayZone",
"MILLI": "Million",
"MILLY": "milly",
@@ -7746,6 +9008,7 @@
"MILOCEO": "Milo CEO",
"MILOCOIN": "MiloCoin",
"MILODOG": "MILO DOG",
+ "MILOP": "MILO Project",
"MIM": "Magic Internet Money",
"MIMATIC": "MAI",
"MIMI": "MIMI Money",
@@ -7755,28 +9018,38 @@
"MINA": "Mina Protocol",
"MINC": "MinCoin",
"MIND": "Morpheus Labs",
+ "MINDC": "MindCoin",
"MINDCOIN": "MindCoin",
"MINDEX": "Mindexcoin",
"MINDGENE": "Mind Gene",
"MINDS": "Minds",
"MINE": "SpaceMine",
+ "MINEA": "Mine AI",
"MINER": "MINER",
"MINERALS": "Minerals Coin",
"MINES": "MINESHIELD",
"MINETTE": "Vibe Cat",
"MINEX": "Minex",
- "MINI": "Mini",
+ "MINGO": "Mingo",
+ "MINI": "mini",
"MINIBNBTIGER": "MiniBNBTiger",
+ "MINID": "Mini Donald",
"MINIDOGE": "MiniDOGE",
"MINIFOOTBALL": "Minifootball",
"MINIMYRO": "Mini Myro",
+ "MININEIRO": "Mini Neiro",
+ "MININGWATCHDOG": "Miningwatchdog Smartchain",
"MINION": "Minions INU",
+ "MINIP": "MiniPepe Coin",
"MINIPEPE": "MiniPepe",
+ "MINIS": "Mini",
"MINISHIB": "miniSHIB ETH",
"MINO": "MINO INU",
+ "MINOCOINCTO": "MINO",
"MINS": "Minswap",
"MINT": "Mint Club",
"MINTCOIN": "MintCoin",
+ "MINTE": "Minter HUB",
"MINTME": "MintMe.com Coin",
"MINTYS": "MintySwap",
"MINU": "Minu",
@@ -7788,13 +9061,17 @@
"MIR": "Mirror Protocol",
"MIRA": "Chains of War",
"MIRACLE": "MIRACLE",
+ "MIRAI": "MIRAI",
"MIRC": "MIR COIN",
+ "MIRT": "MIR Token",
"MIS": "Mithril Share",
"MISA": "Sangkara",
"MISCOIN": "MIScoin",
+ "MISHA": "Vitalik's Dog",
"MISHKA": "Mishka Token",
"MISS": "MISS",
"MIST": "Mist",
+ "MISTE": "Mister Miggles",
"MISTRAL": "Mistral AI",
"MIT": "Galaxy Blitz",
"MITC": "MusicLife",
@@ -7802,6 +9079,7 @@
"MITHRIL": "CLIMBERS",
"MITTENS": "Mittens",
"MITX": "Morpheus Infrastructure Token",
+ "MIU": "Miu",
"MIV": "MakeItViral",
"MIVA": "Minerva Wallet",
"MIVRS": "Minionverse",
@@ -7810,26 +9088,32 @@
"MIXCOIN": "Mixaverse",
"MIXER": "TON Mixer",
"MIY": "Icel Idman Yurdu Token",
+ "MIZ": "Mizar",
"MJT": "MojitoSwap",
"MK": "Meme Kombat",
"MKC": "Meta Kongz",
"MKEY": "MEDIKEY",
+ "MKL": "Merkle Trade",
"MKONG": "MEME KONG",
"MKR": "Maker",
"MKT": "MikeToken",
"MKUSD": "Prisma mkUSD",
"ML": "Mintlayer",
"MLA": "Moola",
+ "MLC": "My Lovely Planet",
"MLD": "MonoLend",
+ "MLEO": "LEO Token (Multichain)",
"MLGC": "Marshal Lion Group Coin",
+ "MLINK": "Chainlink (Multichain)",
"MLITE": "MeLite",
"MLK": "MiL.k",
"MLN": "Enzyme",
"MLNK": "Malinka",
"MLOKY": "MLOKY",
+ "MLP": "Matrix Layer Protocol",
"MLS": "CPROP",
"MLT": "MIcro Licensing Coin",
- "MLTC": "MultiWallet Coin",
+ "MLTC": "Litecoin (Multichain)",
"MLTPX": "MoonLift Capital",
"MLXC": "Marvellex Classic",
"MM": "Millimeter",
@@ -7837,6 +9121,7 @@
"MMAI": "MetamonkeyAi",
"MMAON": "MMAON",
"MMAPS": "MapMetrics",
+ "MMATIC": "Wrapped Polygon (Multichain)",
"MMC": "Monopoly Millionaire Control",
"MMETA": "Duckie Land Multi Metaverse",
"MMF": "MMFinance",
@@ -7852,6 +9137,7 @@
"MMT": "Master MIX Token",
"MMTM": "Momentum",
"MMUI": "MetaMUI",
+ "MMULTI": "Multichain (via Multichain Cross-Chain Router)",
"MMVG": "MEMEVENGERS",
"MMX": "MMX",
"MMXIV": "MaieutiCoin",
@@ -7859,11 +9145,13 @@
"MMY": "Mummy Finance",
"MN": "Cryptsy Mining Contract",
"MNB": "MoneyBag",
+ "MNBR": "MN Bridge",
"MNC": "MainCoin",
"MND": "Mound Token",
"MNDCC": "Mondo Community Coin",
"MNDE": "Marinade",
"MNE": "Minereum",
+ "MNEE": "MNEE USD Stablecoin ",
"MNET": "MINE Network",
"MNFT": "Mongol NFT",
"MNFTS": "Marvelous NFTs",
@@ -7891,6 +9179,7 @@
"MNZ": "Menzy",
"MO": "Morality",
"MOAC": "MOAC",
+ "MOAI": "MOAI",
"MOAR": "Moar Finance",
"MOAT": "Mother Of All Tokens",
"MOB": "MobileCoin",
@@ -7898,12 +9187,17 @@
"MOBIC": "Mobility Coin",
"MOBIE": "MobieCoin",
"MOBILE": "Helium Mobile",
+ "MOBIU": "Mobius Money",
"MOBU": "MOBU",
"MOBX": "MOBIX",
"MOBY": "Moby",
+ "MOBYONBASE": "Moby",
+ "MOBYONBASEV1": "Moby v1",
"MOC": "Mossland",
+ "MOCA": "Moca Coin",
"MOCHI": "Mochiswap",
"MOCHICAT": "MochiCat",
+ "MOCK": "Mock Capital",
"MOCO": "MoCo",
"MOD": "Modefi",
"MODA": "MODA DAO",
@@ -7922,18 +9216,25 @@
"MOFI": "MobiFi",
"MOFOLD": "Molecular Future (ERC20)",
"MOG": "Mog Coin",
+ "MOGC": "MOG CAT",
+ "MOGCO": "Mog Coin (mogcoinspl.com)",
"MOGE": "Moge",
"MOGGO": "MOGGO",
+ "MOGP": "MOG PEPE",
+ "MOGT": "MOG TRUMP",
"MOGU": "Mogu",
"MOGUL": "Mogul Productions",
+ "MOGUT": "Mogutou",
"MOGX": "Mogu",
"MOH": "Medal of Honour",
"MOI": "MyOwnItem",
"MOIN": "MoinCoin",
+ "MOJI": "Moji",
"MOJO": "Mojocoin",
"MOK": "MocktailSwap",
"MOL": "Molecule",
"MOLA": "MoonLana",
+ "MOLI": "Mobile Liquidity",
"MOLK": "Mobilink Token",
"MOLLARS": "MollarsToken",
"MOLLY": "Molly",
@@ -7947,6 +9248,8 @@
"MONARCH": "TRUEMONARCH",
"MONAV": "Monavale",
"MONB": "MonbaseCoin",
+ "MONDO": "mondo",
+ "MONET": "Claude Monet Memeory Coin",
"MONETA": "Moneta",
"MONEY": "MoneyCoin",
"MONEYBEE": "MONEYBEE",
@@ -7957,6 +9260,7 @@
"MONG20": "Mongoose 2.0",
"MONGBNB": "MongBNB",
"MONGOOSE": "Mongoose",
+ "MONGY": "Mongy",
"MONI": "Monsta Infinite",
"MONIE": "Infiblue World",
"MONK": "Monkey Project",
@@ -7965,26 +9269,42 @@
"MONKEY": "Monkey",
"MONKEYS": "Monkeys Token",
"MONKU": "Monku",
+ "MONKY": "Wise Monkey",
"MONO": "MonoX",
+ "MONOLITH": "Monolith",
"MONONOKEINU": "Mononoke Inu",
+ "MONOPOLY": "Meta Monopoly",
"MONS": "Monsters Clan",
"MONST": "Monstock",
"MONSTA": "Cake Monster",
+ "MONSTE": "Monster",
"MONT": "Monarch Token",
"MONTE": "Monte",
"MOO": "MooMonster",
+ "MOOBIFI": "Staked BIFI",
"MOOCAT": "MooCat",
+ "MOODENG": "Moo Deng (moodengsol.com)",
+ "MOODENGBNB": "MOODENG (moodengbnb.com)",
+ "MOODENGSBS": "Moo Deng (moodeng.sbs)",
+ "MOODENGSPACE": "MOO DENG",
+ "MOODENGVIP": "MOO DENG (moodeng.vip)",
+ "MOODENGWIF": "MOODENGWIF",
"MOOI": "Moonai",
"MOOLA": "Degen Forest",
"MOOLYA": "moolyacoin",
"MOON": "r/CryptoCurrency Moons",
"MOONARCH": "Moonarch",
+ "MOONB": "Moon Base",
+ "MOONBI": "Moonbix",
+ "MOONBIX": "MOONBIX MEME",
"MOONC": "MoonCoin",
"MOOND": "Dark Moon",
"MOONDAY": "Moonday Finance",
+ "MOONDO": "MOON DOGE",
"MOONED": "MoonEdge",
"MOONER": "CoinMooner",
"MOONEY": "Moon DAO",
+ "MOONI": "MOON INU",
"MOONION": "Moonions",
"MOONKIZE": "MoonKize",
"MOONLIGHT": "Moonlight Token",
@@ -7992,6 +9312,7 @@
"MOONS": "Sailor Moons",
"MOONSHOT": "Moonshot",
"MOONSTAR": "MoonStar",
+ "MOONW": "moonwolf.io",
"MOOO": "Hashtagger",
"MOOV": "dotmoovs",
"MOOX": "Moox Protocol",
@@ -7999,9 +9320,12 @@
"MOR": "Morpheus",
"MORA": "Meliora",
"MORE": "More Coin",
+ "MOREGEN": "MoreGen FreeMoon",
"MORFEY": "Morfey",
+ "MORI": "MEMENTO•MORI (Runes)",
"MOROS": "MOROS NET",
"MORPH": "Morpheus Token",
+ "MORPHO": "Morpho",
"MORRA": "Morra",
"MORSE": "Morse",
"MOS": "MOS Coin",
@@ -8009,23 +9333,28 @@
"MOT": "Olympus Labs",
"MOTA": "MotaCoin",
"MOTG": "MetaOctagon",
+ "MOTH": "MOTH",
"MOTHER": "Mother Iggy",
"MOTI": "Motion",
"MOTO": "Motocoin",
"MOUTAI": "Moutai",
"MOV": "MovieCoin",
"MOVD": "MOVE Network",
- "MOVE": "MarketMove",
+ "MOVE": "Movement",
"MOVER": "Mover",
+ "MOVEUSD": "MoveMoney USD",
"MOVEY": "Movey",
"MOVEZ": "MoveZ",
"MOVON": "MovingOn Finance",
"MOVR": "Moonriver",
"MOW": "mouse in a cats world",
"MOWA": "Moniwar",
+ "MOXIE": "Moxie",
+ "MOYA": "MOYA",
"MOZ": "Mozik",
"MP": "Membership Placeholders",
"MP3": "MP3",
+ "MPAA": "MPAA",
"MPAD": "MultiPad",
"MPAY": "Menapay",
"MPC": "Metaplace",
@@ -8056,12 +9385,14 @@
"MRHB": "MarhabaDeFi",
"MRI": "Marshall Inu",
"MRK": "MARK.SPACE",
+ "MRM": "Mr Mint",
"MRN": "Mercoin",
"MRNA": "Moderna",
"MRP": "MorpheusCoin",
"MRPEPE": "Pepe Potato",
"MRS": "Metars Genesis",
"MRSA": "MrsaCoin",
+ "MRSMIGGLES": "Mrs Miggles",
"MRT": "MinersReward",
"MRUN": "Metarun",
"MRV": "Macroverse",
@@ -8071,10 +9402,11 @@
"MRY": "MurrayCoin",
"MSA": "My Shiba Academia",
"MSB": "Misbloc",
- "MSC": "Miningwatchdog Smartchain",
+ "MSC": "Matrix SmartChain",
"MSCP": "Moonscape",
"MSCT": "MUSE ENT NFT",
"MSD": "MSD",
+ "MSFT": "Microsoft 6900",
"MSG": "MsgSender",
"MSGO": "MetaSetGO",
"MSHD": "MASHIDA",
@@ -8085,6 +9417,7 @@
"MSOL": "Marinade Staked SOL",
"MSOT": "BTour Chain",
"MSP": "Mothership",
+ "MSPC": "MeowSpace",
"MSQ": "MSquare Global",
"MSR": "Masari",
"MST": "Idle Mystic",
@@ -8092,12 +9425,13 @@
"MSTETH": "Eigenpie mstETH",
"MSTO": "Millennium Sapphire",
"MSU": "MetaSoccer",
+ "MSUSHI": "Sushi (Multichain)",
"MSWAP": "MoneySwap",
"MT": "MyToken",
"MTA": "Meta",
"MTB": "MetaBridge",
"MTBC": "Metabolic",
- "MTC": "MEDICAL TOKEN CURRENCY",
+ "MTC": "Matrix Chain",
"MTCMN": "MTC Mesh",
"MTCN": "Multiven",
"MTD": "Minted",
@@ -8113,11 +9447,13 @@
"MTK": "Moya Token",
"MTL": "Metal",
"MTLM3": "Metal Music v3",
+ "MTLS": "eMetals",
"MTLX": "Mettalex",
+ "MTMS": "MTMS Network",
"MTN": "TrackNetToken",
"MTO": "Merchant Token",
"MTP": "Macro Protocol",
- "MTR": "MasterTraderCoin",
+ "MTR": "Meter Stable",
"MTRA": "MetaRare",
"MTRC": "ModulTrade",
"MTRG": "Meter",
@@ -8137,25 +9473,32 @@
"MTY": "Viddli",
"MTZ": "Monetizr",
"MU": "Miracle Universe",
+ "MUA": "MUA DAO",
"MUBI": "Multibit",
"MUC": "Multi Universe Central",
"MUDOL2": "Hero Blaze: Three Kingdoms",
"MUDRA": "MudraCoin",
"MUE": "MonetaryUnit",
+ "MUES": "MuesliSwap MILK",
"MULTI": "Multichain",
"MULTIBOT": "Multibot",
"MULTIGAMES": "MultiGames",
"MULTIV": "Multiverse",
+ "MULTIWALLET": "MultiWallet Coin",
"MUMU": "Mumu",
"MUN": "MUNcoin",
"MUNCH": "Munch Token",
"MUNCHY": "Boys Club Munchy",
+ "MUNDI": "Salvator Mundi",
+ "MUNI": "Uniswap Protocol Token (Multichain)",
"MUNITY": "Metahorse Unity",
"MUNK": "Dramatic Chipmunk",
+ "MUNSUN": "MUNSUN",
"MURA": "Murasaki",
"MURATIAI": "MuratiAI",
"MUSCAT": "MusCat",
"MUSD": "mStable USD",
+ "MUSDC": "USD Coin (Multichain)",
"MUSDCOIN": "MUSDcoin",
"MUSE": "Muse DAO",
"MUSIC": "Gala Music",
@@ -8192,10 +9535,13 @@
"MWAVE": "MeshWave",
"MWC": "MimbleWimbleCoin",
"MWCC": "Metaworld",
+ "MWD": "MEW WOOF DAO",
"MX": "MX Token",
"MXC": "Machine Xchange Coin",
+ "MXD": "Denarius",
"MXGP": "MXGP Fan Token",
"MXM": "Maximine",
+ "MXNB": "MXNB",
"MXNT": "Tether MXNt",
"MXRP": "Monsta XRP",
"MXT": "MixTrust",
@@ -8215,6 +9561,7 @@
"MYO": "Mycro",
"MYOBU": "Myōbu",
"MYRA": "Mytheria",
+ "MYRE": "Myre",
"MYRIA": "Myria",
"MYRO": "Myro",
"MYRODRAGON": "MYRO DRAGON",
@@ -8232,18 +9579,23 @@
"MZM": "MetaZooMee",
"MZR": "Mazuri GameFi",
"MZX": "Mosaic Network",
+ "Medu": "Medusa",
"N0031": "nYFI",
"N1": "NFTify",
"N3DR": "NeorderDAO ",
+ "N64": "N64",
"N7": "Number7",
"N8V": "NativeCoin",
"NABOX": "Nabox",
"NAC": "Nirvana Chain",
+ "NACHO": "Nacho the 𐤊at",
"NADA": "NADA Protocol Token",
"NAFT": "Nafter",
"NAH": "Strayacoin",
"NAI": "Nuklai",
+ "NAILONG": "Nailong",
"NAKA": "Nakamoto Games",
+ "NAKAV1": "Nakamoto Games v1",
"NALA": "Not a lion, a...",
"NALS": "NALS (Ordinals)",
"NAM": "Namacoin",
@@ -8264,15 +9616,19 @@
"NAS": "Nebulas",
"NAS2": "Nas2Coin",
"NASADOGE": "Nasa Doge",
+ "NASDAQ420": "Nasdaq420",
"NASH": "NeoWorld Cash",
"NASSR": "Alnassr FC Fan Token",
"NASTR": "Liquid ASTR",
"NAT": "Natmin",
+ "NATI": "IlluminatiCoin",
"NATION": "Nation3",
"NATIX": "NATIX Network",
+ "NATOR": "Pepenator",
"NAUSICAA": "Nausicaa-Inu",
"NAUT": "Nautilus Coin",
"NAV": "NavCoin",
+ "NAVAL": "NAVAL AI",
"NAVC": "NavC token",
"NAVI": "Atlas Navi",
"NAVIA": "NaviAddress",
@@ -8280,7 +9636,9 @@
"NAVX": "NAVI Protocol",
"NAVY": "BoatPilot Token",
"NAWA": "Narwhale.finance",
+ "NAWS": "NAWS.AI",
"NAX": "NextDAO",
+ "NAYM": "NAYM",
"NAZ": "NAZDAQ",
"NAZA": "NAZA",
"NAZAR": "NAZAR PROTOCOL",
@@ -8306,7 +9664,9 @@
"NCAT": "Neuracat",
"NCC": "NeuroChain",
"NCDT": "Nuco.Cloud",
+ "NCN": "NeurochainAI",
"NCO": "Nexacore",
+ "NCOIN": "NatronZ",
"NCOP": "NCOP",
"NCOR": "NovaCore",
"NCORAI": "NeoCortexAI",
@@ -8314,6 +9674,7 @@
"NCP": "Newton Coin",
"NCR": "Neos Credits",
"NCT": "PolySwarm",
+ "NCTR": "Nectar",
"ND": "Nemesis Downfall",
"NDAU": "ndau",
"NDB": "NDB",
@@ -8327,9 +9688,11 @@
"NEADRAM": "The Ennead",
"NEAL": "Coineal Token",
"NEAR": "Near",
+ "NEARK": "NearKat",
"NEARX": "Stader NearX",
"NEAT": "NEAT",
"NEBL": "Neblio",
+ "NEBNB": "Neuro BNB",
"NEBU": "Nebuchadnezzar",
"NEC": "Nectar",
"NEER": "Metaverse.Network Pioneer",
@@ -8340,8 +9703,20 @@
"NEFTY": "NeftyBlocks",
"NEGED": "Neged",
"NEI": "Neurashi",
+ "NEILUO": "CHINESE NEIRO",
+ "NEINEI": "Chinese Neiro",
+ "NEIREI": "NeiRei",
+ "NEIRO": "Neiro",
+ "NEIROC": "Neirocoin (neirocoin.club)",
+ "NEIROCOIN": "Neiro Ethereum",
+ "NEIROH": "NeiroWifHat",
+ "NEIROINU": "Neiro Inu",
+ "NEIROLIVE": "Neiro",
+ "NEIROLOL": "Neiro",
+ "NEIROONB": "Neiro on Base",
"NEKI": "Neki Token",
"NEKO": "The Neko",
+ "NEKOARC": "Neko Arc",
"NEKOIN": "Nekoin",
"NEKOS": "Nekocoin",
"NEMO": "NEMO",
@@ -8368,6 +9743,8 @@
"NETA": "Negative Tax",
"NETC": "NetworkCoin",
"NETCOIN": "Netcoincapital",
+ "NETCOINV1": "Netcoincapital v1",
+ "NETK": "Netkoin",
"NETKO": "Netko",
"NETRUM": "Netrum",
"NETT": "Netswap",
@@ -8384,15 +9761,22 @@
"NEUTR": "Neutrinos",
"NEUTRO": "Neutro Protocol",
"NEUTRON": "Neutron",
+ "NEV": "NEVER SURRENDER",
"NEVA": "NevaCoin",
+ "NEVANETWORK": "Neva",
+ "NEVE": "NEVER SURRENDER",
"NEVER": "neversol",
"NEW": "Newton",
"NEWB": "Newbium",
+ "NEWBV1": "Newbium v1",
+ "NEWC": "New Cat",
"NEWG": "NewGold",
"NEWM": "NEWM",
"NEWO": "New Order",
"NEWOS": "NewsToken",
+ "NEWP": "New Peon",
"NEWS": "PUBLISH",
+ "NEWSL": "Newsly",
"NEWSTOKENS": "NewsTokens",
"NEWTON": "Newtonium",
"NEX": "Nash Exchange",
@@ -8400,20 +9784,26 @@
"NEXAI": "NexAI",
"NEXBOX": "NexBox",
"NEXBT": "Native XBTPro Exchange Token",
+ "NEXG": "NexGami",
"NEXM": "Nexum",
+ "NEXMI": "NexMillionaires",
"NEXMS": "NexMillionaires",
"NEXO": "NEXO",
"NEXT": "Connext Network",
"NEXTEX": "Next.exchange Token",
"NEXTEXV1": "Next.exchange Token v1",
+ "NEXTV1": "Connext Network",
"NEXUSAI": "NexusAI",
"NEXXO": "Nexxo",
"NEZHA": "NezhaToken",
"NFAI": "Not Financial Advice",
+ "NFAIV1": "Not Financial Advice v1",
"NFCR": "NFCore",
"NFD": "Feisty Doge NFT",
"NFE": "Edu3Labs",
+ "NFM": "NFMart",
"NFN": "Nafen",
+ "NFNT": "NFINITY AI",
"NFP": "NFPrompt",
"NFT": "APENFT",
"NFT11": "NFT11",
@@ -8422,6 +9812,7 @@
"NFTBS": "NFTBooks",
"NFTD": "NFTrade",
"NFTE": "NFTEarthOFT",
+ "NFTFI": "NFTfi",
"NFTI": "NFT Index",
"NFTL": "NFTLaunch",
"NFTLOOT": "NFTLootBox",
@@ -8429,6 +9820,7 @@
"NFTN": "NFTNetwork",
"NFTP": "NFT",
"NFTS": "NFT STARS",
+ "NFTSTYLE": "NFTStyle",
"NFTT": "NFT",
"NFTX": "NFTX",
"NFTXHI": "NFTX Hashmasks Index",
@@ -8443,6 +9835,7 @@
"NGL": "Entangle",
"NGM": "e-Money",
"NGMI": "NGMI Coin",
+ "NGTG": "NUGGET TRAP",
"NHCT": "Nano Healthcare Token",
"NHI": "Non Human Intelligence",
"NHT": "Neighbourhoods",
@@ -8454,17 +9847,24 @@
"NIF": "Unifty",
"NIFT": "Niftify",
"NIFTSY": "Envelop",
+ "NIFTY": "Nifty Wizards Dust",
+ "NIFTYL": "Nifty League",
"NIGELLA": "Nigella coin",
"NIGHT": "Midnight",
"NIGI": "Nigi",
+ "NIH": "Nihao coin",
"NIHAO": "NiHao",
"NII": "nahmii",
"NIIFI": "NiiFi",
"NIK": "NIKPLACE",
+ "NIKO": "NikolAI",
+ "NILE": "Nile",
"NIM": "Nimiq",
"NIMFA": "Nimfamoney",
"NIN": "Next Innovation",
+ "NINJ": "Ninja Protocol",
"NINJA": "Dog Wif Nunchucks",
+ "NINJACAT": "NinjaCat",
"NINJAZ": "Danketsu",
"NINKY": "Ninky",
"NINO": "Ninneko",
@@ -8472,8 +9872,12 @@
"NIOB": "Niob Finance",
"NIOCTIB": "nioctiB",
"NIOX": "Autonio",
+ "NIOXV1": "Autonio v1",
+ "NIOXV2": "Autonio v2",
"NIPPY": "Cat On Catnip",
+ "NIQAB": "NIQAB WORLD ORDER",
"NIRV": "Nirvana NIRV",
+ "NIRVA": "Nirvana",
"NIT": "Nesten",
"NITEFEEDER": "Nitefeeder",
"NITO": "Nitroken",
@@ -8502,6 +9906,7 @@
"NMH": "Namahe",
"NMK": "Namek",
"NMKR": "NMKR",
+ "NML": "No Mans Land",
"NMR": "Numeraire",
"NMS": "Numus",
"NMSP": "Nemesis PRO",
@@ -8518,6 +9923,8 @@
"NOBS": "No BS Crypto",
"NOCHILL": "AVAX HAS NO CHILL",
"NODE": "Whole Network",
+ "NODESYNAPSE": "NodeSynapse",
+ "NODIDDY": "NODIDDY",
"NODIS": "Nodis",
"NODL": "Nodle Network",
"NOGS": "Noggles",
@@ -8527,10 +9934,16 @@
"NOIZ": "NOIZ",
"NOKA": "Noka Solana AI",
"NOKU": "NOKU Master token",
+ "NOKUV1": "NOKU Master token v1",
"NOLA": "Nola",
"NOM": "Finom NOM Token",
+ "NOMNOM": "nomnom",
+ "NOMOX": "NOMOEX Token",
"NONE": "None Trading",
"NOO": "Noocoin",
+ "NOOB": "Blast Royale",
+ "NOODS": "Noods",
+ "NOOOO": "NOOOO",
"NOOT": "NOOT (Ordinals)",
"NOR": "Noir",
"NORA": "SnowCrash Token",
@@ -8541,7 +9954,11 @@
"NOSN": "nOS",
"NOSO": "Noso",
"NOT": "Notcoin",
+ "NOTAI": "NOTAI",
+ "NOTC": "NOT",
+ "NOTDOG": "NOTDOG",
"NOTE": "Notional Finance",
+ "NOTECANTO": "Note",
"NOTHING": "NOTHING",
"NOTINU": "NOTCOIN INU",
"NOV": "Novara Calcio Fan Token",
@@ -8550,7 +9967,9 @@
"NOX": "NITRO",
"NOXB": "Noxbox",
"NPAS": "New Paradigm Assets Solution",
- "NPC": "NPCcoin",
+ "NPC": "Non-Playable Coin",
+ "NPCC": "NPCcoin",
+ "NPCS": "Non-Playable Coin Solana",
"NPER": "NPER",
"NPICK": "NPICK BLOCK",
"NPLC": "Plus Coin",
@@ -8569,14 +9988,14 @@
"NRGY": "NRGY Defi",
"NRK": "Nordek",
"NRM": "Neuromachine",
- "NRN": "Doc.ai Neuron",
+ "NRN": "Neuron",
"NRO": "Neuro",
"NRP": "Neural Protocol",
"NRS": "NoirShares",
"NRV": "Nerve Finance",
"NRVE": "Narrative",
"NRX": "Neironix",
- "NS": "NodeSynapse",
+ "NS": "SuiNS Token",
"NS2DRP": "New Silver Series 2 DROP",
"NSBT": "Neutrino Token",
"NSD": "Nasdacoin",
@@ -8590,7 +10009,10 @@
"NSP": "NOMAD.space",
"NSR": "NuShares",
"NSS": "NSS Coin",
+ "NST": "Ninja Squad Token",
"NSTE": "NewSolution 2.0",
+ "NSTK": "Unstake",
+ "NSTR": "Nostra",
"NSUR": "NSUR Coin",
"NSURE": "Nsure Network",
"NT": "NEXTYPE Finance",
@@ -8602,6 +10024,7 @@
"NTG": "NEWTOWNGAMING",
"NTK": "Neurotoken",
"NTM": "NetM",
+ "NTMPI": "Neutaro",
"NTO": "Neton",
"NTR": "Nether",
"NTRN": "Neutron",
@@ -8617,6 +10040,7 @@
"NUC": "NuCoin",
"NUDE": "0xNude",
"NUDES": "NUDES",
+ "NUGGET": "Gegagedigedagedago",
"NUKE": "NukeCoin",
"NULS": "Nuls",
"NUM": "Numbers Protocol",
@@ -8626,8 +10050,10 @@
"NUSA": "Nusa",
"NUSD": "Nomin USD",
"NUT": "Native Utility Token",
+ "NUTC": "Nutcash",
"NUTGV2": "NUTGAIN",
- "NUTS": "Squirrel Finance",
+ "NUTS": "Thetanuts Finance",
+ "NUTZ": "NUTZ",
"NUUM": "MNet",
"NUX": "Peanut",
"NVA": "Neeva Defi",
@@ -8642,9 +10068,10 @@
"NVT": "NerveNetwork",
"NVX": "Novax Coin",
"NVZN": "INVIZION",
- "NWC": "Newscrypto Coin",
+ "NWC": "Numerico",
"NWCN": "NowCoin",
"NWG": "NotWifGary",
+ "NWIF": "neirowifhat",
"NWP": "NWPSolution",
"NWS": "Nodewaves",
"NXC": "Nexium",
@@ -8661,6 +10088,7 @@
"NXTI": "NXTI",
"NXTT": "Next Earth",
"NXTTY": "NXTTY",
+ "NYA": "Nya",
"NYAN": "NyanCoin",
"NYANDOGE": "NyanDOGE International",
"NYANTE": "Nyantereum International",
@@ -8680,6 +10108,7 @@
"NZL": "Zealium",
"NZO": "NonZero",
"O": "Childhoods End",
+ "O1INCH": "1inch (Optimism Bridge)",
"O3": "O3 Swap",
"O4DX": "O4DX",
"OAK": "Acorn Collective",
@@ -8689,6 +10118,7 @@
"OAT": "OAT Network",
"OATH": "OATH Protocol",
"OAX": "Oax",
+ "OB1INCH": "1inch (OmniBridge)",
"OBEMA": "burek obema",
"OBI": "Orbofi AI",
"OBICOIN": "OBI Real Estate",
@@ -8697,11 +10127,14 @@
"OBROK": "OBRok",
"OBS": "One Basis Cash",
"OBSCURE": "Obscurebay",
+ "OBSI": "Obsidium",
"OBSR": "OBSERVER Coin",
+ "OBSUSHI": "Sushi (OmniBridge)",
"OBT": "Oobit",
"OBTC": "Obitan Chain",
"OBX": "OpenBlox",
"OC": "OrangeCoin",
+ "OCADA": "OCADA.AI",
"OCAI": "Onchain AI",
"OCAVU": "Ocavu Network Token",
"OCB": "BLOCKMAX",
@@ -8714,7 +10147,10 @@
"OCICAT": "OciCat",
"OCL": "Oceanlab",
"OCN": "Odyssey",
+ "OCO": "Owners Casino Online",
"OCP": "Omni Consumer Protocols",
+ "OCPR": "OC Protocol",
+ "OCRV": "Curve DAO Token (OmniBridge)",
"OCT": "Octopus Network",
"OCTA": "OctaSpace",
"OCTAGON": "POLYDeFI",
@@ -8722,10 +10158,11 @@
"OCTAX": "OctaX",
"OCTI": "Oction",
"OCTO": "OctoFi",
- "OCTOC": "OctoCoin",
+ "OCTOCOIN": "Octocoin",
"OCTOIN": "Octoin Coin",
"OCW": "Online Cold Wallet",
"OCX": "Original Crypto Coin",
+ "ODAI": "Dai (Optimism Bridge)",
"ODC": "Overseas Direct Certification",
"ODDZ": "Oddz",
"ODE": "ODEM",
@@ -8747,7 +10184,10 @@
"OG": "OG Fan Token",
"OGCINU": "The OG Cheems Inu",
"OGD": "OLYMPIC GAMES DOGE",
+ "OGGIE": "Oggie",
"OGGY": "Oggy Inu",
+ "OGLG": "OGLONG",
+ "OGM": "OG Mickey",
"OGN": "Origin Protocol",
"OGO": "Origo",
"OGOD": "GOTOGOD",
@@ -8762,15 +10202,19 @@
"OHANDY": "Orbit Bridge Klaytn Handy",
"OHM": "Olympus",
"OHMV2": "Olympus v2",
+ "OHNO": "Oh no",
+ "OHNOGG": "OHNHO (ohno.gg)",
"OHO": "OHO",
"OICOIN": "Osmium Investment Coin",
"OIL": "Oiler",
"OILD": "OilWellCoin",
+ "OILX": "OilX Token",
"OIN": "OIN Finance",
"OIO": "Online",
"OJA": "Ojamu",
"OJX": "Ojooo",
"OK": "OKCash",
+ "OKANE": "OKANE",
"OKAYEG": "Okayeg",
"OKB": "OKB",
"OKG": "Ookeenga",
@@ -8780,8 +10224,11 @@
"OKS": "Oikos",
"OKSE": "Okse",
"OKT": "OKT Chain",
+ "OL": "Open Loot",
+ "OLAF": "Olaf Token",
"OLAND": "Oceanland",
"OLAS": "Autonolas",
+ "OLD": "Old Trump",
"OLDSF": "OldSafeCoin",
"OLE": "OpenLeverage",
"OLEA": "Olea Token",
@@ -8793,6 +10240,7 @@
"OLXA": "OLXA",
"OLY": "Olyseum",
"OLYMP": "OlympCoin",
+ "OLYMPE": "OLYMPÉ",
"OM": "MANTRA",
"OMA": "OmegaCoin",
"OMAX": "Omax",
@@ -8806,12 +10254,15 @@
"OMI": "ECOMI",
"OMIC": "Omicron",
"OMIKAMI": "Amaterasu Omikami",
+ "OMIX": "Omix",
"OMMI": "Ommniverse",
- "OMNI": "Omni",
- "OMNIA": "OmniaVerse",
+ "OMNI": "Omni Network",
+ "OMNIA": "OMNIA Protocol",
+ "OMNIAV1": "OmniaVerse v1",
+ "OMNIAV2": "OmniaVerse",
"OMNIC": "OmniCat",
"OMNICRON": "OmniCron",
- "OMNINET": "Omni Network",
+ "OMNILAYER": "Omni",
"OMNIR": "Omni Real Estate Token",
"OMNIX": "OmniBotX",
"OMNOM": "Doge Eat Doge",
@@ -8819,9 +10270,11 @@
"OMT": "Mars Token",
"OMV1": "OM Token (v1)",
"OMX": "Project Shivom",
+ "OMZ": "Open Meta City",
"ON": "OFIN Token",
"ONAM": "ONAM",
"ONC": "One Cash",
+ "ONCH": "OnchainPoints.xyz",
"ONDO": "Ondo",
"ONE": "Harmony",
"ONES": "OneSwap DAO",
@@ -8830,6 +10283,8 @@
"ONG": "SoMee.Social",
"ONGAS": "Ontology Gas",
"ONI": "ONINO",
+ "ONIG": "Onigiri",
+ "ONIGIRI": "Onigiri The Cat",
"ONION": "DeepOnion",
"ONIT": "ONBUFF",
"ONL": "On.Live",
@@ -8844,9 +10299,11 @@
"ONUS": "ONUS",
"ONX": "Onix",
"OOE": "OpenOcean",
+ "OOFP": "OOFP",
"OOGI": "OOGI",
"OOKI": "Ooki",
"OOKS": "Onooks",
+ "OOM": "OomerBot",
"OORC": "Orbit Bridge Klaytn Orbit Chain",
"OORT": "OORT",
"OOT": "Utrum",
@@ -8855,6 +10312,7 @@
"OPA": "Option Panda Platform",
"OPAIG": "OvalPixel",
"OPC": "OP Coin",
+ "OPCA": "OP_CAT(BIP-420)",
"OPCAT": "OPCAT",
"OPCT": "Opacity",
"OPEN": "Open Custody Protocol",
@@ -8865,6 +10323,7 @@
"OPENP": "Open Platform",
"OPENRI": "Open Rights Exchange",
"OPENSOURCE": "Open Source Network",
+ "OPENW": "OpenWorld",
"OPENX": "OpenSwap Optimism Token",
"OPEPE": "Optimism PEPE",
"OPES": "Opes",
@@ -8880,23 +10339,30 @@
"OPS": "Octopus Protocol",
"OPSC": "OpenSourceCoin",
"OPSEC": "OpSec",
+ "OPSECV1": "OpSec v1",
+ "OPSV1": "Octopus Protocol v1",
+ "OPSV2": "Octopus Protocol v2",
"OPT": "Opus",
"OPTA": "Opta Global",
"OPTC": "Open Predict Token",
"OPTCM": "Optimus",
"OPTI": "Optimus AI",
"OPTIG": "Catgirl Optimus",
+ "OPTIM": "Optimus X",
"OPTIMOUSE": "Optimouse",
"OPTION": "OptionCoin",
"OPU": "Opu Coin",
"OPUL": "Opulous",
+ "OPUS": "Opus",
"OPV": "OpenLive NFT",
"OPXVEVELO": "OpenX Locked Velo",
+ "ORA": "Oracolxor",
"ORACLE": "Oracle AI",
"ORACLECHAIN": "OracleChain",
"ORACUL": "Oracul Ai",
"ORAI": "Oraichain Token",
"ORAIX": "OraiDEX",
+ "ORANGE": "Annoying Orange",
"ORAO": "ORAO Network",
"ORARE": "OneRare",
"ORB": "KlayCity ORB",
@@ -8910,9 +10376,11 @@
"ORC": "Orbit Chain",
"ORCA": "Orca",
"ORD": "ordinex",
+ "ORDER": "Orderly Network",
"ORDI": "Ordinals ",
"ORDI2": "ORDI 2.0",
"ORDIFI": "OrdinalsFi",
+ "ORDIN": "ORDINAL HODL MEME",
"ORDS": "Ordiswap",
"ORE": "Galactrum",
"OREO": "OreoFi",
@@ -8923,9 +10391,11 @@
"ORI": "Origami",
"ORIGIN": "Origin Foundation",
"ORION": "Orion Money",
+ "ORKL": "Orakler",
"ORLY": "OrlyCoin",
"ORM": "ORIUM",
"ORME": "Ormeus Coin",
+ "ORMO": "Ormolus",
"ORN": "Orion Protocol",
"ORNJ": "Orange",
"ORO": "Operon Origins",
@@ -8942,6 +10412,7 @@
"OSA": "OSA Token",
"OSAK": "Osaka Protocol",
"OSC": "iOscar",
+ "OSCAR": "OSCAR",
"OSEA": "Omnisea",
"OSEAN": "OSEAN",
"OSETH": "StakeWise Staked ETH",
@@ -8952,10 +10423,12 @@
"OSK": "OSK",
"OSKDAO": "OSK DAO",
"OSL": "OSL AI",
+ "OSMI": "OSMI",
"OSMO": "Osmosis",
"OSQTH": "Opyn Squeeth",
"OSS": "OSSChain",
"OST": "OST",
+ "OSUSHI": "Sushi (Optimism Bridge)",
"OSWAP": "OpenSwap",
"OT": "Onchain Trade",
"OTB": "OTCBTC Token",
@@ -8973,6 +10446,7 @@
"OUSD": "Origin Dollar",
"OUSDC": "Orbit Bridge Klaytn USDC",
"OUSE": "OUSE Token",
+ "OUSG": "OUSG",
"OUT": "Netscouters",
"OVC": "OVCODE",
"OVERLORD": "Overlord",
@@ -8984,6 +10458,7 @@
"OWL": "OWL Token",
"OWN": "Ownly",
"OWNDATA": "OWNDATA",
+ "OWO": "SoMon",
"OX": "Open Exchange Token",
"OXAI": "OxAI.com",
"OXB": "Oxbull Tech",
@@ -9004,7 +10479,9 @@
"OZMPC": "Ozempic",
"OZO": "Ozone Chain",
"OZONE": "Ozone metaverse",
+ "OZONEC": "Ozonechain",
"OZP": "OZAPHYRE",
+ "P": "PUPS•WORLD•PEACE",
"P202": "Project 202",
"P2PS": "P2P Solutions Foundation",
"P3D": "3DPass",
@@ -9014,8 +10491,10 @@
"PABLO": "PABLO DEFI",
"PAC": "PacMoon",
"PACE": "3space Art",
+ "PACK": "HashPack",
"PACM": "Pacman Blastoff",
"PACMAN": "Pac Man",
+ "PACO": "Paco",
"PACOCA": "Pacoca",
"PACP": "PAC Protocol",
"PACT": "impactMarket",
@@ -9031,6 +10510,7 @@
"PAK": "Pakcoin",
"PAL": "PolicyPal Network",
"PALAI": "PaladinAI",
+ "PALE": "Palette",
"PALET": "Palette",
"PALG": "PalGold",
"PALLA": "Pallapay",
@@ -9041,26 +10521,34 @@
"PAM": "PAM",
"PAMBI": "Pambicoin",
"PAMP": "PAMP Network",
- "PAN": "Pantos",
+ "PAN": "Pankito",
"PAND": "Panda Finance",
"PANDA": "PandaDAO",
"PANDAI": "PandAI",
+ "PANDAS": "Panda Swap",
+ "PANDE": "Pande",
"PANDO": "Pando",
"PANDOP": "PandoProject",
"PANDORA": "Pandora",
"PANGEA": "PANGEA",
"PANIC": "PanicSwap",
"PANO": "PanoVerse",
+ "PANTOS": "Pantos",
+ "PAO": "South Pao",
"PAPA": "Papa Bear",
"PAPADOGE": "Papa Doge",
+ "PAPAT": "PAPA Trump",
"PAPER": "Dope Wars Paper",
+ "PAPERBASE": "Paper",
"PAPI": "Papi",
+ "PAPO": "PAPO NINJA",
"PAPPAY": "PAPPAY",
"PAPU": "Papu Token",
"PAPUSHA": "Papusha",
"PAR": "Parachute",
"PARA": "Paralink Network",
"PARAB": "Parabolic",
+ "PARAD": "Paradox",
"PARADOX": "The Paradox Metaverse",
"PARAG": "Paragon Network",
"PARAL": "Parallel",
@@ -9075,7 +10563,9 @@
"PARLAY": "Parlay",
"PARMA": "PARMA Fan Token",
"PARQ": "PARQ",
+ "PARRY": "Parry Parrot",
"PART": "Particl",
+ "PARTY": "Party",
"PAS": "Passive Coin",
"PASC": "Pascal Coin",
"PASG": "Passage",
@@ -9085,13 +10575,17 @@
"PATEK": "Silly Patek",
"PATEX": "Patex",
"PATH": "PathDAO",
+ "PATRIOT": "Patriot",
"PATTON": "Patton",
+ "PAUL": "Elephant Penguin",
"PAVIA": "Pavia",
"PAVO": "Pavocoin",
"PAW": "PAWSWAP",
+ "PAWPAW": "PawPaw",
"PAWS": "PawStars",
"PAWSTA": "dogeatingpasta",
"PAWTH": "Pawthereum",
+ "PAXE": "Paxe",
"PAXEX": "PAXEX",
"PAXG": "PAX Gold",
"PAXU": "Pax Unitas",
@@ -9099,6 +10593,7 @@
"PAY": "TenX",
"PAYB": "Paybswap",
"PAYCON": "Paycon",
+ "PAYD": "PAYD",
"PAYN": "PayNet Coin",
"PAYP": "PayPeer",
"PAYS": "Payslink",
@@ -9108,6 +10603,7 @@
"PAZZI": "Paparazzi",
"PBAR": "Pangolin Hedera",
"PBASE": "Polkabase",
+ "PBB": "PEPE BUT BLUE",
"PBC": "PabyosiCoin",
"PBET": "PBET",
"PBIRB": "Parrotly",
@@ -9117,7 +10613,9 @@
"PBR": "PolkaBridge",
"PBRV1": "PolkaBridge v1",
"PBT": "Primalbase",
+ "PBTC": "pTokens BTC",
"PBTC35A": "pBTC35A",
+ "PBTCV1": "pTokens BTC v1",
"PBUX": "Playbux",
"PBX": "Probinex",
"PBXV1": "Probinex v1",
@@ -9139,43 +10637,58 @@
"PCR": "Paycer Protocol",
"PCS": "Pabyosi Coin",
"PCSP": "GenomicDao G-Stroke",
+ "PCW": "Power Crypto World",
"PCX": "ChainX",
"PD": "PUDEL",
"PDA": "PlayDapp",
+ "PDAI": "Dai (Polygon Portal)",
"PDATA": "PDATA",
"PDC": "Project Decorum",
"PDD": "PDDOLLAR",
"PDEX": "Polkadex",
"PDF": "Port of DeFi Network",
+ "PDJT": "President Donald J. Trump",
"PDOG": "Polkadog",
"PDOGE": "PolkaDoge",
"PDRAGON": "Phoenix Dragon",
"PDRIP": "Pulse Drip",
"PDT": "ParagonsDAO",
"PDX": "PDX Coin",
+ "PE": "Pe",
"PEA": "Pea Farm",
"PEACH": "Based Peaches",
"PEACHY": "Peachy",
"PEAK": "PEAKDEFI",
+ "PEAN": "Peanut the Squirrel (peanut-token.xyz)",
"PEANIE": "Peanie",
+ "PEANU": "PEANUT INU",
+ "PEANUT": "#1 Tiktok Squirrel",
+ "PEAQ": "peaq",
"PEAR": "Pear Swap",
"PEARL": "Pearl Finance",
"PEAS": "Peapods Finance",
+ "PEBIRD": "PEPE BIRD",
"PEC": "PeaceCoin",
"PECL": "PECland",
"PED": "PEDRO",
"PEDRO": "Pedro The Raccoon",
"PEEL": "Meta Apes",
+ "PEENO": "Peeno",
"PEEP": "Peepo",
"PEEPA": "Peepa",
"PEEPEE": "Peepee",
"PEEPO": "PEEPO",
+ "PEEPOBASE": "Peepo (peepobase.org)",
"PEEPS": "The People’s Coin",
"PEEZY": "Young Peezy AKA Pepe",
"PEFI": "Penguin Finance",
"PEG": "PegNet",
+ "PEGA": "PEGA",
+ "PEGAMAGA": "Pepe Maga",
+ "PEGG": "PokPok Golden Egg",
"PEGS": "PegShares",
- "PEIPEI": "PEIPEI",
+ "PEIPEI": "PeiPei",
+ "PEIPEICN": "PEIPEI",
"PEKA": "PEKA",
"PEKC": "Peacock Coin",
"PEKINU": "PEKI INU",
@@ -9183,22 +10696,30 @@
"PEL": "Propel Token",
"PELF": "PELFORT",
"PEM": "Pembrock",
+ "PEME": "PEME",
"PENC": "PenCoin",
"PENDLE": "Pendle",
+ "PENDY": "Pendy",
"PENG": "Peng",
"PENGCOIN": "PENG",
+ "PENGU": "Pudgy Penguins",
+ "PENGUI": "Penguiana",
"PENGYX": "PengyX",
"PENIS": "PenisGrow",
+ "PENJ": "Penjamin Blinkerton",
"PENP": "Penpie",
"PENR": "Penrose Finance",
"PENTA": "Penta",
+ "PEON": "Peon",
"PEOPLE": "ConstitutionDAO",
"PEOSONE": "pEOS",
"PEP": "Pepechain",
"PEPA": "Pepa Inu",
+ "PEPAY": "PEPAY",
"PEPC": "Pepe Classic",
"PEPE": "Pepe",
"PEPE2": "Pepe 2.0",
+ "PEPE2024": "Olympic Pepe 2024",
"PEPE20V1": "Pepe 2.0 v1",
"PEPEA": "Pepeandybrettlandwolf",
"PEPEAI": "Pepe Analytics",
@@ -9206,12 +10727,14 @@
"PEPEB": "PEPEBOMB",
"PEPEBNB": "Pepe The Frog",
"PEPEBRC": "PEPE (Ordinals)",
+ "PEPEBSC": "Pepe Coin",
"PEPEBURN": "Pepeburn",
"PEPEC": "Pepe Chain",
"PEPECASH": "Pepe Cash",
"PEPECAT": "PEPE CAT",
"PEPECEO": "REAL PEPE CEO",
"PEPECHAIN": "PEPE Chain",
+ "PEPECO": "PEPE COIN BSC",
"PEPECOIN": "PepeCoin",
"PEPED": "PepeDAO Coin",
"PEPEDAO": "PEPE DAO",
@@ -9227,17 +10750,21 @@
"PEPEGRINCH": "Pepe Grinch",
"PEPEINU": "PEPE inu",
"PEPEKING": "PEPEKING",
+ "PEPEKRC20": "PEPE KRC20",
"PEPELON": "Pepelon",
"PEPEMAGA": "Trump Pepe",
"PEPEMO": "PepeMo",
"PEPEMOON": "PEPEMOON",
+ "PEPEOFSOL": "Pepe of Solana",
"PEPEPI": "PEPEPi",
"PEPER": "Baby Pepe",
"PEPERA": "PEPERA",
"PEPESOL": "PEPE SOL",
+ "PEPESOLCTO": "Pepe (pepesolcto.vip)",
"PEPESORA": "Pepe Sora AI",
"PEPESWAP": "PEPE Swap",
"PEPET": "PepeTrump",
+ "PEPETR": "PEPE TREMP",
"PEPEW": "PEPEPOW",
"PEPEWIFHAT": "Pepewifhat",
"PEPEWO": "PEPE World",
@@ -9252,6 +10779,7 @@
"PEPPA": "PEPPA",
"PEPPER": "Pepper Token",
"PEPS": "PEPS Coin",
+ "PEPU": "Pepe Unchained",
"PEPURAI": "PEPURAI",
"PEPVERS": "PepVerse",
"PEPY": "Pepy",
@@ -9268,7 +10796,10 @@
"PESA": "Credible",
"PESHI": "PESHI",
"PESOBIT": "PesoBit",
+ "PESTO": "Pesto the Baby King Penguin",
"PET": "Hello Pets",
+ "PETE": "PETE",
+ "PETERTODD": "Peter Todd",
"PETF": "PEPE ETF",
"PETG": "Pet Games",
"PETH": "pETH",
@@ -9293,7 +10824,7 @@
"PGEN": "Polygen",
"PGF7T": "PGF500",
"PGL": "Prospectors",
- "PGN": "Pigeoncoin",
+ "PGN": "Paragon",
"PGOLD": " Polkagold",
"PGPT": "PrivateAI",
"PGROK": "Papa Grok",
@@ -9308,39 +10839,49 @@
"PHAUNTEM": "Phauntem",
"PHB": "Phoenix Global [v2]",
"PHBD": "Polygon HBD",
- "PHC": "Profit Hunters Coin",
"PHCR": "PhotoChromic",
+ "PHEN": "Phenx",
+ "PHEX": "HEX (Polygon Portal)",
"PHI": "PHI Token",
"PHIBA": "Papa Shiba",
"PHIGOLD": "PhiGold Coin",
+ "PHIL": "Philtoken",
"PHL": "Philcoin",
"PHM": "Phomeum",
+ "PHMN": "POSTHUMAN",
"PHN": "Phayny",
"PHNX": "PhoenixDAO",
"PHO": "Photon",
+ "PHOENIX": "Phoenix Finance",
"PHONON": "Phonon DAO ",
"PHOON": "Typhoon Cash",
"PHORE": "Phore",
"PHR": "Phreak",
+ "PHRYG": "PHRYGES",
"PHRYGE": "PHRYGES",
+ "PHRYGES": "The Phryges",
"PHS": "PhilosophersStone",
"PHT": "Photon Token",
"PHTC": "Photochain",
"PHTR": "Phuture",
+ "PHUN": "PHUNWARE",
"PHV": "PATHHIVE",
- "PHX": "Phoenix Finance",
"PI": "Plian",
"PIA": "Olympia AI",
"PIAS": "PIAS",
"PIB": "Pibble",
"PICA": "PicaArtMoney",
+ "PICKL": "PICKLE",
"PICKLE": "Pickle Finance",
"PICO": "PicoGo",
+ "PICOLO": "PICOLO",
"PIE": "Persistent Information Exchange",
+ "PIERRE": "sacré bleu",
"PIF": "Pepe Wif Hat",
"PIG": "Pig Finance",
"PIGE": "Pige",
"PIGEON": "Pigeon In Yellow Boots",
+ "PIGEONC": "Pigeoncoin",
"PIGGY": "Piggy",
"PIGGYCOIN": "Piggy Coin",
"PIGONK": "PIGONK",
@@ -9348,18 +10889,24 @@
"PIIN": "piin (Ordinals)",
"PIKA": "Pikaboss",
"PIKACHU": "Pikachu Inu",
+ "PIKACRYPTO": "Pika",
+ "PIKAM": "Pikamoon",
+ "PIKE": "Pike Token",
"PIKO": "Pinnako",
"PILOT": "Unipilot",
+ "PIM": "PIM",
"PIN": "Pin",
"PINCHI": "Da Pinchi",
"PINE": "Pine",
"PINETWORKDEFI": "Pi Network DeFi",
"PING": "CryptoPing",
- "PINK": "PinkCoin",
+ "PINK": "PINK - The Panther",
+ "PINKCOIN": "PinkCoin",
"PINKSALE": "PinkSale",
"PINKX": "PantherCoin",
"PINMO": "Pinmo",
"PINO": "Pinocchu",
+ "PINS": "PINs Network Token",
"PINU": "Piccolo Inu",
"PINU100X": "Pi INU 100x",
"PIO": "Pioneershares",
@@ -9367,9 +10914,13 @@
"PIPA": "Pipa Coin",
"PIPI": "Pippi Finance",
"PIPL": "PiplCoin",
+ "PIPO": "Pipo",
+ "PIPPIN": "pippin",
"PIPT": "Power Index Pool Token",
"PIRATE": "Pirate Nation",
"PIRATECASH": "PirateCash",
+ "PIRATECASHV1": "PirateCash v1",
+ "PIRATECASHV2": "PirateCash v2 (PirateCash Telegram bot)",
"PIRATECOIN": "Pirate Coin Games",
"PIRB": "PIRB",
"PIRI": "Pirichain",
@@ -9383,6 +10934,8 @@
"PIX": "Lampix",
"PIXEL": "Pixels",
"PIXELV": "PixelVerse",
+ "PIXFI": "Pixelverse",
+ "PIXL": "PIXL",
"PIZA": "Half Pizza",
"PIZPEPE": "Pepe Pizzeria",
"PIZZA": "PizzaSwap",
@@ -9406,12 +10959,13 @@
"PLANET": "PLANET",
"PLANETCOIN": "PlanetCoin",
"PLANETS": "PlanetWatch",
+ "PLANT": "Plant",
"PLASTIK": "Plastiks",
"PLAT": "BitGuild PLAT",
"PLATC": "PlatinCoin",
"PLATINUM": "Platinum",
"PLATO": "Plato Game",
- "PLAY": "HEROcoin",
+ "PLAY": "Play Token",
"PLAYC": "PlayChip",
"PLAYCOIN": "PlayCoin",
"PLAYKEY": "Playkey",
@@ -9422,7 +10976,9 @@
"PLCUC": "PLC Ultima Classic",
"PLD": "Plutonian DAO",
"PLE": "Plethori",
+ "PLEA": "Plearn",
"PLEB": "PLEBToken",
+ "PLEBONBASE": "PLEB",
"PLENTY": "Plenty DeFi",
"PLEO": "Empleos",
"PLERF": "Plerf",
@@ -9431,6 +10987,7 @@
"PLG": "Pledgecamp",
"PLGR": "Pledge Finance",
"PLI": "Plugin",
+ "PLINK": "Chainlink (Polygon Portal)",
"PLM": "Plasmonics",
"PLMC": "Polimec",
"PLMT": "Pallium",
@@ -9453,6 +11010,7 @@
"PLU": "Pluton",
"PLUG": "PL^Gnet",
"PLUGCN": "Plug Chain",
+ "PLUME": "Plume",
"PLUP": "PoolUp",
"PLURA": "PluraCoin",
"PLUS1": "PlusOneCoin",
@@ -9460,6 +11018,7 @@
"PLX": "PlexCoin",
"PLXY": "Plxyer",
"PLY": "Aurigami",
+ "PLYR": "PLYR L1",
"PLZ": "PLUNZ",
"PMA": "PumaPay",
"PMD": "Pandemic Multiverse",
@@ -9467,6 +11026,7 @@
"PMEER": "Qitmeer",
"PMG": "Pomerium Ecosystem Token",
"PMGT": "Perth Mint Gold Token",
+ "PMKR": "Maker (Polygon Portal)",
"PMM": "Perpetual Motion Machine",
"PMNT": "Paymon",
"PMON": "Polkamon",
@@ -9488,6 +11048,10 @@
"PNL": "True PNL",
"PNODE": "Pinknode",
"PNT": "pNetwork Token",
+ "PNUT": "Peanut the Squirrel",
+ "PNUTDOGE": "PNUT DOGE",
+ "PNUTRUMP": "Peanut Trump",
+ "PNUTS": "Pnuts for squirrel",
"PNX": "PhantomX",
"PNY": "Peony Coin",
"POA": "Poa Network",
@@ -9495,13 +11059,15 @@
"POC": "POC Blockchain",
"POCAT": "Polite Cat",
"POCC": "POC Chain",
+ "POCHITA": "Pochita",
"POCKET": "XPocket",
"POCO": "Pocoland",
"POD": "Podo Point",
"PODFAST": "PodFast",
"PODIUM": "Smart League",
"PODO": "Power Of Deep Ocean",
- "POE": "Po.et",
+ "POE": "Portal Network",
+ "POET": "Po.et",
"POG": "PolygonumOnline",
"POGAI": "POGAI",
"POGS": "POG",
@@ -9528,6 +11094,7 @@
"POLKER": "Polker",
"POLL": "Pollchain",
"POLLUK": "Jasse Polluk",
+ "POLLUX": "Pollux Coin",
"POLNX": "eToro Polish Zloty",
"POLO": "NftyPlay",
"POLS": "Polkastarter",
@@ -9540,34 +11107,46 @@
"POLYX": "Polymesh",
"POM": "Proof Of Memes",
"PON": "Ponder",
+ "PONCH": "Ponchiqs",
"PONCHO": "Poncho",
"POND": "Marlin",
"PONGO": "Pongo",
+ "PONK": "PONK",
"PONKE": "Ponke",
"PONKEBNB": "Ponke BNB",
+ "PONKEI": "Chinese Ponkei the Original",
"PONYO": "Ponyo Impact",
"PONZI": "Ponzi",
+ "PONZIO": "Ponzio The Cat",
"PONZU": "Ponzu Inu",
"POO": "POOMOON",
+ "POOC": "Poo Chi",
"POOCOIN": "PooCoin",
"POODL": "Poodl",
"POODOGE": "Poo Doge",
"POOH": "POOH",
+ "POOKU": "Pooku",
"POOL": "PoolTogether",
"POOLX": "Poolz Finance",
"POOLXT": "Pool-X",
"POOLZ": "Poolz Finance",
"POOP": "Poopsicle",
+ "POOPC": "Poopcoin",
"POOWEL": "Joram Poowel",
- "POP": "PopularCoin",
- "POP!": "POP",
+ "POP": "Popcoin",
"POPC": "PopChest",
"POPCAT": "Popcat",
+ "POPCO": "Popcorn",
"POPDOG": "PopDog",
- "POPE": "Popecoin",
+ "POPE": "PopPepe",
+ "POPECOIN": "Popecoin",
+ "POPEPE": "POPEPE",
+ "POPGOAT": "Goatseus Poppimus",
"POPK": "POPKON",
"POPO": "popo",
+ "POPOETH": "POPO",
"POPSICLE": "Popsicle Finance",
+ "POPULARCOIN": "PopularCoin",
"POR": "Portugal National Team Fan Token",
"PORA": "PORA AI",
"PORK": "PepeFork",
@@ -9594,17 +11173,22 @@
"POTS": "Moonpot",
"POTTER": "POTTER",
"POU": "Pou",
+ "POUPE": "Poupe",
+ "POUW": "Pouwifhat",
"POW": "PowBlocks",
"POWELL": "Jerome Powell",
"POWER": "UniPower",
"POWR": "Power Ledger",
"POWSCHE": "Powsche",
+ "POX": "Monkey Pox",
+ "POZO": "Pozo Coin",
"PP": "ProducePay Chain",
"PPAD": "PlayPad",
"PPALPHA": "Phoenix Protocol",
"PPAY": "Plasma Finance",
"PPBLZ": "Pepemon Pepeballs",
"PPC": "PeerCoin",
+ "PPCOIN": "Project Plutus",
"PPFT": "Papparico Finance",
"PPI": "Primpy",
"PPIZZA": "P Pizza",
@@ -9630,6 +11214,7 @@
"PRDX": "ParamountDax Token",
"PRE": "Presearch",
"PREAI": "Predict Crypto",
+ "PREC": "Precipitate.AI",
"PRED": "Predictcoin",
"PREM": "Premium",
"PREME": "PREME Token",
@@ -9649,6 +11234,7 @@
"PRIME": "Echelon Prime",
"PRIMECHAIN": "PrimeChain",
"PRIMEETH": "Prime Staked ETH",
+ "PRIN": "Print The Pepe",
"PRINT": "Printer.Finance",
"PRINTERIUM": "Printerium",
"PRINTS": "FingerprintsDAO",
@@ -9663,7 +11249,10 @@
"PROB": "ProBit Token",
"PROC": "ProCurrency",
"PROD": "Productivist",
+ "PROFITHUNTERS": "Profit Hunters Coin",
"PROGE": "Protector Roge",
+ "PROJECT89": "Project89",
+ "PROLIFIC": "Prolific Game Studio",
"PROM": "Prometeus",
"PROOF": "PROVER",
"PROP": "Propeller",
@@ -9673,6 +11262,7 @@
"PROPS": "Propbase",
"PROPSPROJECT": "Props",
"PROS": "Prosper",
+ "PROSP": "Prospective",
"PROT": "PROT",
"PROTEO": "Proteo DeFi",
"PROTO": "Protocon",
@@ -9684,6 +11274,7 @@
"PRPS": "Purpose",
"PRPT": "Purple Token",
"PRQ": "PARSIQ",
+ "PRRR": "Cats Are Liquidity",
"PRS": "PressOne",
"PRT": "Parrot Protocol",
"PRTC": "Protectorate Protocol",
@@ -9694,6 +11285,7 @@
"PRVS": "Previse",
"PRX": "Parex",
"PRXY": "Proxy",
+ "PRXYV1": "Proxy v1",
"PRY": "PRIMARY",
"PRZS": "Perezoso",
"PS1": "POLYSPORTS",
@@ -9717,6 +11309,7 @@
"PSTAKE": "pSTAKE Finance",
"PSTN": "Piston",
"PSUB": "Payment Swap Utility Board",
+ "PSUSHI": "Sushi (Polygon Portal)",
"PSWAP": "Polkaswap",
"PSY": "PsyOptions",
"PSYOP": "PSYOP",
@@ -9741,40 +11334,60 @@
"PTU": "Pintu Token",
"PTX": "PlatinX",
"PUCA": "Puss Cat",
+ "PUCCA": "PUCCA",
"PUFETH": "pufETH",
- "PUFF": "Puff",
+ "PUFF": "Puff The Dragon",
+ "PUFFCOIN": "Puff",
+ "PUFFER": "Puffer",
"PUFFIN": "Puffin Global",
- "PUFFT": "Puff The Dragon",
+ "PUFFV1": "Puff The Dragon v1",
+ "PUFFY": "Puffy",
"PUGAI": "PUG AI",
+ "PUGDOG": "PUGDOG",
+ "PUGGY": "PUGGY Coin",
"PUGL": "PugLife",
+ "PUGWIF": "PUGWIFHAT",
+ "PUL": "PulseTrailerPark",
"PULI": "Puli",
"PULSE": "Pulse",
"PUMA": "Puma",
"PUMBAA": "Pumbaa",
"PUMLX": "PUMLx",
"PUMP": "PUMP",
+ "PUMPBTC": "pumpBTC",
+ "PUMPFUNBAN": "Pump Fun Ban",
+ "PUMPTRUMP": "PUMP TRUMP",
"PUN": "Punkko",
"PUNCH": "PUNCHWORD",
"PUNDIX": "Pundi X",
"PUNDU": "Pundu",
+ "PUNGU": "PUNGU",
+ "PUNI": "Uniswap Protocol Token (Polygon Portal)",
"PUNK": "PunkCity",
"PUNKAI": "PunkAI",
"PUNKV": "Punk Vault (NFTX)",
"PUP": "Puppy Coin",
"PUPA": "PupaCoin",
"PUPPER": "Pupper",
+ "PUPPET": "Puppet",
+ "PUPPETH": "Puppeth",
"PUPPETS": "Puppets Coin",
"PUPPIES": "I love puppies",
"PUPS": "PUPS (Ordinals)",
+ "PUPU": "Pepe's Dog",
"PURA": "Pura",
"PURE": "Puriever",
"PUREALT": "Pure",
- "PURR": "SpartaCats",
+ "PURPE": "Purple Pepe",
+ "PURR": "Purr",
+ "PURRC": "Purrcoin",
"PURSE": "Pundi X PURSE",
"PUS": "Pussy Cat",
"PUSD": "PegsUSD",
+ "PUSDC": "USD Coin (Polygon Portal)",
"PUSH": "Ethereum Push Notification Service",
"PUSHI": "Pushi",
+ "PUSS": "PussFi",
"PUSSY": "Pussy Financial",
"PUSSYINBIO": "Pussy In Bio",
"PUT": "PutinCoin",
@@ -9790,7 +11403,8 @@
"PWH": "pepewifhat",
"PWINGS": "JetSwap pWings",
"PWON": "Personal Wager",
- "PWR": "PWR Coin",
+ "PWR": "MaxxChain",
+ "PWRC": "PWR Coin",
"PWT": "PANDAINU",
"PX": "PXcoin",
"PXB": "PixelBit",
@@ -9818,7 +11432,9 @@
"PYRV1": "Vulcan Forged v1",
"PYT": "Payther",
"PYTH": "Pyth Network",
+ "PYTHIA": "Pythia",
"PYUSD": "PayPal USD",
+ "PZETH": "pzETH",
"PZM": "Prizm",
"PZP": "PlayZap",
"PZT": "Pizon",
@@ -9850,6 +11466,8 @@
"QDT": "QCHAIN",
"QDX": "Quidax",
"QFI": "QFinance",
+ "QGOLD": "Quorium",
+ "QGOV": "Q Protocol",
"QI": "BENQI",
"QIE": "QI Blockchain",
"QINGWA": "ShangXin QingWa",
@@ -9860,6 +11478,7 @@
"QLINDO": "QLINDO",
"QLIX": "QLix",
"QMALL": "QMALL TOKEN",
+ "QMV": "Qumva Network",
"QNT": "Quant",
"QNTR": "Quantor",
"QNTU": "Quanta",
@@ -9884,25 +11503,34 @@
"QSR": "Quasar",
"QSWAP": "Quantum Network",
"QTC": "Qitcoin",
+ "QTCC": "Quick Transfer coin",
"QTCON": "Quiztok",
+ "QTDAO": "Quantum DAO",
"QTF": "Quantfury",
"QTK": "QuantCheck",
"QTL": "Quatloo",
+ "QTLX": "Quantlytica",
"QTO": "QToken",
"QTUM": "QTUM",
"QTZ": "Quartz",
"QUA": "Quantum Tech",
+ "QUAC": "QUACK",
"QUACK": "Rich Quack",
"QUAM": "Quam Network",
+ "QUAN": "Quant AI",
"QUANT": "Quant Finance",
"QUARASHI": "Quarashi Network",
"QUARK": "Quark",
"QUARTZ": "Sandclock",
"QUASA": "Quasacoin",
+ "QUASAR": "Quasar",
"QUB": "Qubism",
"QUBE": "Qube",
"QUBIC": "Qubic",
"QUBITICA": "Qubitica",
+ "QUBY": "Quby",
+ "QUDEFI": "Qudefi",
+ "QUE": "Queen Of Memes",
"QUEEN": "Queen of Engrand",
"QUICK": "Quickswap",
"QUICKOLD": "Quickswap",
@@ -9931,6 +11559,7 @@
"R4RE": "R4RE Token",
"RAB": "Rabbit",
"RABB": "Rabbit INU",
+ "RABBI": "Len \"rabbi\" Sassaman",
"RABBIT": "Rabbit Finance",
"RABI": "Rabi",
"RAC": "RAcoin",
@@ -9947,6 +11576,7 @@
"RAFFLES": "Degen Raffles",
"RAFL": "RAFL",
"RAFT": "Raft",
+ "RAGDOLL": "Ragdoll",
"RAGE": "Rage Fan",
"RAI": "Rai Reflex Index",
"RAID": "Raid Token",
@@ -9956,6 +11586,7 @@
"RAIN": "Rainmaker Games",
"RAINBOW": "Rainbow Token",
"RAINC": "RainCheck",
+ "RAINCO": "Rain Coin",
"RAINI": "Rainicorn",
"RAISE": "Raise Token",
"RAIT": "Rabbitgame",
@@ -9972,6 +11603,7 @@
"RAP": "Philosoraptor",
"RAPDOGE": "RapDoge",
"RAPTOR": "Jesus-Raptor",
+ "RAR": "Rare Pepe",
"RARE": "SuperRare",
"RARI": "Rarible",
"RASTA": "ZionLabs Token",
@@ -10003,6 +11635,7 @@
"RBLZ": "RebelSatoshi",
"RBN": "Ribbon Finance",
"RBNB": "StaFi Staked BNB",
+ "RBNT": "Redbelly Network",
"RBP": "Rare Ball Potion",
"RBR": "Ribbit Rewards",
"RBRETT": "ROARING BRETT",
@@ -10011,6 +11644,7 @@
"RBUNNY": "Rocket Bunny",
"RBW": "Crypto Unicorns Rainbow",
"RBX": "RabbitX",
+ "RBXDEFI": "RBX",
"RBXS": "RBXSamurai",
"RBY": "RubyCoin",
"RC": "Russiacoin",
@@ -10018,11 +11652,13 @@
"RCC": "Reality Clash",
"RCCC": "RCCC",
"RCG": "Recharge",
+ "RCGE": "RCGE",
"RCH": "Rich",
"RCKT": "RocketSwap",
"RCM": "READ2N",
"RCN": "Ripio",
- "RCOIN": "RCoin",
+ "RCOIN": "ArCoin",
+ "RCOINEU": "RCoin",
"RCT": "RealChain",
"RCX": "RedCrowCoin",
"RD": "Round Dollar",
@@ -10036,6 +11672,7 @@
"RDNT": "Radiant Capital",
"RDNTV1": "Radiant Capital v1",
"RDO": "Rodeo Finance",
+ "RDOG": "Repost Dog",
"RDPX": "Dopex Rebate Token",
"RDR": "Rise of Defenders",
"RDS": "Reger Diamond",
@@ -10046,17 +11683,22 @@
"REAL": "RealLink",
"REALM": "Realm",
"REALMS": "Realms of Ethernity",
+ "REALP": "Real Pepe",
"REALPLATFORM": "REAL",
+ "REALTRACT": "RealTract",
"REALY": "Realy Metaverse",
"REAP": "ReapChain",
"REAPER": "Grim Finance",
"REAU": "Vira-lata Finance",
+ "REBD": "REBORN",
"REBL": "REBL",
"REBUS": "Rebuschain",
"REC": "Rec Token (REC)",
"RECA": "The Resistance Cat",
"RECKOON": "Reckoon",
"RECOM": "Recom",
+ "RECORD": "Music Protocol",
+ "RECT": "ReflectionAI",
"RED": "RED TOKEN",
"REDC": "RedCab",
"REDCO": "Redcoin",
@@ -10071,6 +11713,7 @@
"REDO": "Resistance Dog",
"REDP": "Red Ponzi Gud",
"REDPEPE": "Red Pepe",
+ "REDTH": "Red The Mal",
"REDZILLA": "REDZILLA COIN",
"REE": "ReeCoin",
"REEE": "REEE",
@@ -10085,6 +11728,7 @@
"REGALCOIN": "Regalcoin",
"REGEN": "Regen Network",
"REGENT": "REGENT COIN",
+ "REGI": "Resistance Girl",
"REHA": "Resistance Hamster",
"REHAB": "NFT Rehab",
"REI": "REI Network",
@@ -10100,28 +11744,35 @@
"REM": "REMME",
"REMCO": "Remco",
"REME": "REME-Coin",
+ "REMILIA": " Remilia",
"REMIT": "BlockRemit",
"REN": "REN",
"RENA": "Warena",
"RENBTC": "renBTC",
"RENC": "RENC",
+ "RENDER": "Render Network",
"RENDOGE": "renDOGE",
- "RENE": "Renewable Energy",
"RENEC": "RENEC",
"RENQ": "Renq Finance",
"RENS": "Rens",
"RENT": "Rent AI",
+ "RENTA": "Renta Network",
"RENTBE": "Rentberry",
"REP": "Augur",
+ "REPE": "Resistance Pepe",
"REPO": "Repo Coin",
+ "REPUB": "Republican",
+ "REPUBLICAN": "Republican",
"REPUX": "Repux",
+ "REPV1": "Reputation",
"REQ": "Request Network",
"RES": "Resistance",
"RESCUE": "Rescue",
"REST": "Restore",
- "RET": "RealTract",
+ "RET": "Renewable Energy",
"RETA": "Realital Metaverse",
"RETAIL": "Retail.Global",
+ "RETARDIA": "RETARDIA",
"RETARDIO": "RETARDIO",
"RETH": "Rocket Pool ETH",
"RETH2": "rETH2",
@@ -10132,17 +11783,22 @@
"REV": "Revain",
"REV3L": "REV3AL",
"REVA": "Revault Network",
+ "REVAL": "RevaLink Wallet Token",
"REVE": "Revenu",
"REVO": "Revomon",
"REVOAI": "revoAI",
+ "REVOL": "Revolution",
"REVOLAND": "Revoland Governance Token",
"REVON": "RevoNetwork",
"REVU": "Revuto",
"REVV": "REVV",
"REW": "Review.Network",
+ "REWARD": "Rewardable",
"REX": "Imbrex",
+ "REXHAT": "rexwifhat",
"REZ": "Renzo",
"RF": "Raido Financial",
+ "RFC": "Royal Finance Coin",
"RFCTR": "Reflector.Finance",
"RFD": "RefundCoin",
"RFDB": "Refund",
@@ -10152,6 +11808,7 @@
"RFL": "RAFL",
"RFOX": "RedFOX Labs",
"RFR": "Refereum",
+ "RFRM": "Reform DAO",
"RFT": "Rangers Fan Token",
"RFUEL": "Rio DeFi",
"RFX": "Reflex",
@@ -10169,18 +11826,21 @@
"RHP": "Rhypton Club",
"RIA": "aRIA Currency",
"RIB": "Ribus",
+ "RIBB": "Ribbit",
"RIBBIT": "Ribbit",
"RIC": "Riecoin",
"RICE": "RiceFarm",
"RICECOIN": "RiceCoin",
"RICH": "Richie",
"RICHOFME": "Rich Of Memes",
+ "RICHR": "RichRabbit",
"RICK": "Infinite Ricks",
"RICKMORTY": "Rick And Morty",
"RIDE": "Holoride",
"RIDEMY": "Ride My Car",
"RIF": "RIF Token",
"RIF3": "MetaTariffv3",
+ "RIFA": "Rifampicin",
"RIFI": "Rikkei Finance",
"RIGEL": "Rigel Finance",
"RIK": "RIKEZA",
@@ -10189,16 +11849,23 @@
"RIMBIT": "Rimbit",
"RIN": "Aldrin",
"RING": "Darwinia Network",
+ "RINGA": "Ring AI",
+ "RINGF": "Ring Financial",
"RINGX": "RING X PLATFORM",
"RINIA": "Rinia Inu",
+ "RINO": "Rino",
+ "RINT": "Rin Tin Tin",
+ "RINTARO": "Rintaro",
"RINU": "Raichu Inu",
"RIO": "Realio Network",
"RIOT": "Riot Racers",
+ "RIOV1": "Realio Network v1",
"RIP": "Fantom Doge",
"RIPAX": "RipaEx",
"RIPO": "RipOffCoin",
"RIPT": "RiptideCoin",
"RIPTO": "RiptoBuX",
+ "RIS": "Riser",
"RISE": "EverRise",
"RISEP": "Rise Protocol",
"RISEVISION": "Rise",
@@ -10209,7 +11876,10 @@
"RIVUS": "RivusDAO",
"RIYA": "Etheriya",
"RIZE": "Rizespor Token",
- "RIZO": "Rizo",
+ "RIZO": "HahaYes",
+ "RIZOLOL": "Rizo",
+ "RIZZ": "Rizz",
+ "RIZZMAS": "Rizzmas",
"RJV": "Rejuve.AI",
"RKC": "Royal Kingdom Coin",
"RKI": "RAKHI",
@@ -10220,7 +11890,9 @@
"RLC": "iExec",
"RLM": "MarbleVerse",
"RLOOP": "rLoop",
+ "RLP": "Resolv RLP",
"RLT": "Runner Land",
+ "RLUSD": "Ripple USD",
"RLX": "Relex",
"RLY": "Rally",
"RMATIC": "StaFi Staked MATIC",
@@ -10240,6 +11912,7 @@
"RND": "The RandomDAO",
"RNDR": "Render Token",
"RNDX": "Round X",
+ "RNEAR": "Near (Rainbow Bridge)",
"RNS": "RenosCoin",
"RNT": "OneRoot Network",
"RNTB": "BitRent",
@@ -10252,6 +11925,8 @@
"ROBIN": "Robin of Da Hood",
"ROBINH": "ROBIN HOOD",
"ROBO": "RoboHero",
+ "ROBOTA": "TAXI",
+ "ROBOTAXI": "ROBOTAXI",
"ROC": "Rasputin Online Coin",
"ROCCO": "Just A Rock",
"ROCK": "Bedrock",
@@ -10261,10 +11936,12 @@
"ROCKETFI": "RocketFi",
"ROCKI": "Rocki",
"ROCKY": "Rocky",
+ "ROCKYCOIN": "ROCKY",
"ROCO": "ROCO FINANCE",
"RODAI": "ROD.AI",
"ROE": "Rover Coin",
"ROG": "ROGin AI",
+ "ROGER": "ROGER",
"ROI": "ROIcoin",
"ROK": "Rockchain",
"ROKM": "Rocket Ma",
@@ -10276,6 +11953,7 @@
"RONCOIN": "RON",
"ROND": "ROND",
"RONIN": "Ronin",
+ "RONNIE": "Ronnie",
"ROO": "Lucky Roo",
"ROOBEE": "ROOBEE",
"ROOK": "KeeperDAO",
@@ -10286,10 +11964,14 @@
"ROOT": "The Root Network",
"ROOTCOIN": "RootCoin",
"ROOTS": "RootProject",
+ "ROPIRITO": "Ropirito",
"ROS": "ROS Coin",
"ROSA": "Rosa Inu",
"ROSE": "Oasis Labs",
+ "ROSEC": "Rosecoin",
+ "ROSEW": "RoseWifHat",
"ROSN": "Roseon Finance",
+ "ROSS": "Ross Ulbricht",
"ROSX": "Roseon",
"ROT": "Rotten",
"ROTTY": "ROTTYCOIN",
@@ -10297,6 +11979,7 @@
"ROUP": "Roup (Ordinals)",
"ROUSH": "Roush Fenway Racing Fan Token",
"ROUTE": "Router Protocol",
+ "ROUTEV1": "Router Protocol v1",
"ROVI": "ROVI",
"ROW": "Rage On Wheels",
"ROWAN": "Sifchain",
@@ -10310,6 +11993,7 @@
"RPD": "Rapids",
"RPEPEc": "RoaringPepe",
"RPG": "Rangers Protocol",
+ "RPGV1": "Rangers Protocol v1",
"RPILL": "Red Pill",
"RPK": "RepubliK",
"RPL": "RocketPool",
@@ -10320,9 +12004,11 @@
"RPT": "Rug Proof",
"RPTR": "Raptor Finance",
"RPUT": "Robin8 Profile Utility Token",
+ "RPX": "Red Pulse Token",
"RPZX": "Rapidz",
"RRB": "Renrenbit",
"RRC": "Recycling Regeneration Chain",
+ "RREN": "REN (Rainbow Bridge)",
"RRT": "Recovery Right Tokens",
"RS": "ReadySwap",
"RSC": "ResearchCoin",
@@ -10339,18 +12025,24 @@
"RST": "REGA Risk Sharing Token",
"RSTK": "Restake Finance",
"RSUN": "RisingSun",
+ "RSUSHI": "Sushi (Rainbow Bridge)",
"RSV": "Reserve",
+ "RSVV1": "Reserve v1",
"RSWETH": "Restaked Swell Ethereum",
"RT2": "RotoCoin",
"RTB": "AB-CHAIN",
+ "RTBL": "Rolling T-bill",
"RTC": "Reltime",
+ "RTD": "Retard",
"RTE": "Rate3",
"RTF": "Ready to Fight",
"RTH": "Rotharium",
"RTK": "RetaFi",
"RTM": "Raptoreum",
+ "RTR": "Restore The Republic",
"RTT": "Restore Truth Token",
"RU": "RIFI United",
+ "RUBB": "Rubber Ducky Cult",
"RUBCASH": "RUBCASH",
"RUBIT": "Rublebit",
"RUBX": "eToro Russian Ruble",
@@ -10360,17 +12052,22 @@
"RUFF": "Ruff",
"RUG": "Rug",
"RUGA": "RUGAME",
+ "RUGPULL": "Captain Rug Pull",
"RUGZ": "pulltherug.finance",
"RULER": "Ruler Protocol",
"RUM": "RUM Pirates of The Arrland Token",
"RUN": "Run",
"RUNE": "Thorchain",
+ "RUNEVM": "RUNEVM",
+ "RUNNER": "Runner",
"RUNY": "Runy",
"RUP": "Rupee",
"RUPX": "Rupaya",
+ "RURI": "Ruri - Truth Terminal's Crush",
"RUSD": "Reflecto USD",
"RUSH": "RUSH COIN",
"RUSHCMC": "RUSHCMC",
+ "RUSSELL": "Russell",
"RUST": "RustCoin",
"RUSTBITS": "Rustbits",
"RUTH": "RUTH",
@@ -10378,9 +12075,12 @@
"RUX": "Gacrux NFT",
"RVC": "Revenue Coin",
"RVF": "RocketX exchange",
+ "RVFV1": "RocketX exchange v1",
+ "RVFV2": "RocketX exchange v2",
"RVL": "Revolotto",
"RVLNG": "RevolutionGames",
"RVLT": "Revolt 2 Earn",
+ "RVLTV1": "Revolt 2 Earn v1",
"RVM": "Realvirm",
"RVN": "Ravencoin",
"RVO": "AhrvoDEEX",
@@ -10403,23 +12103,27 @@
"RXT": "RIMAUNANGIS",
"RYC": "RoyalCoin",
"RYCN": "RoyalCoin 2.0",
+ "RYD": "RYderOSHI",
"RYIU": "RYI Unity",
- "RYO": "Ryo",
+ "RYO": "RYO Coin",
+ "RYOCURRENCY": "Ryo",
"RYOMA": "Ryoma",
"RYOSHI": "Ryoshis Vision",
"RYU": "The Blue Dragon",
"RYZ": "Anryze",
"RZR": "RazorCoin",
"RedFlokiCEO": "Red Floki CEO",
+ "S": "Sonic Labs",
"S2K": "Sports 2K75",
"S315": "SWAP315",
"S4F": "S4FE",
"S8C": "S88 Coin",
"SA": "Superalgos",
- "SABAI": "Sabai Ecoverse",
+ "SABAI": "Sabai Protocol",
"SABLE": "Sable Finance",
"SABR": "SABR Coin",
"SAC1": "Sable Coin",
+ "SAD": "SadCat",
"SAF": "Safinus",
"SAFE": "Safe",
"SAFEBTC": "SafeBTC",
@@ -10429,6 +12133,7 @@
"SAFEHAMSTERS": "SafeHamsters",
"SAFELIGHT": "SafeLight",
"SAFELUNAR": "SafeLunar",
+ "SAFEM": "SAFEMOON SOLANA",
"SAFEMARS": "Safemars",
"SAFEMOO": "SafeMoo",
"SAFEMOON": "SafeMoon",
@@ -10444,6 +12149,7 @@
"SAFUU": "SAFUU",
"SAGA": "Saga",
"SAGACOIN": "SagaCoin",
+ "SAGE": "Ceremonies AI",
"SAI": "SAI",
"SAIL": "SAIL",
"SAITA": "SaitaChain",
@@ -10452,6 +12158,7 @@
"SAITAMAV1": "Saitama v1",
"SAITANOBI": "Saitanobi",
"SAITO": "Saito",
+ "SAIY": "Saiyan PEPE",
"SAK": "SharkCoin",
"SAKAI": "Sakai Vault",
"SAKATA": "Sakata Inu",
@@ -10459,24 +12166,29 @@
"SAL": "SalPay",
"SALD": "Salad",
"SALE": "DxSale Network",
+ "SALL": "Sallar",
"SALLY": "SALAMANDER",
"SALMAN": "Mohameme Bit Salman",
"SALMON": "Salmon",
"SALT": "Salt Lending",
"SAM": "Samsunspor Fan Token",
"SAMA": "Moonsama",
+ "SAMMY": "Samoyed",
"SAMO": "Samoyedcoin",
"SAN": "Santiment",
"SANA": "Storage Area Network Anywhere",
+ "SANCHO": "Sancho",
"SAND": "The Sandbox",
"SANDG": "Save and Gain",
"SANDWICH": " Sandwich Network",
"SANDY": "Sandy",
"SANI": "Sanin Inu",
+ "SANIN": "Sanin",
"SANJI": "Sanji Inu",
"SANSHU": "Sanshu Inu",
"SANTA": "SANTA CHRISTMAS INU",
"SANTAGROK": "Santa Grok",
+ "SANTAHAT": "SANTA HAT",
"SANTOS": "Santos FC Fan Token",
"SAO": "Sator",
"SAP": "SwapAll",
@@ -10487,10 +12199,14 @@
"SARCO": "Sarcophagus",
"SAROS": "Saros",
"SAS": "Stand Share",
+ "SASHA": "SASHA CAT",
"SASHIMI": "Sashimi",
"SAT": "Satisfaction Token",
"SAT2": "Saturn2Coin",
"SATA": "Signata",
+ "SATAN": "MrBeast's Cat",
+ "SATO": "Atsuko Sato",
+ "SATORI": "Satori Network",
"SATOSHINAKAMOTO": "Satoshi Nakamoto",
"SATOX": "Satoxcoin",
"SATOZ": "Satozhi",
@@ -10505,21 +12221,25 @@
"SAUDIPEPE": "SAUDI PEPE",
"SAUDISHIB": "Saudi Shiba Inu",
"SAUNA": "SaunaFinance Token",
+ "SAV": "Save America",
"SAV3": "SAV3",
"SAVG": "SAVAGE",
"SAVM": "SatoshiVM",
+ "SAY": "SAY Coin",
"SB": "DragonSB",
"SBA": "simplyBrand",
"SBABE": "SNOOPYBABE",
"SBAE": "Salt Bae For The People",
"SBC": "StableCoin",
"SBCC": "Smart Block Chain City",
+ "SBCH": "Smart Bitcoin Cash",
"SBE": "Sombe",
"SBEFE": "BEFE",
"SBET": "SBET",
"SBF": "SBF In Jail",
"SBGO": "Bingo Share",
"SBIO": "Vector Space Biosciences, Inc.",
+ "SBNB": "Binance Coin (SpookySwap)",
"SBOX": "SUIBOXER",
"SBR": "Saber",
"SBRT": "SaveBritney",
@@ -10528,7 +12248,7 @@
"SBTC": "Super Bitcoin",
"SC": "Siacoin",
"SC20": "Shine Chain",
- "SCA": "SiaClassic",
+ "SCA": "Scallop",
"SCALE": "Scalia Infrastructure",
"SCAM": "Scam Coin",
"SCAMP": "ScamPump",
@@ -10537,17 +12257,21 @@
"SCAPE": "Etherscape",
"SCAR": "Velhalla",
"SCARAB": "Scarab Finance",
+ "SCARCITY": "SCARCITY",
"SCASH": "SpaceCash",
"SCAT": "Sad Cat Token",
"SCC": "StockChain Coin",
"SCCP": "S.C. Corinthians Fan Token",
"SCDS": "Shrine Cloud Storage Network",
+ "SCF": "Smoking Chicken Fish",
"SCFX": "Shui CFX",
"SCH": "SoccerHub",
"SCHO": "Scholarship Coin",
"SCHR": "Schrodinger",
+ "SCHRO": "Schrodinger",
"SCHRODI": "Schrödi",
"SCIA": "Stem Cell",
+ "SCIHUB": "sci-hub",
"SCIVIVE": "sciVive",
"SCIX": "Scientix",
"SCK": "Space Corsair Key",
@@ -10565,6 +12289,7 @@
"SCOR": "Scorista",
"SCORE": "Scorecoin",
"SCOT": "Scotcoin",
+ "SCOTT": "Scottish",
"SCOTTY": "Scotty Beam",
"SCP": "ScPrime",
"SCPT": "Script Network",
@@ -10577,14 +12302,19 @@
"SCRIV": "SCRIV",
"SCRL": "Scroll",
"SCRM": "Scorum",
+ "SCROLL": "Scroll Network",
+ "SCROLLY": "Scrolly the map",
"SCROOGE": "Scrooge",
"SCRPT": "ScryptCoin",
"SCRT": "Secret",
+ "SCRVUSD": "Savings crvUSD",
"SCRYPTA": "Scrypta",
+ "SCRYPTTOKEN": "ScryptToken",
"SCS": "Solcasino Token",
"SCSX": "Secure Cash",
- "SCT": "ScryptToken",
+ "SCT": "SuperCells",
"SCTK": "SharesChain",
+ "SCUBA": "Scuba Dog",
"SCY": "Synchrony",
"SD": "Stader",
"SDA": "SDChain",
@@ -10592,8 +12322,11 @@
"SDAO": "SingularityDAO",
"SDC": "ShadowCash",
"SDCRV": "Stake DAO CRV",
+ "SDEUSD": "Staked deUSD",
"SDEX": "SmarDex",
"SDL": "Saddle Finance",
+ "SDM": "Shieldeum",
+ "SDME": "SDME",
"SDN": "Shiden Network",
"SDO": "TheSolanDAO",
"SDOG": "Small Doge",
@@ -10606,7 +12339,8 @@
"SDT": "TerraSDT",
"SDUSD": "SDUSD",
"SDX": "SwapDEX",
- "SEA": "Second Exchange Alliance",
+ "SEAGULL": "SEAGULL SAM",
+ "SEAIO": "Second Exchange Alliance",
"SEAL": "Seal Finance",
"SEALN": "Seal Network",
"SEAM": "Seamless Protocol",
@@ -10632,26 +12366,38 @@
"SEG": "Solar Energy",
"SEI": "Sei",
"SEILOR": "Kryptonite",
+ "SEIYAN": "Seiyan Token",
"SEKAI": "Sekai DAO",
+ "SEKOIA": "sekoia by Virtuals",
"SEL": "SelenCoin",
"SELF": "SELFCrypto",
+ "SELFI": "SelfieSteve",
"SELFIE": "SelfieDogCoin",
+ "SELFIEC": "Selfie Cat",
+ "SELFT": "SelfToken",
"SELLC": "Sell Token",
"SEM": "Semux",
"SEN": "Sentaro",
"SENATE": "SENATE",
"SENC": "Sentinel Chain",
"SEND": "Social Send",
+ "SENDOR": "Sendor",
"SENK": "Senk",
"SENNO": "SENNO",
"SENSE": "Sense Token",
"SENSI": "Sensi",
"SENSO": "SENSO",
"SENSOR": "Sensor Protocol",
+ "SENSOV1": "SENSO v1",
+ "SENSUS": "Sensus",
"SENT": "Sentinel",
+ "SENTAI": "SentAI",
+ "SENTI": "Sentinel Bot Ai",
+ "SENTR": "Sentre Protocol",
"SEON": "Seedon",
"SEOR": "SEOR Network",
"SEOS": "Smart Eye Operating System",
+ "SEP": "Smart Energy Pay",
"SEPA": "Secure Pad",
"SEQ": "Sequence",
"SER": "Secretum",
@@ -10670,6 +12416,7 @@
"SEW": "simpson in a memes world",
"SEX": "SEX Odyssey",
"SEXY": "EthXY",
+ "SEXYP": "SEXY PEPE",
"SFARM": "SolFarm",
"SFC": "Solarflarecoin",
"SFCP": "SF Capital",
@@ -10682,9 +12429,11 @@
"SFIT": "Sense4FIT",
"SFL": "Sunflower Land",
"SFLOKI": "SuiFloki-Inu",
+ "SFLR": "Sceptre Staked FLR",
"SFM": "SafeMoon V2",
"SFP": "SafePal",
"SFR": "SaffronCoin",
+ "SFRAX": "Staked FRAX",
"SFRC": "Safari Crush",
"SFRXETH": "Frax Staked Ether",
"SFT": "SportsFix",
@@ -10711,12 +12460,14 @@
"SHA": "Safe Haven",
"SHACK": "Shackleford",
"SHACOIN": "Shacoin",
+ "SHAD": "Shadowswap Finance",
"SHADE": "ShadeCoin",
"SHAK": "Shakita Inu",
"SHAKE": "Spaceswap SHAKE",
"SHAMAN": "Shaman King Inu",
"SHAN": "Shanum",
"SHANG": "Shanghai Inu",
+ "SHAR": "Shark Cat",
"SHARBI": "SHARBI",
"SHARD": "ShardCoin",
"SHARDS": "SolChicks Shards",
@@ -10725,9 +12476,12 @@
"SHARES": "shares.finance",
"SHARK": "Sharky",
"SHARKC": "Shark Cat",
+ "SHARKI": "Sharki",
+ "SHARP": "Sharp",
"SHARPE": "Sharpe Capital",
"SHAUN": "SHAUN INU",
"SHB4": "Super Heavy Booster 4",
+ "SHC": "School Hack Coin",
"SHD": "ShardingDAO",
"SHDW": "Shadow Token",
"SHE": "Shine Chain",
@@ -10735,6 +12489,7 @@
"SHEEESH": "Secret Gem",
"SHEESH": "Sheesh it is bussin bussin",
"SHEESHA": "Sheesha Finance",
+ "SHEGEN": "Aiwithdaddyissues",
"SHEI": "SheikhSolana",
"SHELL": "Shell Token",
"SHEN": "Shen",
@@ -10754,6 +12509,7 @@
"SHIBAAI": "SHIBAAI",
"SHIBAC": "SHIBA CLASSIC",
"SHIBACASH": "ShibaCash",
+ "SHIBADOG": "Shiba San",
"SHIBAI": "AiShiba",
"SHIBAKEN": "Shibaken Finance",
"SHIBAMOM": "Shiba Mom",
@@ -10764,6 +12520,7 @@
"SHIBCAT": "SHIBCAT",
"SHIBCEO": "ShibCEO",
"SHIBDOGE": "ShibaDoge",
+ "SHIBEINU": "Shibe Inu",
"SHIBELON": "ShibElon",
"SHIBEMP": "Shiba Inu Empire",
"SHIBGF": "Shiba Girlfriend",
@@ -10775,6 +12532,8 @@
"SHIBLITE": "Shiba Lite",
"SHIBMERICAN": "Shibmerican",
"SHIBO": "ShiBonk",
+ "SHIBON": "SHIB ON SOLANA",
+ "SHIBS": "Shibsol",
"SHIBTC": "Shibabitcoin",
"SHIBU": "SHIBU INU",
"SHICO": "ShibaCorgi",
@@ -10784,6 +12543,7 @@
"SHIFT": "Shift",
"SHIH": "Shih Tzu",
"SHIK": "Shikoku",
+ "SHIKOKU": "Mikawa Inu",
"SHIL": "Shila Inu",
"SHILL": "SHILL Token",
"SHILLD": "SHILLD",
@@ -10792,10 +12552,15 @@
"SHINA": "Shina Inu",
"SHINJA": "Shibnobi",
"SHINO": "ShinobiVerse",
+ "SHINOB": "Shinobi",
"SHINT": "Shiba Interstellar",
"SHIP": "ShipChain",
+ "SHIR": "SHIRO",
+ "SHIRO": "Shiro Neko",
"SHIRYOINU": "Shiryo-Inu",
+ "SHISHA": "Shisha Coin",
"SHIT": "I will poop it NFT",
+ "SHITC": "Shitcoin",
"SHIV": "Shiva Inu",
"SHK": "Shrike",
"SHL": "Oyster Shell",
@@ -10804,11 +12569,14 @@
"SHNT": "Sats Hunters",
"SHO": "Showcase Token",
"SHOE": "ShoeFy",
+ "SHOG": "SHOG",
+ "SHOGGOTH": "Shoggoth",
"SHOKI": "Shoki",
"SHON": "ShonToken",
"SHOOT": "Mars Battle",
"SHOOTER": "Top Down Survival Shooter",
"SHOP": "Shoppi Coin",
+ "SHOPN": "ShopNEXT",
"SHOPX": "Splyt",
"SHORK": "shork",
"SHORTY": "ShortyCoin",
@@ -10820,16 +12588,19 @@
"SHRED": "ShredN",
"SHREK": "ShrekCoin",
"SHRIMP": "SHRIMP",
+ "SHROO": "Shroomates",
"SHROOM": "Shroom.Finance",
"SHROOMFOX": "Magic Shroom",
"SHRUB": "Shrub",
"SHS": "SHEESH",
+ "SHU": "Shutter",
"SHUB": "SimpleHub",
"SHUFFLE": "SHUFFLE!",
"SHVR": "Shivers",
"SHX": "Stronghold Token",
"SHYTCOIN": "ShytCoin",
"SI": "Siren",
+ "SIACLASSIC": "SiaClassic",
"SIB": "SibCoin",
"SIBA": "SibaInu",
"SIC": "Swisscoin",
@@ -10841,44 +12612,61 @@
"SIFT": "Smart Investment Fund Token",
"SIFU": "SIFU",
"SIG": "Signal",
+ "SIGMA": "SIGMA",
"SIGN": "Sign Token",
"SIGNA": "Signa",
"SIGNAT": "SignatureChain",
"SIGT": "Signatum",
"SIGU": "Singular",
+ "SIKA": "SikaSwap",
"SIL": "SIL Finance Token V2",
"SILK": "SilkCoin",
"SILKR": "SilkRoadCoin",
"SILKT": "SilkChain",
+ "SILL": "Silly Duck",
"SILLY": "Silly Dragon",
"SILO": "Silo Finance",
+ "SILV": "Silver Surfer Solana",
"SILV2": "Escrowed Illuvium 2",
"SILVA": "Silva Token",
"SILVER": "SILVER",
+ "SILVERKRC": "Silver KRC-20",
+ "SILVERSTAND": "Silver Standard",
"SILVERWAY": "Silverway",
+ "SIM": "Simpson",
+ "SIMBA": "SIMBA The Sloth",
"SIMP": "SO-COL",
"SIMPLE": "SimpleChain",
+ "SIMPS": "Simpson MAGA",
+ "SIMPSO": "Simpson Neiro",
"SIMPSON": "Homer",
"SIMPSON6900": "Simpson6900 ",
+ "SIMPSONF": "Simpson FUKU",
+ "SIMPSONP": "Simpson Predictions",
"SIMPSONSINU": "The Simpsons Inu",
+ "SIMPSONT": "Simpson Trump",
"SIMSOL": "SimSol",
"SIN": "Sinverse",
"SINE": "Sinelock",
"SING": "SingularFarm",
"SINGLE": "Single Finance",
+ "SINK": "Let that sink in",
"SINS": "SafeInsure",
"SINSO": "SINSO",
"SINX": "SINX Token",
+ "SIO": "SAINO",
"SION": "FC Sion",
"SIP": "Space SIP",
"SIPHER": "Sipher",
"SIPHON": "Siphon Life Spell",
"SIR": "Sir",
+ "SIRIUS": "first reply",
"SIS": "Symbiosis Finance",
"SISA": "Strategic Investments in Significant Areas",
"SISC": "Shirushi Coin",
"SISHI": "Sishi Finance",
"SIU": "Siu",
+ "SIUU": "SIUUU",
"SIUUU": "Crustieno Renaldo",
"SIV": "Sivasspor Token",
"SIX": "SIX Network",
@@ -10888,15 +12676,19 @@
"SJCX": "StorjCoin",
"SKAI": "Skillful AI",
"SKB": "SkullBuzz",
+ "SKBDI": "Skibidi Toilet",
"SKC": "Skeincoin",
"SKCS": "Staked KCS",
"SKEB": "Skeb",
"SKET": "Sketch coin",
"SKEY": "SmartKey",
- "SKI": "Skillchain",
+ "SKG888": "Safu & Kek Gigafundz 888",
+ "SKI": "Ski Mask Dog",
"SKIBIDI": "Skibidi Toilet",
+ "SKICAT": "SKI MASK CAT",
"SKID": "Success Kid",
"SKILL": "CryptoBlades",
+ "SKILLC": "Skillchain",
"SKIN": "Skincoin",
"SKING": "Solo King",
"SKINS": "Coins & Skins",
@@ -10916,14 +12708,18 @@
"SKT": "Sukhavati Network",
"SKU": "Sakura",
"SKULL": "Pirate Blocks",
- "SKY": "Skycoin",
+ "SKX": "SKPANAX",
+ "SKY": "Sky",
"SKYA": "Sekuya Multiverse",
+ "SKYCOIN": "Skycoin",
"SKYFT": "SKYFchain",
"SKYM": "SkyMap",
"SKYRIM": "Skyrim Finance",
"SKYX": "SKUYX",
"SLA": "SUPERLAUNCH",
"SLAM": "Slam Token",
+ "SLAP": "CatSlap",
+ "SLAVI": "Slavi Coin",
"SLB": "Solberg",
"SLC": "Solice",
"SLCL": "Solcial",
@@ -10934,6 +12730,7 @@
"SLERF2": "SLERF 2.0",
"SLERFFORK": "SlerfFork",
"SLEX": "SLEX Token",
+ "SLF": "Self Chain",
"SLG": "Land Of Conquest",
"SLICE": "Tranche Finance",
"SLICEC": "SLICE",
@@ -10947,8 +12744,10 @@
"SLND": "Solend",
"SLNV2": "SLNV2",
"SLOKI": "Super Floki",
+ "SLOP": "Slop",
"SLORK": "SLORK",
"SLOTH": "Sloth",
+ "SLOTHA": "Slothana",
"SLP": "Smooth Love Potion",
"SLPV1": "Smooth Love Potion v1",
"SLR": "SolarCoin",
@@ -10957,6 +12756,7 @@
"SLS": "SaluS",
"SLST": "SmartLands",
"SLT": "Social Lending Network",
+ "SLUGDENG": "SLUG DENG",
"SLUMBO": "SLUMBO",
"SLVX": "eToro Silver",
"SLX": "Slate",
@@ -10967,6 +12767,7 @@
"SMART": "SmartCash",
"SMARTB": "Smart Coin",
"SMARTCREDIT": "SmartCredit Token",
+ "SMARTH": "SmartHub",
"SMARTLOX": "SmartLOX",
"SMARTM": "SmartMesh",
"SMARTMEME": "SmartMEME",
@@ -10981,19 +12782,23 @@
"SMCW": "Space Misfits",
"SMD": "SMD Coin",
"SMETA": "StarkMeta",
+ "SMETX": "SpecialMetalX",
"SMF": "SmurfCoin",
"SMG": "Smaugs NFT",
"SMH": "Spacemesh",
"SMI": "SafeMoon Inu",
"SMIDGE": "Smidge",
+ "SMIDGEETH": "Smidge",
"SMILE": "Smile Token",
"SMILEK": "Smilek to the Bank",
"SMILEY": "SMILEY",
"SMILY": "Smily Trump",
+ "SMKNG": "SmonkeyKong",
"SML": "Saltmarble",
"SMLY": "SmileyCoin",
"SMM": "TrendingTool.io",
"SMOG": "Smog",
+ "SMOK": "Smoking Chicken Fish",
"SMOKE": "Smoke",
"SMOL": "Smolcoin",
"SMOLE": "smolecoin",
@@ -11018,15 +12823,20 @@
"SMX": "Snapmuse.io",
"SN": "SpaceN",
"SNA": "SUKUYANA",
+ "SNAC": "SnackboxAI",
"SNACK": "Crypto Snack",
+ "SNAI": "SwarmNode.ai",
"SNAIL": "SnailBrook",
+ "SNAKE": "snake",
"SNAKES": "Snakes Game",
"SNAP": "SnapEx",
+ "SNAPCAT": "Snapcat",
"SNB": "SynchroBitcoin",
"SNC": "SunContract",
"SNCT": "SnakeCity",
"SND": "Sandcoin",
"SNE": "StrongNode",
+ "SNEED": "Sneed",
"SNEK": "Snek",
"SNEKE": "Snek on Ethereum",
"SNET": "Snetwork",
@@ -11034,6 +12844,9 @@
"SNFTS": "Seedify NFT Space",
"SNG": "SINERGIA",
"SNGLS": "SingularDTV",
+ "SNGT": "SNG Token",
+ "SNIBBU": "Snibbu The Crab",
+ "SNIFT": "StarryNift",
"SNIP": "LyrnAI",
"SNIPPEPE": "SNIPING PEPE",
"SNITCH": "Randall",
@@ -11043,6 +12856,7 @@
"SNMT": "Satoshi Nakamoto Token",
"SNN": "SeChain",
"SNOB": "Snowball",
+ "SNOLEX": "Snolex",
"SNOOP": "SnoopDAO",
"SNOOPY": "Snoopy",
"SNORK": "Snork",
@@ -11072,20 +12886,26 @@
"SOBA": "SOBA Token",
"SOBB": "SoBit",
"SOBER": "Solabrador",
+ "SOBULL": "SoBULL",
"SOC": "All Sports Coin",
"SOCA": "Socaverse",
"SOCC": "SocialCoin",
"SOCCER": "SoccerInu",
+ "SOCIAL": "Phavercoin",
"SOCKS": "Unisocks",
"SOCOLA": "SOCOLA INU",
"SODA": "SODA Coin",
+ "SODAL": "Sodality Coin",
"SODO": "Scooby Doo",
+ "SOFAC": "SofaCat",
"SOFI": "RAI Finance",
"SOFTCO": "SOFT COQ INU",
"SOH": "Stohn Coin",
"SOHOT": "SOHOTRN",
- "SOIL": "SoilCoin",
+ "SOIL": "Soil",
+ "SOILCOIN": "SoilCoin",
"SOJ": "Sojourn Coin",
+ "SOK": "shoki",
"SOKU": "Soku Swap",
"SOL": "Solana",
"SOL10": "SOLANA MEME TOKEN",
@@ -11094,21 +12914,27 @@
"SOLALA": "Solala",
"SOLAMA": "Solama",
"SOLAMB": "SOLAMB",
+ "SOLAN": "Solana Beach",
+ "SOLANAP": "Solana Poker",
+ "SOLANAS": "Solana Swap",
"SOLAPE": "SolAPE Token",
"SOLAR": "Solar",
"SOLARA": "Solara",
"SOLARDAO": "Solar DAO",
"SOLARE": "Solareum",
+ "SOLAREU": "Solareum",
"SOLARFARM": "SolarFarm",
"SOLARIX": "SOLARIX",
"SOLAV": "SOLAV TOKEN",
"SOLBET": "SOL STREET BETS",
+ "SOLBO": "SolBoss",
"SOLBULL": "SOLBULL",
"SOLC": "SolCard",
"SOLCASH": "SOLCash",
"SOLCAT": "SOLCAT",
"SOLCEX": "SolCex",
"SOLE": "SoleCoin",
+ "SOLER": "Solerium",
"SOLETF": "SOL ETF",
"SOLEX": "Solex Launchpad",
"SOLFI": "SoliDefi",
@@ -11116,13 +12942,18 @@
"SOLGUN": "Solgun",
"SOLID": "Solidified",
"SOLIDSEX": "SOLIDsex: Tokenized veSOLID",
+ "SOLITO": "SOLITO",
"SOLKIT": "Solana Kit",
"SOLLY": "Solly",
+ "SOLM": "SolMix",
"SOLMATES": "SOLMATES",
+ "SOLME": "Solmedia",
"SOLMEME": "TrumpFFIEGMEBidenCAT2024AMC",
"SOLNAV": "SOLNAV AI",
"SOLNIC": "Solnic",
"SOLO": "Sologenic",
+ "SOLOR": "Solordi",
+ "SOLP": "SolPets",
"SOLPAD": "Solpad Finance",
"SOLPAKA": "Solpaka",
"SOLPENG": "SOLPENG",
@@ -11130,15 +12961,24 @@
"SOLS": "sols",
"SOLSCC": "sols",
"SOLSPONGE": "Solsponge",
+ "SOLT": "Soltalk AI",
+ "SOLTR": "SolTrump",
+ "SOLV": "Solv Protocol",
+ "SOLVBTC": "Solv Protocol SolvBTC",
+ "SOLVBTCBBN": "Solv Protocol SolvBTC.BBN",
+ "SOLVBTCCORE": "Solv Protocol SolvBTC.CORE",
"SOLVE": "SOLVE",
"SOLWIF": "Solwif",
"SOLX": "SolarX",
+ "SOLXD": "Solxdex",
"SOLY": "Solamander",
+ "SOLYMPICS": "Solympics",
"SOLZILLA": "Solzilla",
"SOM": "Souls of Meta",
"SOMA": "Soma",
"SOMM": "Sommelier",
"SOMNIUM": "Somnium Space CUBEs",
+ "SOMPS": "SompsOnKas",
"SON": "Simone",
"SONAR": "SonarWatch",
"SONG": "Song Coin",
@@ -11147,9 +12987,12 @@
"SONICO": "Sonic",
"SONICWIF": "SonicWifHat",
"SONNE": "Sonne Finance",
+ "SONOF": "Son of Solana",
"SOON": "Soonaverse",
"SOONCOIN": "SoonCoin",
+ "SOOTCASE": "I like my sootcase",
"SOP": "SoPay",
+ "SOPH": "Sophon",
"SOPHON": "Sophon (Atomicals)",
"SOR": "Sorcery",
"SORA": "Sora Validator Token",
@@ -11159,6 +13002,7 @@
"SORAI": "Sora AI",
"SORAPORN": "Sora Porn",
"SOSNOVKINO": "Sosnovkino",
+ "SOSWAP": "Solana Swap",
"SOT": "Soccer Crypto",
"SOTA": "SOTA Finance",
"SOUL": "Phantasma",
@@ -11170,22 +13014,30 @@
"SOV": "Sovryn",
"SOVE": "Soverain",
"SOVI": "Sovi Finance",
+ "SOVRN": "Sovrun",
"SOWA": "Sowa AI",
"SOX": "Nobby Game",
"SOY": "Soy Finance",
"SP": "Sex Pistols",
"SP8DE": "Sp8de",
"SPA": "Sperax",
+ "SPAC": "SPACE DOGE",
"SPACE": "Spacelens",
"SPACECOIN": "SpaceCoin",
+ "SPACED": "SPACE DRAGON",
"SPACEPI": "SpacePi",
"SPAD": "SolPad",
"SPAI": "Starship AI",
"SPAIN": "SpainCoin",
"SPANK": "SpankChain",
+ "SPARK": "Sparklife",
+ "SPARKLET": "Upland",
"SPARKO": "Sparko",
"SPARTA": "Spartan Protocol Token",
+ "SPARTACATS": "SpartaCats",
+ "SPARTAD": "SpartaDex",
"SPAT": "Meta Spatial",
+ "SPAVAX": "Avalanche (Synapse Protocol)",
"SPAY": "SpaceY 2025",
"SPC": "SpaceChain ERC20",
"SPC.QRC": "SpaceChain (QRC-20)",
@@ -11198,6 +13050,7 @@
"SPEC": "SpecCoin",
"SPECT": "Spectral",
"SPECTRE": "SPECTRE AI",
+ "SPEE": "SpeedCash",
"SPEEDY": "Speedy",
"SPELL": "Spell Token",
"SPELLFIRE": "Spellfire",
@@ -11205,6 +13058,7 @@
"SPENDC": "SpendCoin",
"SPENT": "Espento",
"SPEPE": "SolanaPepe",
+ "SPERG": "Bloomsperg Terminal",
"SPEX": "StepEx",
"SPF": "SportyCo",
"SPFC": "São Paulo FC Fan Token",
@@ -11228,7 +13082,9 @@
"SPIKE": "Spiking",
"SPILLWAYS": "SpillWays",
"SPIN": "SPIN Protocol",
+ "SPINT": "Spintria",
"SPIRIT": "SpiritSwap",
+ "SPITT": "Hawk Ttuuaahh",
"SPIZ": "SPACE-iZ",
"SPK": "SparksPay",
"SPKL": "SpokLottery",
@@ -11246,9 +13102,10 @@
"SPOODY": "Spoody Man",
"SPOOF": "Spoofify",
"SPOOL": "Spool DAO Token",
- "SPORE": "Enoki Finance",
+ "SPORE": "Spore",
"SPORT": "SportsCoin",
"SPORTS": "ZenSports",
+ "SPORTSP": "SportsPie",
"SPOTS": "Spots",
"SPOX": "Sports Future Exchange Token",
"SPRING": "Spring",
@@ -11261,6 +13118,8 @@
"SPS": "Splinterlands",
"SPT": "SPECTRUM",
"SPUME": "Spume",
+ "SPUNK": "PUNK",
+ "SPURD": "Spurdo Spärde",
"SPURDO": "spurdo",
"SPURS": "Tottenham Hotspur Fan Token",
"SPWN": "Bitspawn",
@@ -11269,11 +13128,14 @@
"SPY": "Smarty Pay",
"SPYRO": "SPYRO",
"SQAT": "Syndiqate",
+ "SQD": "SQD",
"SQG": "Squid Token",
+ "SQGROW": "SquidGrow",
"SQL": "Squall Coin",
"SQR": "Magic Square",
"SQT": "SubQuery Network",
"SQTS": "Sqts (Ordinals)",
+ "SQU": "SquadSwap",
"SQUA": "Square Token",
"SQUAD": "Superpower Squad",
"SQUATCH": "SASQUATCH",
@@ -11284,7 +13146,10 @@
"SQUID2": "Squid Game 2.0",
"SQUIDGROW": "SquidGrow",
"SQUIDGROWV1": "SquidGrow v1",
+ "SQUIDV1": "Squid Game v1",
+ "SQUIDW": "Squidward Coin",
"SQUOGE": "DogeSquatch",
+ "SR30": "SatsRush",
"SRBP": "Super Rare Ball Potion",
"SRC": "SecureCoin",
"SRCH": "SolSrch",
@@ -11306,6 +13171,7 @@
"SSB": "SatoshiStreetBets",
"SSC": "SelfSell",
"SSD": "Sonic Screw Driver Coin",
+ "SSDX": "SpunkySDX",
"SSE": "Soroosh Smart Ecosystem",
"SSG": "Surviving Soldiers",
"SSGT": "Safeswap",
@@ -11314,10 +13180,13 @@
"SSHIP": "SSHIP",
"SSLX": "StarSlax",
"SSNC": "SatoshiSync",
+ "SSOL": "Solayer SOL",
"SSS": "StarSharks",
+ "SSSSS": "Snake wif Hat",
"SST": "SIMBA Storage Token",
"SSTC": "SunShotCoin",
"SSU": "Sunny Side up",
+ "SSUI": "Spring Staked SUI",
"SSV": "ssv.network",
"SSVCOIN": "SSVCoin",
"SSVV1": "Blox",
@@ -11325,22 +13194,25 @@
"SSX": "SOMESING",
"ST": "Skippy Token",
"STA": "STOA Network",
+ "STAB": "STABLE ASSET",
"STABLZ": "Stablz",
"STAC": "STAC",
"STACK": "StackOS",
- "STACKS": "STACKS",
+ "STACKS": " STACKS PAY",
"STACS": "STACS Token",
"STAK": "Jigstack",
"STAKE": "xDai Chain",
"STAKEDETH": "StakeHound Staked Ether",
"STALIN": "StalinCoin",
"STAMP": "SafePost",
+ "STAN": "Stank Memes",
"STANDARD": "Stakeborg DAO",
"STAPT": "Ditto Staked Aptos",
"STAR": "FileStar",
"STARAMBA": "Staramba",
"STARBASE": "Starbase",
"STARC": "StarChain",
+ "STARDOGE": "StarDOGE",
"STARL": "StarLink",
"STARLAUNCH": "StarLaunch",
"STARLY": "Starly",
@@ -11351,6 +13223,7 @@
"STARSHI": "Starship",
"STARSHIP": "STARSHIP",
"STARSHIPDOGE": "Starship Doge",
+ "STARSHIPONSOL": "Starship",
"START": "StartCoin",
"STARTA": "Starta",
"STARWARS": "Star Wars",
@@ -11360,19 +13233,26 @@
"STATE": "New World Order",
"STATER": "Stater",
"STATERA": "Statera",
+ "STATOK": "STA",
+ "STATOKEN": "STA",
"STATOM": "Stride Staked ATOM",
"STATS": "Stats",
+ "STAU": "STAU",
"STAX": "Staxcoin",
"STAY": "NFsTay",
"STBOT": "SolTradingBot",
+ "STBTC": "Lorenzo stBTC",
"STBU": "Stobox Token",
"STC": "Satoshi Island",
"STCN": "Stakecoin",
"STD": "STEED",
"STDYDX": "Stride Staked DYDX",
"STEAK": "SteakHut Finance",
+ "STEAKUSDC": "Steakhouse USDC Morpho Vault",
"STEALTH": "StealthPad",
"STEAMPUNK": "SteamPunk",
+ "STEAMX": "Steam Exchange",
+ "STEEL": "SteelCoin",
"STEEM": "Steem",
"STEEMD": "Steem Dollars",
"STEEP": "SteepCoin",
@@ -11390,6 +13270,7 @@
"STEWIE": "Stewie Coin",
"STEX": "STEX",
"STF": "Structure Finance",
+ "STFLOW": "Increment Staked FLOW",
"STFX": "STFX",
"STG": "Stargate Finance",
"STHR": "Stakerush",
@@ -11399,12 +13280,14 @@
"STIMA": "STIMA",
"STING": "Sting",
"STINJ": "Stride Staked INJ",
+ "STIX": "STIX",
"STJUNO": "Stride Staked JUNO",
"STK": "STK Token",
"STKAAVE": "Staked Aave",
"STKATOM": "pSTAKE Staked ATOM",
"STKBNB": "pSTAKE Staked BNB",
"STKC": "Streakk Chain",
+ "STKD": "Stkd SCRT",
"STKHUAHUA": "pSTAKE Staked HUAHUA",
"STKK": "Streakk",
"STKSTARS": "pSTAKE Staked STARS",
@@ -11415,17 +13298,21 @@
"STMX": "StormX",
"STND": "Standard Protocol",
"STNEAR": "Staked NEAR",
+ "STNK": "Stonks",
"STO": "Save The Ocean",
+ "STOC": "STO Cash",
"STOG": "Stooges",
"STOGE": "Stoner Doge Finance",
"STOIC": "stoicDAO",
"STON": "STON",
"STONE": "Stone Token",
+ "STONEDE": "Stone DeFi",
"STONK": "STONK",
"STONKS": "HarryPotterObamaWallStreetBets10Inu",
"STOP": "SatoPay",
"STOR": "Self Storage Coin",
"STORE": "Bit Store",
+ "STOREP": "Storepay",
"STORJ": "Storj",
"STORM": "Storm",
"STORY": "Story",
@@ -11437,7 +13324,9 @@
"STPT": "STP Network",
"STQ": "Storiqa Token",
"STR": "Sourceless",
+ "STRA": "STRAY",
"STRAKS": "Straks",
+ "STRAT": "Strategic Hub for Innovation in Blockchain",
"STRAX": "Stratis",
"STRAY": "Stray Dog",
"STRD": "Stride",
@@ -11451,6 +13340,7 @@
"STRM": "StreamCoin",
"STRNGR": "Stronger",
"STRONG": "Strong",
+ "STRONGSOL": "Stronghold Staked SOL",
"STRONGX": "StrongX",
"STRP": "Strips Finance",
"STRS": "STARS",
@@ -11471,6 +13361,7 @@
"STUCK": "mouse in pasta",
"STUD": "Studyum",
"STUDENTC": "Student Coin",
+ "STUFF": "STUFF.io",
"STUMEE": "Stride Staked UMEE",
"STUSDT": "Staked USDT",
"STV": "Sativa Coin",
@@ -11483,6 +13374,7 @@
"STZETA": "ZetaEarn",
"STZU": "Shihtzu Exchange Token",
"SU": "Smol Su",
+ "SUB": "Subsocial",
"SUBAWU": "Subawu Token",
"SUBF": "Super Best Friends",
"SUBS": "Substratum Network",
@@ -11491,58 +13383,102 @@
"SUGAR": "Sugar Exchange",
"SUI": "Sui",
"SUIA": "SUIA",
+ "SUIAI": "SUI Agents",
+ "SUIB": "Suiba Inu",
+ "SUIDEPIN": "Sui DePIN",
+ "SUIJAK": "Suijak",
+ "SUILAMA": "Suilama",
+ "SUIMAN": "Suiman",
+ "SUIMON": "Sui Monster",
"SUIP": "SuiPad",
"SUISHIB": "SuiShiba",
+ "SUITE": "Suite",
+ "SUKI": "SUKI",
"SUKU": "SUKU",
"SULFERC": "SULFERC",
"SUM": "SumSwap",
+ "SUMI": "SUMI",
"SUMMER": "Summer",
+ "SUMMIT": "Summit",
"SUMO": "Sumokoin",
"SUN": "Sun Token",
"SUNC": "Sunrise",
"SUNDAE": "Sundae the Dog",
+ "SUNDOG": "SUNDOG",
"SUNEX": "The Sun Exchange",
+ "SUNGOAT": "SUNGOAT",
+ "SUNGOU": "Sungou",
"SUNI": "SUNI",
+ "SUNJAK": "Sunjak",
+ "SUNLION": "SUNLION",
+ "SUNMAGA": "SunMaga",
+ "SUNN": "Sunny on Tron",
+ "SUNNED": "SUNNED",
+ "SUNNEIRO": "SunNeiro",
"SUNNY": "Sunny Aggregator",
"SUNOLD": "Sun Token",
+ "SUNPEPE": "sunpepe",
+ "SUNPUMP": "To The Sun",
+ "SUNTRON": "TRON MASCOT",
"SUNV1": "Sun Token v1",
+ "SUNWUKONG": "SunWukong",
"SUP": "Supcoin",
"SUP8EME": "SUP8EME Token",
"SUPE": "Supe Infinity",
"SUPER": "SuperVerse",
"SUPERBID": "SuperBid",
+ "SUPERBONK": "SUPER BONK",
"SUPERC": "SuperCoin",
+ "SUPERCAT": "SUPERCAT",
+ "SUPERF": "SUPER FLOKI",
+ "SUPEROETHB": "Super OETH",
+ "SUPERT": "Super Trump",
"SUPERTX": "SuperTX",
+ "SUPR": "SuperDapp",
+ "SUPRA": "Supra",
+ "SUPREMEFINANCE": "Hype",
"SUR": "Suretly",
"SURE": "inSure",
"SURF": "Surf.Finance",
"SURV": "Survival Game Online",
"SUSD": "sUSD",
+ "SUSDA": "sUSDa",
"SUSDE": "Ethena Staked USDe",
+ "SUSDS": "Savings USDS",
+ "SUSDX": "Staked USDX",
"SUSHI": "Sushi",
+ "SUSX": "Savings USX",
"SUTEKU": "Suteku",
"SUTER": "Suterusu",
+ "SUWI": "suwi",
"SUZUME": "Shita-kiri Suzume",
"SVD": "savedroid",
+ "SVETH": "Savvy ETH",
"SVL": "Slash Vision Labs",
"SVN": "Savanna",
"SVNN": "Savanna Haus",
"SVPN": "Shadow Node",
"SVS": "GivingToServices SVS",
"SVT": "Solvent",
+ "SVTS": "Syncvault",
"SVX": "Savix",
"SVY": "Savvy",
"SWA": "Swace",
"SWACH": "Swachhcoin",
"SWAG": "SWAG Finance",
+ "SWAGGY": "swaggy",
+ "SWAGT": "Swag Token",
"SWAI": "Safe Water AI",
"SWAMP": "Swampy",
+ "SWAN": "Black Swan",
"SWAP": "Trustswap",
"SWAPP": "SWAPP Protocol",
"SWAPZ": "SWAPZ.app",
"SWARM": "SwarmCoin",
+ "SWARMS": "Swarms",
"SWASH": "Swash",
"SWAY": "Sway Social",
+ "SWBTC": "Swell Restaked BTC",
"SWC": "Scanetchain Token",
"SWCH": "SwissCheese",
"SWD": "SW DAO",
@@ -11550,11 +13486,14 @@
"SWEAT": "Sweat Economy",
"SWEEP": "Sweeptoken",
"SWEET": "SweetStake",
+ "SWELL": "Swell Network",
"SWETH": "swETH",
"SWFL": "Swapfolio",
"SWFTC": "SWFTCoin",
"SWG": "Swirge",
+ "SWGT": "SmartWorld Global",
"SWH": "simbawifhat",
+ "SWIF": "SUNwifHat",
"SWIFT": "BitSwift",
"SWIFTIES": "Taylor Swift",
"SWIM": "SWIM - Spread Wisdom",
@@ -11564,12 +13503,14 @@
"SWIPES": "BNDR",
"SWIRL": "Swirl Social",
"SWIRLX": "SwirlToken",
+ "SWIS": "Swiss Cash Coin",
"SWISE": "StakeWise",
"SWITCH": "Switch",
"SWM": "Swarm Fund",
"SWOLE": "Swole Doge",
"SWOP": "Swop",
"SWORD": "eZKalibur",
+ "SWORLD": "Seedworld",
"SWOT": "Swot AI",
"SWP": "Kava Swap",
"SWPR": "Swapr",
@@ -11594,22 +13535,30 @@
"SYBL": "Sybulls",
"SYBTC": "sBTC",
"SYC": "SynchroCoin",
+ "SYK": "Stryke",
"SYL": "XSL Labs",
"SYLO": "Sylo",
"SYLV": "Sylvester",
"SYM": "SymVerse",
+ "SYMP": "Sympson AI",
"SYN": "Synapse",
"SYNC": "Syncus",
"SYNCC": "SyncCoin",
+ "SYNCG": "SyncGPT",
"SYNCN": "Sync Network",
"SYNCO": "Synco",
+ "SYNDOG": "Synthesizer Dog",
+ "SYNK": "Synk",
"SYNLEV": "SynLev",
"SYNO": "Synonym Finance",
"SYNR": "MOBLAND",
"SYNT": "Synthetix Network",
- "SYNTH": "Synthswap",
+ "SYNTE": "Synternet",
+ "SYNTH": "SYNTHR",
+ "SYNTHSWAP": "Synthswap",
"SYNX": "Syndicate",
"SYPOOL": "Sypool",
+ "SYRUP": "Syrup",
"SYS": "Syscoin",
"SZCB": "Zugacoin",
"T": "Threshold Network Token",
@@ -11620,8 +13569,10 @@
"TABOO": "Taboo Token",
"TAC": "Traceability Chain",
"TACHYON": "Tachyon Protocol",
- "TAD": "Tadpole Finance",
+ "TAD": "Tadpole",
"TADA": "Ta-da",
+ "TADDY": "DADDY TRUMP",
+ "TADPOLEF": "Tadpole Finance",
"TAF": "TAF",
"TAGR": "Think And Get Rich Coin",
"TAI": "TARS Protocol",
@@ -11631,8 +13582,13 @@
"TAIYO": "Taiyo",
"TAJ": "TajCoin",
"TAK": "TakCoin",
+ "TAKE": "Take America Back",
"TAKI": "Taki",
+ "TALA": "Baby Tala",
+ "TALAHON": "Talahon",
"TALAO": "Talao",
+ "TALENT": "Talent Protocol",
+ "TALES": "Tales of Pepe",
"TALIS": "Talis Protocol",
"TALK": "Talken",
"TAMA": "Tamadoge",
@@ -11643,8 +13599,11 @@
"TANK": "CryptoTanks",
"TANPIN": "Tanpin",
"TANUKI": "Tanuki",
+ "TANUPAD": "Tanuki Launchpad",
"TAO": "Bittensor",
"TAONU": "TAO INU",
+ "TAOP": "TaoPad",
+ "TAOTOOLS": "TAOTools",
"TAP": "TAP FANTASY",
"TAPC": "Tap Coin",
"TAPPINGCOIN": "TappingCoin",
@@ -11653,6 +13612,7 @@
"TARA": "Taraxa",
"TARAL": "TARALITY",
"TARD": "Tard",
+ "TARDI": "Tardi",
"TARI": "Tari World",
"TAROT": "Tarot",
"TAROTV1": "Tarot v1",
@@ -11663,6 +13623,7 @@
"TAT": "Tatcoin",
"TATA": "TATA Coin",
"TATE": "Tate",
+ "TATES": "Tate Stop",
"TATSU": "Taτsu",
"TAU": "Lamden Tau",
"TAUC": "Taurus Coin",
@@ -11670,6 +13631,8 @@
"TAUR": "Marnotaur",
"TAVA": "ALTAVA",
"TAX": "MetaToll",
+ "TAXI": "Robotaxi",
+ "TAXLESSTRUMP": "MAGA TAXLESS",
"TBAC": "BlockAura",
"TBANK": "TaoBank",
"TBAR": "Titanium BAR",
@@ -11680,6 +13643,7 @@
"TBCX": "TrashBurn",
"TBD": "THE BIG DEBATE",
"TBE": "TrustBase",
+ "TBEER": "TRON BEER",
"TBFT": "Türkiye Basketbol Federasyon Token",
"TBIS": "TBIS token",
"TBL": "Tombola",
@@ -11687,9 +13651,11 @@
"TBT": "T-BOT",
"TBTC": "tBTC",
"TBTCV1": "tBTC v1",
+ "TBULL": "Tron Bull",
"TBX": "Tokenbox",
"TCANDY": "TripCandy",
"TCAP": "Total Crypto Market Cap",
+ "TCASH": "Trump Cash",
"TCAT": "The Currency Analytics",
"TCC": "The ChampCoin",
"TCG": "Today's Crypto",
@@ -11708,12 +13674,14 @@
"TCT": "TokenClub",
"TCX": "T-Coin",
"TCY": "The Crypto You",
- "TD": "Trade Chain",
+ "TD": "The Big Red",
"TDAN": "TDAN",
+ "TDC": "Tidecoin",
"TDE": "Trade Ecology Token",
"TDEFI": "Token Teknoloji A.S. Token DeFi",
"TDFB": "TDFB",
"TDFY": "Tidefi",
+ "TDM": "TDM",
"TDP": "TrueDeck",
"TDROP": "ThetaDrop",
"TDS": "TokenDesk",
@@ -11748,6 +13716,7 @@
"TENET": "TENET",
"TENFI": "TEN",
"TENNET": "Tennet",
+ "TENS": "TensorScan",
"TENSHI": "Tenshi",
"TENT": "TENT",
"TEP": "Tepleton",
@@ -11756,12 +13725,17 @@
"TERA": "TERA",
"TERADYNE": "Teradyne",
"TERAR": "Terareum",
+ "TERAV1": "Terareum v1",
"TERAWATT": "Terawatt",
+ "TERM": "Terminal of Simpson",
+ "TERMINAL": "Book Terminal of Truths",
+ "TERMINUS": "Terminus",
"TERN": "Ternio",
"TERN.ETH": "Ternio ERC20",
"TERR": "Terrier",
"TERRA": "Terraport",
"TERRAB": "TERRABYTE AI",
+ "TERRY": "Terry The Disgruntled Turtle",
"TERZ": "SHELTERZ",
"TES": "TeslaCoin",
"TESLA": "TeslaCoilCoin",
@@ -11769,11 +13743,13 @@
"TEST": "Test",
"TESTA": "Testa",
"TET": "Tectum",
- "TETHER": "Hermione",
+ "TETH": "Treehouse ETH",
"TETHYS": "Tethys",
"TETRA": "Tetra",
"TETU": "TETU",
+ "TEVA": "Tevaera",
"TEW": "Trump in a memes world",
+ "TF47": "Trump Force 47",
"TFBX": "Truefeedback Token",
"TFC": "The Freedom Coin",
"TFI": "TrustFi Network Token",
@@ -11787,44 +13763,62 @@
"TGCC": "TheGCCcoin",
"TGPT": "Trading GPT",
"TGRAM": "TG20 TGram",
+ "TGRASS": "Top Grass Club",
"TGT": "TargetCoin",
+ "TGW": "The Green World",
"TH": "Team Heretics Fan Token",
"THALES": "Thales",
+ "THAPT": "Thala APT",
"THAVAGE": "Mike Tython",
"THC": "The Hempcoin",
- "THE": "The Protocol",
+ "THD": "Trump Harris Debate",
"THE9": "THE9",
+ "THEAICOIN": "AI",
+ "THEB": "The Boys Club",
"THEBLOX": "The Blox Project",
+ "THEC": "The CocktailBar",
"THECA": "Theca",
+ "THECAT": "THECAT",
"THECITADEL": "The Citadel",
"THEDAO": "The DAO",
+ "THEF": "The Flash Currency",
+ "THEG": "The GameHub",
"THEHARAMBE": "Harambe",
+ "THEM": "The Meta DAO",
"THEMIS": "Themis",
"THEN": "THENA",
"THEO": "Theopetra",
"THEOS": "Theos",
+ "THEP": "The Protocol",
+ "THES": "The Standard Protocol (USDS)",
+ "THESTANDARD": "Standard Token",
"THETA": "Theta Network",
+ "THETAN": "Thetan Coin",
"THETRIBE": "The Tribe",
"THEX": "Thore Exchange",
"THG": "Thetan Arena",
"THIK": "ThikDik",
"THING": "Nothing",
"THINKWAREAI": "ThinkwareAI",
+ "THISISF": "This is Fine",
"THL": "Thala",
"THN": "Throne",
"THNX": "ThankYou",
"THO": "Athero",
"THOL": "AngelBlock",
+ "THOLA": "Tholana",
"THOR": "THORSwap",
"THOREUM": "Thoreum V3",
"THP": "TurboHigh Performance",
"THR": "Thorecoin",
"THREE": "Three Protocol Token ",
"THRT": "ThriveToken",
+ "THRUST": "Thruster",
"THRY": "THEORY",
"THS": "TechShares",
"THT": "Thought",
"THUG": "Thug Life",
+ "THUN": "Thunder Brawl",
"THUNDER": "ThunderStake",
"THX": "Thorenext",
"TI": "Titanium22",
@@ -11832,11 +13826,14 @@
"TIANHE": "Tianhe",
"TIC": "TrueInvestmentCoin",
"TIDAL": "Tidal Finance",
+ "TIDDIES": "TIDDIES",
"TIDE": "Tidalflats",
"TIE": "Ties Network",
+ "TIEDAN": "TieDan",
+ "TIF": "This Is Fine",
"TIFI": "TiFi Token",
"TIG": "Tigereum",
- "TIGER": "JungleKing TigerCoin",
+ "TIGER": "TIGER",
"TIGERC": "TigerCash",
"TIGERMOON": "TigerMoon",
"TIGRA": "Tigra",
@@ -11847,7 +13844,9 @@
"TIKTOKEN": "TikToken",
"TIM": "TIMTIM GAMES",
"TIME": "Chrono.tech",
- "TIMI": "Timicoin",
+ "TIMES": "DARKTIMES",
+ "TIMI": "This Is My Iguana",
+ "TIMICOIN": "Timicoin",
"TIN": "Token IN",
"TINC": "Tiny Coin",
"TINKU": "TinkuCoin",
@@ -11855,6 +13854,7 @@
"TINY": "TinyBits",
"TIOX": "TIOx",
"TIP": "Tip Blockchain",
+ "TIPC": "Tipcoin",
"TIPINU": "Tip Inu",
"TIPS": "FedoraCoin",
"TIPSY": "TipsyCoin",
@@ -11865,6 +13865,7 @@
"TITANX": "TitanX",
"TITC": "TitCoin",
"TITI": "TiTi Protocol",
+ "TITS": "We Love Tits",
"TITTY": "TamaKitty",
"TIUSD": "TiUSD",
"TIX": "Blocktix",
@@ -11876,7 +13877,7 @@
"TKING": "Tiger King",
"TKINU": "Tsuki Inu",
"TKMN": "Tokemon",
- "TKN": "Monolith",
+ "TKN": "Token Name Service",
"TKO": "Tokocrypto",
"TKP": "TOKPIE",
"TKR": "CryptoInsight",
@@ -11891,6 +13892,8 @@
"TLOS": "Telos",
"TLP": "TulipCoin",
"TLW": "TILWIKI",
+ "TMAGA": "THE MAGA MOVEMENT",
+ "TMAI": "Token Metrics AI",
"TMANIA": "Trump Mania",
"TME": "Timereum",
"TMED": "MDsquare",
@@ -11899,6 +13902,7 @@
"TMNG": "TMN Global",
"TMNT": "TMNT",
"TMON": "Two Monkey Juice Bar",
+ "TMPL": "TMPL",
"TMRW": "TMRW Coin",
"TMSH": "Bursaspor Fan Token",
"TMT": "Tamy Token",
@@ -11922,6 +13926,7 @@
"TODD": "TURBO TODD",
"TOK": "Tokenplace",
"TOKA": "Tonka Finance",
+ "TOKAMAK": "Tokamak Network",
"TOKAU": "Tokyo AU",
"TOKC": "Tokyo Coin",
"TOKE": "Tokemak",
@@ -11931,6 +13936,7 @@
"TOKKI": "CRYPTOKKI",
"TOKO": "ToKoin",
"TOKU": "TokugawaCoin",
+ "TOKUD": "Tokuda",
"TOL": "Tolar",
"TOLO": "Tolo Yacoloco",
"TOLYCAT": "Toly's Cat",
@@ -11938,48 +13944,65 @@
"TOMAHAWKCOIN": "Tomahawkcoin",
"TOMAN": "IRR",
"TOMB": "Tomb",
+ "TOMC": "TOM CAT",
"TOMI": "tomiNet",
+ "TOMO": "Tomo Cat",
"TOMOE": "TomoChain ERC20",
"TOMS": "TomTomCoin",
- "TON": "Tokamak Network",
+ "TON": "Toncoin",
"TONALD": "Tonald Trump",
- "TONCOIN": "The Open Network",
"TONE": "TE-FOOD",
"TONI": "Daytona Finance",
"TONIC": "Tectonic",
"TONK": "Tonk Inu",
"TONNEL": "TONNEL Network",
"TONS": "TONSniper",
+ "TONST": "Ton Stars",
+ "TONT": "TONKIT",
"TONTOKEN": "TONToken",
"TONUP": "TonUP",
"TONY": "TONY THE DUCK",
"TOOB": "Toobcoin",
+ "TOOBIGTORIG": "Too Big To Rig",
"TOOKER": "tooker kurlson",
"TOOLS": "TOOLS",
"TOON": "Pontoon",
"TOONF": "Toon Finance",
"TOPC": "Topchain",
+ "TOPCA": "TOP CAT",
+ "TOPCAT": "Topcat",
"TOPG": "Tate Token",
+ "TOPGP": "TOP G PEPE",
+ "TOPI": "Topi Meme",
"TOPIA": "Hytopia",
"TOPN": "TOP Network",
"TOR": "TOR",
+ "TORA": "TORA NEKO",
+ "TORCH": "Hercules Token",
"TORE": "Toreus Finance",
"TORG": "TORG",
"TORI": "Teritori",
"TORII": "Torii Finance",
"TORN": "Tornado Cash",
+ "TORO": "Toro Inoue",
+ "TORSY": "TORSY",
"TOS": "ThingsOperatingSystem",
"TOSA": "TosaInu BSC",
"TOSC": "T.OS",
"TOSDIS": "TosDis",
"TOSHE": "Toshe",
"TOSHI": "Toshi",
+ "TOSHKIN": "Toshkin Coin",
"TOT": "TotCoin",
"TOTEM": "DragonMaster",
"TOTM": "Totem",
"TOTO": "TOTO",
"TOUCHFAN": "TouchFan",
+ "TOUCHG": "Touch Grass",
+ "TOUR": "Tour Billion",
+ "TOURI": "Tourist Token",
"TOURISTS": "TOURIST SHIBA INU",
+ "TOWELI": "Towelie",
"TOWER": "Tower",
"TOWN": "Town Star",
"TOX": "INTOverse",
@@ -12003,15 +14026,20 @@
"TRAC": "OriginTrail",
"TRACE": "Trace Network Labs",
"TRACEA": "Trace AI",
+ "TRACKEDBIO": "TrackedBio",
"TRACN": "trac (Ordinals)",
"TRADE": "Polytrade",
"TRADEBOT": "TradeBot",
+ "TRADECHAIN": "Trade Chain",
"TRADEX": "TradeX AI",
"TRAID": "Traid",
+ "TRAIMP": "TRUMP AI",
"TRAIN": "Trump Train",
"TRAK": "TrakInvest",
+ "TRALA": "TRALA",
"TRANQ": "Tranquil Finance",
"TRANS": "Trans Pepe",
+ "TRANSFER": "TransferCoin",
"TRAT": "Tratok",
"TRAVA": "Trava Finance",
"TRAXIA": "Traxia Membership Token",
@@ -12029,13 +14057,14 @@
"TRDT": "Trident",
"TREAT": "Treat",
"TRECENTO": "Trecento Blockchain Capital",
- "TREE": "HyperionX",
+ "TREE": "Tree",
"TREEB": "Retreeb",
"TREMP": "Doland Tremp",
"TRESTLE": "TRESTLE",
"TRET": "Tourist Review",
"TRG": "The Rug Game",
"TRGI": "The Real Golden Inu",
+ "TRHUB": "Tradehub",
"TRI": "Triangles Coin",
"TRIA": "Triaconta",
"TRIAS": "Trias",
@@ -12048,18 +14077,28 @@
"TRINI": "Trinity Network Credit",
"TRIO": "Tripio",
"TRIPAD": "TripAdvisor, Inc.",
+ "TRITON": "Triton",
"TRIVIA": "Trivians",
"TRIX": "TriumphX",
"TRK": "TruckCoin",
+ "TRKX": "Trakx",
"TRL": "Triall",
"TRMX": "TourismX Token",
"TRNDZ": "Trendsy",
+ "TRNGUY": "Tron Guy Project",
"TROG": "Trog",
+ "TROGE": "Troge",
"TROLL": "Trollcoin",
"TROLLHEIM": "Trollheim",
+ "TROLLICTO": "TROLLI CTO",
"TROLLMODE": "TROLL MODE",
+ "TROLLS": "trolls in a memes world",
+ "TRONDOG": "TronDog",
+ "TRONI": "Tron Inu",
+ "TRONP": "Donald Tronp",
"TRONPAD": "TRONPAD",
"TROP": "Interop",
+ "TROPPY": "TROPPY",
"TROSS": "Trossard",
"TROVE": "Arbitrove Governance Token",
"TROY": "Troy",
@@ -12070,35 +14109,60 @@
"TRTL": "TurtleCoin",
"TRTT": "Trittium",
"TRU": "TrueFi",
+ "TRUAPT": "TruFin Staked APT",
"TRUCE": "WORLD PEACE PROJECT",
"TRUE": "True Chain",
"TRUEBIT": "Truebit Protocol",
"TRUF": "Truflation",
+ "TRUFV1ERC20": "Truflation v1 ERC-20",
"TRUM": "TrumpBucks",
"TRUMAGA": "TrumpMAGA",
"TRUMATIC": "TruFin Staked MATIC",
- "TRUMP": "MAGA",
+ "TRUMP": "OFFICIAL TRUMP",
+ "TRUMP2": "Trump2024",
"TRUMP2024": "Donald Trump",
+ "TRUMP3": "Trump MP3",
+ "TRUMP47": "47th President of the United States",
+ "TRUMPA": "TRUMP AI",
+ "TRUMPAMANIA": "TRUMPAMANIA",
"TRUMPARMY": "Trump Army",
+ "TRUMPBASE": "MAGA (magatrumponbase.tech)",
"TRUMPBIDEN": "Trump vs Biden",
+ "TRUMPC": "TrumpCat",
+ "TRUMPCA": "Trump Card",
"TRUMPCAT": "TRUMPCAT",
+ "TRUMPCATS": "Trump Golden Cat",
"TRUMPCOIN": "TrumpCoin",
+ "TRUMPDAO": "TRUMP DAO",
"TRUMPDO": "TRUMP",
"TRUMPDOGE": "Trump Doge",
"TRUMPE": "Trump Pepe",
"TRUMPEPE": "Trump Pepe",
+ "TRUMPER": "Trump Era",
+ "TRUMPF": "Trump Fight",
"TRUMPHAT": "Trump Hat",
"TRUMPINU": "Trump Inu",
- "TRUMPJR": "TrumpJr",
+ "TRUMPJ": "TRUMPJR",
+ "TRUMPJR": "OFFICIAL TRUMP JR",
+ "TRUMPJRVIP": "TrumpJr",
+ "TRUMPM": "TRUMP MAGA PRESIDENT",
+ "TRUMPMA": "TRUMP MAGA SUPER",
+ "TRUMPMAGA": "President Trump MAGA",
+ "TRUMPONBASE": "TRUMP ON BASE",
+ "TRUMPS": "Trump SOL",
+ "TRUMPSB": "TrumpsBags",
+ "TRUMPSFIGHT": "TrumpsFight",
"TRUMPSHIBA": "Trump Shiba",
"TRUMPTECH": "Trump Tech",
"TRUMPTITANS": "TrumpTitans",
+ "TRUMPVANCE": "Trump Vance 2024",
"TRUMPX": "Trump X-Maga",
"TRUMPZ": "Trump Zhong",
"TRUNK": "Elephant Money",
"TRUST": "TrustDAO",
"TRUSTNFT": "TrustNFT",
"TRUTH": "TruthGPT",
+ "TRUTHFI": "Truthfi",
"TRV": "TrustVerse",
"TRVC": "Trivechain",
"TRVL": "TRVL",
@@ -12107,6 +14171,7 @@
"TRXC": "TRONCLASSIC",
"TRXDICE": "TRONdice",
"TRXS": "Staked TRX",
+ "TRXV1": "TRON V1",
"TRXWIN": "TronWin",
"TRYB": "BiLira",
"TRYC": "TRYC",
@@ -12122,10 +14187,13 @@
"TSHARE": "Tomb Shares",
"TSHP": "12Ships",
"TSL": "Energo",
+ "TSLT": "Tamkin",
"TSN": "Tsunami Exchange Token",
"TSR": "Tesra",
+ "TST": "Teleport System Token",
"TSUBASAUT": "TSUBASA Utility Token",
"TSUGT": "Captain Tsubasa",
+ "TSUJI": "Tsutsuji",
"TSUKA": "Dejitaru Tsuka",
"TSX": "TradeStars",
"TT": "ThunderCore",
@@ -12135,8 +14203,10 @@
"TTM": "To The Moon",
"TTN": "Titan Coin",
"TTT": "The Transfer Token",
+ "TTTU": "T-Project",
"TTU": "TaTaTu",
"TTV": "TV-TWO",
+ "TUA": "Atua AI",
"TUBE": "BitTube",
"TUBES": "TUBES",
"TUCKER": "TUCKER CARLSON",
@@ -12148,20 +14218,24 @@
"TUNE": "Bitune",
"TUP": "Tenup",
"TUR": "Turron",
- "TURBO": "Turbo Wallet",
+ "TURB": "TurboX",
+ "TURBO": "Turbo",
+ "TURBOB": "Turbo Browser",
"TURBOS": "Turbos Finance",
- "TURBOT": "Turbo",
+ "TURBOW": "Turbo Wallet",
"TURT": "TurtSat",
"TUS": "Treasure Under Sea",
"TUSD": "True USD",
"TUSDV1": "True USD v1",
"TUT": "Tutellus",
"TUTTER": "Tutter",
+ "TUX": "Tux The Penguin",
"TUZKI": "Tuzki",
"TUZLA": "Tuzlaspor Token",
"TVK": "Terra Virtua Kolect",
"TVNT": "TravelNote",
"TVRS": "TiraVerse",
+ "TVS": "TVS",
"TW": "Winners Coin",
"TWC": "Twilight",
"TWD": "Terra World Token",
@@ -12169,7 +14243,9 @@
"TWEETY": "Tweety",
"TWELVE": "TWELVE ZODIAC",
"TWEP": "The Web3 Project",
+ "TWIF": "Tomwifhat",
"TWIFB": "TrumpWifBiden",
+ "TWIGGY": "Twiggy",
"TWIN": "Twinci",
"TWIST": "TwisterCoin",
"TWLV": "Twelve Coin",
@@ -12177,12 +14253,14 @@
"TWOGE": "Twoge Inu",
"TWP": "TrumpWifPanda",
"TWT": "Trust Wallet Token",
+ "TWURTLE": "twurtle the turtle",
"TX": "Tradix",
"TX20": "Trex20",
"TXA": "TXA",
"TXAG": "tSILVER",
"TXAU": "tGOLD",
"TXBIT": "Txbit Token",
+ "TXC": "TEXITcoin",
"TXG": "TRUSTxGAMING",
"TXL": "Autobahn Network",
"TXT": "TuneTrade",
@@ -12191,14 +14269,19 @@
"TYBGSc": "Base Goddess",
"TYC": "Tycoon",
"TYCOON": "CryptoTycoon",
+ "TYKE": "Tyke The Elephant",
+ "TYLER": "Tyler",
"TYOGHOUL": "TYO GHOUL",
"TYPE": "TypeAI",
"TYPERIUM": "Typerium",
+ "TYPUS": "Typus",
"TYRANT": "Fable Of The Dragon",
"TYRION": "Tyrion",
+ "TYSON": "Mike Tyson",
"TYT": "Tianya Token",
"TZC": "TrezarCoin",
"TZKI": "Tsuzuki Inu",
+ "TZU": "Sun Tzu",
"U": "Unidef",
"U8D": "Universal Dollar",
"UAEC": "United Arab Emirates Coin",
@@ -12240,6 +14323,7 @@
"UDOO": "Hyprr",
"UDS": "Undeads Games",
"UDT": "Unlock Protocol",
+ "UE": "UE Coin",
"UEC": "United Emirates Coin",
"UEDC": "United Emirate Decentralized Coin",
"UENC": "UniversalEnergyChain",
@@ -12247,11 +14331,13 @@
"UETL": "Useless Eth Token Lite",
"UFARM": "UniFarm",
"UFC": "Union Fair Coin",
+ "UFD": "Unicorn Fart Dust",
"UFFYI": "Unlimited FiscusFYI",
"UFI": "PureFi",
"UFO": "UFO Gaming",
"UFOC": "Unknown Fair Object",
"UFOCOIN": "Uniform Fiscal Object",
+ "UFOP": "UFOPepe",
"UFR": "Upfiring",
"UFT": "UniLend Finance",
"UGAS": "Ultrain",
@@ -12273,6 +14359,7 @@
"ULTI": "Ultiverse",
"ULTIMA": "Ultima",
"ULTIMATEBOT": "Ultimate Tipbot",
+ "ULTR": "ULTRA MAGA",
"ULTRA": "Ultra",
"ULTRAP": "ULTRA Prisma Finance",
"ULX": "ULTRON",
@@ -12284,7 +14371,10 @@
"UMBR": "Umbria Network",
"UMC": "Umbrella Coin",
"UMI": "Universal Money Instrument",
+ "UMID": "Umi Digital",
+ "UMJA": "Umoja",
"UMK": "UMKA",
+ "UMM": "UMM",
"UMMA": "UMMA Token",
"UMO": "Universal Molecule",
"UMT": "UnityMeta",
@@ -12296,14 +14386,17 @@
"UNBREAKABLE": "UnbreakableCoin",
"UNC": "UnCoin",
"UNCL": "UNCL",
+ "UNCN": "Unseen",
"UNCX": "UniCrypt",
"UND": "United Network Distribution",
"UNDB": "unibot.cash",
+ "UNDE": "Undead Finance",
"UNDEAD": "Undead Blocks",
"UNDG": "UniDexGas",
"UNDX": "UNODEX",
"UNF": "Unfed Coin",
"UNFI": "Unifi Protocol DAO",
+ "UNFK": "UNFK",
"UNI": "Uniswap Protocol Token",
"UNIBOT": "Unibot",
"UNIC": "Unicly",
@@ -12311,13 +14404,17 @@
"UNICORN": "UNICORN Token",
"UNIDEXAI": "UniDexAI",
"UNIDX": "UniDex",
+ "UNIDXV1": "UniDex v1",
+ "UNIE": "Uniswap Protocol Token (Avalanche Bridge)",
"UNIETH": "Universal ETH",
"UNIFY": "Unify",
"UNIM": "Unicorn Milk",
+ "UNIO": "Unio Coin",
"UNIQ": "Uniqredit",
"UNIQUE": "Unique One",
"UNISTAKE": "Unistake",
"UNIT": "Universal Currency",
+ "UNIT0": "UNIT0",
"UNITARYSTATUS": "UnitaryStatus Dollar",
"UNITED": "UnitedCoins",
"UNITRADE": "UniTrade",
@@ -12370,11 +14467,16 @@
"URS": "URUS",
"URUS": "Urus Token",
"URX": "URANIUMX",
- "USA": "DEDPRZ",
+ "USA": "Based USA",
+ "USACOIN": "American Coin",
"USAT": "USAT",
+ "USBT": "Universal Blockchain",
"USC": "Ultimate Secure Cash",
"USCC": "USC",
"USCOIN": "USCoin",
+ "USD0": "Usual",
+ "USD1": "USD1",
+ "USD3": "Web 3 Dollar",
"USDA": "USDA",
"USDAP": "Bond Appetite USD",
"USDB": "USD Bancor",
@@ -12382,6 +14484,14 @@
"USDBLAST": "USDB Blast",
"USDC": "USD Coin",
"USDCASH": "USDCASH",
+ "USDCAT": "UpSideDownCat",
+ "USDCAV": "USD Coin (Portal from Avalanche)",
+ "USDCBS": "USD Coin (Portal from BSC)",
+ "USDCE": "USD Coin (Avalanche Bride)",
+ "USDCEAV": "USD.e Coin (Portal from Avalanche)",
+ "USDCET": "USD Coin (Portal from Ethereum)",
+ "USDCPO": "USD Coin (PoS) (Portal from Polygon)",
+ "USDCSO": "USD Coin (Portal from Solana)",
"USDD": "USDD",
"USDE": "Ethena USDe",
"USDEBT": "USDEBT",
@@ -12392,16 +14502,20 @@
"USDI": "Interest Protocol USDi",
"USDJ": "USDJ",
"USDK": "USDK",
+ "USDL": "Lift Dollar",
"USDM": "Mountain Protocol",
+ "USDMA": "USD mars",
"USDN": "Neutrino USD",
"USDO": "USD Open Dollar",
"USDP": "Pax Dollar",
"USDPLUS": "Overnight.fi USD+",
"USDQ": "USDQ",
"USDR": "Real USD",
- "USDS": "StableUSD",
+ "USDS": "Sky Dollar",
"USDSB": "USDSB",
+ "USDSTABLY": "StableUSD",
"USDT": "Tether",
+ "USDTBASE": "USDT (Base)",
"USDTV": "TetherTV",
"USDTZ": "USDtez",
"USDU": "Upper Dollar",
@@ -12411,6 +14525,7 @@
"USDZ": "Zedxion USDZ",
"USE": "Usechain Token",
"USEDCAR": "A Gently Used 2001 Honda",
+ "USETH": "USETH",
"USG": "USGold",
"USH": "unshETHing_Token",
"USHARK": "uShark",
@@ -12421,24 +14536,34 @@
"USNBT": "NuBits",
"USNOTA": "NOTA",
"USP": "USP Token",
+ "USPEPE": "American pepe",
"USPLUS": "Fluent Finance",
+ "USR": "Resolv USR",
+ "USSD": "Autonomous Secure Dollar",
"UST": "Wrapped UST Token",
"USTB": "Superstate Short Duration U.S. Government Securities Fund",
+ "USTBL": "Spiko US T-Bills Money Market Fund",
"USTC": "TerraClassicUSD",
"USTCW": "TerraClassicUSD Wormhole",
"USTX": "UpStableToken",
+ "USUAL": "Usual",
+ "USUALX": "USUALx",
"USV": "Universal Store of Value",
"USX": "USX Quantum",
+ "USYC": "Hashnote USYC",
"UT": "Ulord",
"UTBAI": "UTB.ai",
"UTC": "UltraCoin",
"UTG": "UltronGlow",
"UTH": "Uther",
+ "UTHX": "Utherverse",
"UTI": "Unicorn Technology International",
"UTIL": "Utility Coin",
"UTK": "Utrust",
+ "UTKV1": "Utrust",
"UTMDOGE": "UltramanDoge",
"UTNP": "Universa",
+ "UTON": "uTON",
"UTT": "United Traders Token",
"UTU": "UTU Protocol",
"UTX": "UTIX",
@@ -12450,6 +14575,7 @@
"UWU": "UwU Lend",
"UWUCOIN": "uwu",
"UX": "Umee",
+ "UXLINK": "UXLINK",
"UXOS": "UXOS",
"UXP": "UXD Protocol",
"UZUMAKI": "Uzumaki Inu",
@@ -12467,11 +14593,14 @@
"VALID": "Validator Token",
"VALOR": "Valor Token",
"VALORBIT": "Valorbit",
+ "VALU": "Value",
"VALUE": "Value Liquidity",
"VAMPIRE": "Vampire Inu",
"VAN": "Vanspor Token",
- "VANA": "Nirvana",
+ "VANA": "Vana",
"VANCAT": "Vancat",
+ "VANCE": "JD Vance",
+ "VANF": "Van Fwogh",
"VANRY": "Vanar Chain",
"VANT": "Vanta Network",
"VANY": "Vanywhere",
@@ -12480,6 +14609,7 @@
"VARA": "Vara Network",
"VARIUS": "Varius",
"VARK": "Aardvark",
+ "VATO": "vanitis",
"VATR": "Vatra INU",
"VATRENI": "Croatian FF Fan Token",
"VAULT": "Vault Tech",
@@ -12538,11 +14668,13 @@
"VEMP": "vEmpire DDAO",
"VEN": "VeChain Old",
"VENA": "Vena Network",
+ "VENKO": "VENKO",
"VENOM": "Venom",
"VENOMAI": "VENOM",
"VENT": "Vent Finance",
"VENTI": "VentiSwap",
"VENTION": "Vention",
+ "VENTU": "Venture Coin",
"VENUS": "VenusEnergy",
"VEO": "Amoveo",
"VER": "VersalNFT",
@@ -12553,6 +14685,7 @@
"VERSA": "Versa Token",
"VERSACE": "VERSACE",
"VERSE": "Verse",
+ "VERTAI": "Vertical AI",
"VERTEX": "Vertex",
"VERUM": "Verum Coin",
"VERVE": "Verve",
@@ -12569,6 +14702,7 @@
"VFIL": "Venus Filecoin",
"VFOX": "VFOX",
"VFT": "Value Finance",
+ "VG": "Viu Ganhou",
"VGO": "Vagabond",
"VGX": "Voyager Token",
"VHC": "Vault Hill City",
@@ -12576,6 +14710,7 @@
"VIA": "ViaCoin",
"VIB": "Viberate",
"VIBE": "VIBEHub",
+ "VIBEA": "Vibe AI",
"VIBLO": "VIBLO",
"VIC": "Viction",
"VICA": "ViCA Token",
@@ -12585,6 +14720,7 @@
"VICTORIUM": "Victorium",
"VID": "VideoCoin",
"VIDA": "Vidiachange",
+ "VIDEO": "Videocoin by Drakula",
"VIDT": "VIDT Datalink",
"VIDY": "Vidy",
"VIDYA": "Vidya",
@@ -12593,6 +14729,7 @@
"VIEW": "Viewly",
"VIG": "TheVig",
"VIK": "VIKTAMA",
+ "VIKITA": "VIKITA",
"VIKKY": "VikkyToken",
"VIM": "VicMove",
"VIN": "VinChain",
@@ -12611,18 +14748,26 @@
"VISIO": "Visio",
"VISION": "VisionGame",
"VISR": "Visor",
+ "VIST": "VISTA",
+ "VISTA": "Ethervista",
+ "VISTADOG": "VISTADOG",
"VIT": "Vision Industry Token",
"VITA": "VitaDAO",
"VITAE": "Vitae",
"VITAFAST": "Molecules of Korolchuk IP-NFT",
"VITAL": "Vital Network",
+ "VITALI": "Vitalik's Casper",
+ "VITAMINS": "Vitamins",
+ "VITARNA": "VitaRNA",
"VITE": "VITE",
"VITRA": "Vitra Studios",
"VITY": "Vitteey",
"VIU": "Viuly",
+ "VIVEK": "Head of D.O.G.E",
"VIVID": "Vivid Coin",
"VIVO": "VIVO Coin",
"VIX": "VIXCO",
+ "VIX7": "VIX777",
"VIXV1": "VIXCO v1",
"VIZ": "Vision City",
"VIZION": "ViZion Protocol",
@@ -12638,6 +14783,7 @@
"VLUNA": "Venus Luna",
"VLX": "Velas",
"VLXPAD": "VelasPad",
+ "VMANTA": "Bifrost Voucher MANTA",
"VMATIC": "Venus MATIC",
"VMC": "VirtualMining Coin",
"VME": "TrueVett",
@@ -12652,6 +14798,7 @@
"VNM": "Venom",
"VNN": "VINU Network",
"VNO": "Veno Finance",
+ "VNST": "VNST Stablecoin",
"VNT": "VNT Chain",
"VNTW": "Value Network Token",
"VNX": "VisionX",
@@ -12660,9 +14807,12 @@
"VNY": "Vanity",
"VOCARE": "Vocare ex Machina",
"VOCO": "Provoco",
+ "VODCAT": "VODKA CAT",
"VODKA": "Vodka Token",
+ "VOIP": "Voip Finance",
"VOISE": "Voise",
"VOL": "Volume Network",
+ "VOLBOOST": "VolBoost",
"VOLLAR": "Vollar",
"VOLR": "Volare Network",
"VOLT": "Volt Inu",
@@ -12719,6 +14869,7 @@
"VSOL": "VSolidus",
"VSP": "Vesper Finance",
"VSTA": "Vesta Finance",
+ "VSTR": "Vestra DAO",
"VSUI": "Volo Staked SUI",
"VSX": "Vsync",
"VSYS": "V Systems",
@@ -12731,6 +14882,7 @@
"VTN": "Voltroon",
"VTOS": "VTOS",
"VTRA": " E.C. Vitoria Fan Token",
+ "VTRAD": "VTRADING",
"VTRO": "Vitruveo DEX",
"VTRUMP": "Vote Trump",
"VTRX": "Venus TRX",
@@ -12742,18 +14894,23 @@
"VUC": "Virta Unique Coin",
"VULC": "Vulcano",
"VUNI": "Venus UNI",
+ "VUSD": "Virtual USD",
"VUZZ": "Vuzz AI",
"VV": "Virtual Versions",
+ "VVAIFU": "Dasha",
"VVI": "VV Coin",
"VVS": "VVS Finance",
"VX": "ViteX Coin",
"VXL": "Voxel X Network",
+ "VXR": "Vox Royale",
"VXRP": "Venus XRP",
"VXT": "Voxto Amplify",
"VXV": "Vectorspace AI",
+ "VY": "Valinity",
"VYBE": "Vybe",
"VYFI": "VyFinance",
"VYNC": "VYNK Chain",
+ "VYPER": "VYPER.WIN",
"VZT": "Vezt",
"W": "Wormhole",
"W1": "W1",
@@ -12764,12 +14921,15 @@
"W3S": "Web3Shot",
"W3W": "Web3 Whales",
"W8BIT": "8Bit Chain",
+ "WAAC": "Wrapped AyeAyeCoin",
"WAB": "WABnetwork",
"WABI": "WABI",
+ "WABU": "Warrenbuffett",
"WACME": "Wrapped Accumulate",
"WACO": "Waste Digital Coin",
"WAD": "WardenSwap",
"WADA": "Wrapped Cardano",
+ "WAFC": "Wrapped Arsenal FC (Kayen)",
"WAFFLES": "Waffles Davincij15's Cat",
"WAG": "WagyuSwap",
"WAGE": "Digiwage",
@@ -12785,8 +14945,11 @@
"WAIFU": "Waifu",
"WAIT": "Hourglass",
"WAL": "The Wasted Lands",
+ "WALE": "Waletoken",
"WALK": "Walk Token",
+ "WALL": "Du Rove's Wall",
"WALLET": "Ambire Wallet",
+ "WALLI": "WALLi",
"WALLY": "Wally Bot",
"WALTER": "walter",
"WALV": "Alvey Chain",
@@ -12796,14 +14959,17 @@
"WANA": "Wanaka Farm",
"WANATHA": "Wrapped ANATHA",
"WAND": "WandX",
+ "WANK": "Wojak The Wanker",
"WANKO": "WANKO•MANKO•RUNES",
"WANNA": "Wanna Bot",
"WANUSDT": "wanUSDT",
+ "WAP": "Wet Ass Pussy",
"WAR": "WeStarter",
"WARP": "WarpCoin",
"WARPED": "Warped Games",
"WARPIE": "Warpie",
"WARS": "MetaWars",
+ "WART": "Warthog",
"WAS": "Wasder",
"WASABI": "WasabiX",
"WASD": "WASD Studios",
@@ -12811,16 +14977,23 @@
"WASSIE": "WASSIE",
"WASTR": "Wrapped Astar",
"WAT": "Wat",
+ "WATC": "WATCoin",
+ "WATCH": "Yieldwatch",
"WATER": "doginwotah",
"WAVAX": "Wrapped AVAX",
"WAVES": "Waves",
+ "WAVL": "Wrapped Aston Villa",
+ "WAWA": "Wawa Cat",
"WAXE": "WAXE",
"WAXL": "Wrapped Axelar",
"WAXP": "Worldwide Asset eXchange",
+ "WAXS": "Axie Infinity Shards (Wormhole)",
"WAY": "WayCoin",
"WAZ": "MikeAI",
+ "WBAN": "Wrapped Banano",
"WBB": "Wild Beast Coin",
"WBBC": "Wibcoin",
+ "WBC": "WorldBrain Coin",
"WBCH": "Wrapped Bitcoin Cash",
"WBESC": "Wrapped BESC",
"WBET": "Wavesbet",
@@ -12832,6 +15005,7 @@
"WBOND": "War Bond Token",
"WBONE": "Shibarium Wrapped BONE",
"WBONES": "Wrapped BONES",
+ "WBONK": "BONK (Portal Bridge)",
"WBS": "Websea",
"WBT": "WhiteBIT Token",
"WBTC": "Wrapped Bitcoin",
@@ -12851,11 +15025,13 @@
"WCKB": "Wrapped Nervos Network",
"WCOIN": "WCoin",
"WCORE": "Wrapped Core",
+ "WCRO": "Wrapped CRO",
"WCS": "Weecoins",
"WCSOV": "Wrapped CrownSterling",
"WCT": "Waves Community Token",
"WCT1WCT1": "Wrapped Car Token 1",
"WCUSD": "Wrapped Celo Dollar",
+ "WDAI": "Dai (Wormhole)",
"WDC": "WorldCoin",
"WDOG": "Winterdog",
"WDOGE": "Wrapped Dogecoin",
@@ -12877,31 +15053,43 @@
"WEC": "Whole Earth Coin",
"WECO": "WECOIN",
"WED": "Wednesday Inu",
+ "WEEBS": "Weebs",
"WEETH": "Wrapped eETH",
+ "WEEX": "WEEX Token",
"WEF": "DOG WIF CHINESE HAT",
"WEFI": "WeFi",
"WEGEN": "WeGen Platform",
"WEGI": "Wegie",
"WEGLD": "Wrapped EGLD",
+ "WEHMND": "Wrapped eHMND",
"WEIRDO": "Weirdo",
+ "WEL": "Welsh Corgi",
"WELA": "Wrapped Elastos",
"WELD": "Weld",
"WELL": "Moonwell",
"WELLTOKEN": "Well",
+ "WELLV1": "Moonwell v1",
+ "WELON": "WrappedElon",
"WELSH": "Welshcorgicoin",
"WELT": "Fabwelt",
"WELUPS": "Welups Blockchain",
"WEMIX": "WEMIX",
"WEMIXUSD": "WEMIX",
"WEN": "Wen",
+ "WEND": "Wellnode",
+ "WENIS": "WenisCoin",
"WENLAMBO": "Wenlambo",
"WEOS": "Wrapped EOS",
+ "WEPC": "World Earn & Play Community",
+ "WERK": "Werk Family",
"WEST": "Waves Enterprise",
"WET": "WeShow Token",
"WETH": "WETH",
"WETHV1": "WETH v1",
"WETHW": "Wrapped EthereumPoW",
"WEVE": "veDAO",
+ "WEVER": "Wrapped Ever",
+ "WEVERV1": "Wrapped Ever v1",
"WEVMOS": "Wrapped Evmos",
"WEWE": "WEWE",
"WEX": "WaultSwap",
@@ -12909,11 +15097,13 @@
"WEXPOLY": "WaultSwap Polygon",
"WFAI": "WaifuAI",
"WFBTC": "Wrapped Fantom Bitcoin",
+ "WFDP": "WFDP",
"WFIL": "Wrapped Filecoin",
"WFLAMA": "WIFLAMA",
"WFLOW": "Wrapped Flow",
"WFO": "WoofOracle",
"WFT": "Windfall Token",
+ "WFTM": "Wrapped Fantom",
"WFTN": "Wrapped FTN",
"WFUSE": "Wrapped Fuse",
"WFX": "WebFlix",
@@ -12926,14 +15116,20 @@
"WGR": "Wagerr",
"WGRT": "WaykiChain Governance Coin",
"WGT": "Web3Games.com",
+ "WHA": "WHALES DOGE",
+ "WHAL": "WHALEBERT",
"WHALE": "WHALE",
"WHALES": "Whales Market",
+ "WHAT": "What the Duck",
"WHBAR": "Wrapped HBAR",
+ "WHC": "Whales Club",
"WHEAT": "Wheat Token",
"WHEE": "WHEE (Ordinals)",
"WHEEL": "Wheelers",
"WHEN": "WhenHub",
"WHEX": "Whale Exploder",
+ "WHI": "White Boy Summer",
+ "WHINE": "Whine Coin",
"WHIRL": "Whirl Finance",
"WHISK": "Whiskers",
"WHISKEY": "WHISKEY",
@@ -12945,18 +15141,26 @@
"WHTETGRMOON": "WHITE TIGER MOON",
"WHTGRPXL": "White Tiger Pixel",
"WHX": "WHITEX",
+ "WHY": "WHY",
+ "WHYCAT": "WhyCat",
"WIB": "Wibson",
+ "WIBE": "Wibegram",
"WIC": "Wi Coin",
"WICC": "WaykiChain",
+ "WICKED": "Wicked",
"WIF": "dogwifhat",
"WIF2": "DogWif2.0",
"WIFB": "dogwifball",
+ "WIFC": "dogwifceo",
+ "WIFCAT": "WIFCAT COIN",
"WIFE": "Wifejak",
+ "WIFEAR": "TRUMP WIF EAR",
"WIFEDOGE": "Wifedoge",
"WIFI": "WiFi Map",
"WIFICOIN": "Wifi Coin",
"WIFS": "dogwifscarf",
"WIFSA": "dogwifsaudihat",
+ "WIGL": "Wigl",
"WIGO": "WigoSwap",
"WIK": "Wicked Bet",
"WIKEN": "Project WITH",
@@ -12964,14 +15168,18 @@
"WILC": "Wrapped ILCOIN",
"WILD": "Wilder World",
"WILDC": "Wild Crypto",
+ "WILDCOIN": "WILDCOIN",
"WIN": "WINk",
+ "WINB": "WINBIT CASINO",
"WINE": "WineCoin",
"WING": "Wing Finance",
"WINGS": "Wings DAO",
"WINK": "Wink",
"WINN": "Winnerz",
+ "WINNIE": "Winnie the Poodle",
"WINR": "JustBet",
"WINRY": "Winry Inu",
+ "WINSTON": "Winston",
"WINT": "WinToken",
"WINTER": "Winter",
"WINU": "Walter Inu",
@@ -12986,6 +15194,7 @@
"WIT": "Witnet",
"WITCH": "Witch",
"WITCOIN": "Witcoin",
+ "WIWI": "Wiggly Willy",
"WIX": "Wixlar",
"WIZA": "Wizardia",
"WJD": "WJD",
@@ -12998,6 +15207,7 @@
"WKD": "Wakanda Inu",
"WLD": "Worldcoin",
"WLF": "Wolfs Group",
+ "WLFI": "World Liberty Financial",
"WLITI": "wLITI",
"WLK": "Wolk",
"WLKN": "Walken",
@@ -13010,13 +15220,16 @@
"WMB": "WatermelonBlock",
"WMC": "WMCoin",
"WMEMO": "Wonderful Memories",
+ "WMETIS": "Wrapped Metis",
"WMF": "Whale Maker Fund",
"WMINIMA": "Wrapped Minima",
"WMLX": "Millix",
+ "WMM": "Weird Medieval Memes",
"WMN": "WebMind Network",
"WMNT": "Wrapped Mantle",
"WMOXY": "Moxy",
- "WMT": "World Mobile Token",
+ "WMT": "World Mobile Token v1",
+ "WMTX": "World Mobile Token",
"WMW": "WoopMoney",
"WMX": "Wombex Finance",
"WMXWOM": "Wombex WOM",
@@ -13042,14 +15255,16 @@
"WOJ": "Wojak Finance",
"WOJAK": "Wojak",
"WOJAK2": "Wojak 2.0 Coin",
+ "WOJAKC": "Wojak Coin",
"WOKB": "Wrapped OKB",
"WOKT": "Wrapped OKT",
"WOL": "World of Legends",
- "WOLF": "Landwolf",
+ "WOLF": "LANDWOLF (AVAX)",
"WOLFILAND": "Wolfiland",
"WOLFOF": "Wolf of Wall Street",
"WOLFP": "Wolfpack Coin",
"WOLFY": "WOLFY",
+ "WOLT": "Wolt",
"WOLVERINU": "WOLVERINU",
"WOM": "WOM",
"WOMB": "Wombat Exchange",
@@ -13069,16 +15284,22 @@
"WOOO": "wooonen",
"WOOOOO": "Wooooo! Coin",
"WOOP": "Woonkly Power",
+ "WOOPV1": "Woonkly Power",
"WOP": "WorldPay",
"WOR": "Hollywood Capital Group WARRIOR",
"WORK": "Work X",
+ "WORKE": "Worken",
+ "WORL": "World Record Banana",
"WORLD": "World Token",
"WORM": "HealthyWorm",
"WORX": "Worx",
"WOS": "Wolf Of Solana",
+ "WOT": "World Of Trump",
+ "WOULD": "would",
"WOW": "WOWswap",
"WOWS": "Wolves of Wall Street",
"WOZX": "Efforce",
+ "WPAY": "WPAY",
"WPC": "WePiggy Coin",
"WPE": "OPES (Wrapped PE)",
"WPEPE": "Wrapped Pepe",
@@ -13086,6 +15307,7 @@
"WPKT": "Wrapped PKT",
"WPLS": "Wrapped Pulse",
"WPOKT": "wrapped POKT",
+ "WPOR": "Wrapped Portugal National Team",
"WPP": "Green Energy Token",
"WPR": "WePower",
"WQT": "Work Quest",
@@ -13108,7 +15330,9 @@
"WSDOGE": "Doge of Woof Street",
"WSG": "Wall Street Games",
"WSGV1": "Wall Street Games v1",
- "WSHIB": "wShiba",
+ "WSH": "White Yorkshire",
+ "WSHIB": "Wrapped Shiba Inu (Wormhole)",
+ "WSHIBA": "wShiba",
"WSI": "WeSendit",
"WSIENNA": "Sienna ERC20",
"WSM": "Wall Street Memes",
@@ -13116,12 +15340,15 @@
"WSTA": "Wrapped Statera",
"WSTETH": "Lido wstETH",
"WSTOR": "StorageChain",
+ "WSTORV1": "StorageChain v1",
"WSTR": "Wrapped Star",
"WSTUSDT": "wstUSDT",
+ "WSTUSR": "Resolv wstUSR",
"WSX": "WeAreSatoshi",
"WT": "WeToken",
"WTAO": "Wrapped TAO",
"WTC": "Waltonchain",
+ "WTE": "Wonder Energy Technology",
"WTF": "Waterfall Governance",
"WTFT": "WTF Token",
"WTFUEL": "Wrapped TFUEL",
@@ -13134,51 +15361,69 @@
"WTT": "Giga Watt",
"WTWOOL": "Wolf Town Wool",
"WUF": "WUFFI",
+ "WUK": "WUKONG",
+ "WUKONG": "Sun Wukong",
+ "WULFY": "Wulfy",
"WUSD": "Worldwide USD",
"WUST": "Wrapped UST Token",
+ "WVG0": "Wrapped Virgin Gen-0 CryptoKittties",
"WVTRS": "Vitreus",
"WW3": "WW3",
"WWAN": "Wrapped WAN",
"WWB": "Wowbit",
+ "WWBNB": "Wrapped BNB (Wormhole)",
"WWD": "Wolf Works DAO",
"WWDOGE": "Wrapped WDOGE",
"WWEMIX": "WWEMIX",
"WWF": "WWF",
+ "WWMATIC": "Wrapped Polygon (Wormhole)",
+ "WWRY": "WeWillRugYou",
"WWY": "WeWay",
"WX": "WX Token",
"WXDAI": "Wrapped XDAI",
"WXDC": "Wrapped XDC",
+ "WXM": "WeatherXM",
+ "WXRP": "Wrapped XRP",
"WXT": "WXT",
"WXTZ": "Wrapped Tezos",
+ "WYAC": "Woman Yelling At Cat",
+ "WYN": "Wynn",
"WYNN": "Anita Max Wynn",
"WYS": "Wysker",
+ "WYZ": "WYZth",
"WZEC": "Wrapped Zcash",
"WZEDX": "Wrapped Zedxion",
"WZENIQ": "Wrapped Zeniq (ETH)",
"WZETA": "Wrapped Zeta",
"WZM": "Woozoo Music",
+ "WZNN": "Wrapped Zenon (Zenon Bridge)",
+ "WZNNV1": "Wrapped Zenon (Zenon Bridge) v1",
"WZRD": "Bitcoin Wizards",
- "X": "AI-X",
+ "X": "X Empire",
"X2": "X2Coin",
"X2Y2": "X2Y2",
"X42": "X42 Protocol",
+ "X7": "X7",
"X7C": "X7 Coin",
"X7DAO": "X7DAO",
"X7R": "X7R",
"X8X": "X8Currency",
"XACT": "XactToken",
"XAEAXII": "XAEA-Xii Token",
+ "XAGX": "Silver Token",
"XAH": "Xahau",
"XAI": "Xai",
"XALGO": "Wrapped ALGO",
"XALPHA": "XAlpha AI",
"XAMP": "Antiample",
+ "XAND": "Xandeum",
"XANK": "Xank",
"XAP": "Apollon",
"XAR": "Arcana Network",
"XAS": "Asch",
"XAT": "ShareAt",
"XAUC": "XauCoin",
+ "XAUM": "Matrixdock Gold",
"XAUR": "Xaurum",
"XAUT": "Tether Gold",
"XAVA": "Avalaunch",
@@ -13219,6 +15464,7 @@
"XCG": "Xchange",
"XCH": "Chia",
"XCHF": "CryptoFranc",
+ "XCHNG": "Chainge Finance",
"XCI": "Cannabis Industry Coin",
"XCLR": "ClearCoin",
"XCM": "CoinMetro",
@@ -13283,16 +15529,19 @@
"XG": "XG Sports",
"XGB": "GoldenBird",
"XGC": "Xiglute Coin",
+ "XGD": "X Gold",
"XGEM": "Exchange Genesis Ethlas Medium",
"XGLI": "Glitter Finance",
"XGOLD": "XGOLD COIN",
"XGOX": "Go!",
+ "XGP": "XGP",
"XGPT": "XGPT",
"XGR": "GoldReserve",
"XGRO": "Growth DeFi",
"XGT": "Xion Finance",
"XHI": "HiCoin",
"XHP": "XHYPE",
+ "XHPV1": "XHYPE v1",
"XHT": "HollaEx",
"XHV": "Haven Protocol",
"XI": "Xi",
@@ -13302,8 +15551,10 @@
"XIDR": "XIDR",
"XIL": "Xillion",
"XIN": "Mixin",
+ "XING": "Xing Xing",
"XINU": "XINU",
"XIO": "Blockzero Labs",
+ "XION": "XION",
"XIOS": "Xios",
"XIOT": "Xiotri",
"XIV": "Project Inverse",
@@ -13320,6 +15571,7 @@
"XLN": "LunaOne",
"XLQ": "Alqo",
"XLR": "Solaris",
+ "XLS": "Elis",
"XLT": "Nexalt",
"XM": "xMooney",
"XMARK": "xMARK",
@@ -13332,17 +15584,20 @@
"XMN": "Motion",
"XMO": "Monero Original",
"XMON": "XMON",
+ "XMOON": "r/CryptoCurrency Moons v1",
"XMP": "Mapt.Coin",
"XMR": "Monero",
"XMRG": "Monero Gold",
"XMS": "Megastake",
"XMT": "MetalSwap",
"XMV": "MoneroV",
+ "XMW": "Morphware",
"XMX": "XMax",
"XMY": "MyriadCoin",
"XNA": "Neurai",
"XNB": "Xeonbit",
"XNC": "Xenios",
+ "XNET": "XNET Mobile",
"XNFT": "xNFT Protocol",
"XNG": "Enigma",
"XNK": "Ink Protocol",
@@ -13361,6 +15616,7 @@
"XOT": "Okuru",
"XOV": "XOVBank",
"XOX": "XOX Labs",
+ "XOXNO": "XOXNO",
"XP": "Experience Points",
"XPA": "XPA",
"XPAT": "Bitnation Pangea",
@@ -13408,14 +15664,15 @@
"XRISE": "Xrise",
"XRL": "Rialto.AI",
"XRLM": "xRealm.ai",
+ "XROCK": "xRocket",
"XROOTAI": "XRootAI",
"XRP": "XRP",
"XRP2": "XRP2.0",
"XRP20": "XRP20",
- "XRP8": "HarryPotterObamaPacMan8Inu",
"XRPAYNET": "XRPayNet",
"XRPC": "Xrp Classic",
"XRPCHAIN": "Ripple Chain",
+ "XRPEPE": "XRPEPE",
"XRPH": "XRP Healthcare",
"XRS": "Xrius",
"XRT": "Robonomics Network",
@@ -13457,7 +15714,9 @@
"XTRA": "ExtraCredit",
"XTRACK": "Xtrack AI",
"XTREME": "ExtremeCoin",
+ "XTREMEV": "Xtremeverse",
"XTRM": "XTRM COIN",
+ "XTRUMP": "X TRUMP",
"XTT": "XSwap Treasure",
"XTTB20": "XTblock",
"XTUSD": "XT Stablecoin XTUSD",
@@ -13470,6 +15729,7 @@
"XUP": "UPGRADE",
"XUPS": "Xups",
"XUV": "XUV Coin",
+ "XV": "XV",
"XVC": "Vcash",
"XVE": "The Vegan Initiative",
"XVG": "Verge",
@@ -13488,11 +15748,14 @@
"XYM": "Symbol",
"XYO": "XY Oracle",
"XYZ": "Universe.XYZ",
+ "XZK": "Mystiko Network",
+ "Y24": "Yield 24",
"Y2K": "Y2K",
"Y8U": "Y8U",
"YAC": "YAcCoin",
"YACHT": "YachtingVerse",
"YAE": "Cryptonovae",
+ "YAFA": "Free Palestine",
"YAG": "Yaki Gold",
"YAI": "Ÿ",
"YAK": "Yield Yak",
@@ -13506,11 +15769,13 @@
"YAP": "Yap Stone",
"YARL": "Yarloo",
"YAW": "Yawww",
+ "YAWN": "YAWN",
"YAXIS": "yAxis",
"YAY": "YAY Games",
"YAYCOIN": "YAYcoin",
"YBC": "YbCoin",
"YBO": "Young Boys Fan Token",
+ "YBR": "YieldBricks",
"YCC": "Yuan Chain Coin",
"YCE": "MYCE",
"YCO": "Y Coin",
@@ -13519,10 +15784,12 @@
"YDF": "Yieldification",
"YDOGE": "Yorkie Doge",
"YDR": "YDragon",
+ "YEARN": "YearnTogether",
"YEC": "Ycash",
"YEE": "Yeeco",
"YEED": "Yggdrash",
"YEEHAW": "YEEHAW",
+ "YEETI": "YEETI 液体",
"YEFI": "YeFi",
"YEL": "Yel.Finance",
"YEON": "Yeon",
@@ -13542,7 +15809,8 @@
"YFFI": "yffi finance",
"YFFII": "YFFII Finance",
"YFI": "yearn.finance",
- "YFIE": "YFIEXCHANGE.FINANCE",
+ "YFIE": "yearn.finance (Avalanche Bridge)",
+ "YFIEXCHANGE": "YFIEXCHANGE.FINANCE",
"YFII": "DFI.money",
"YFIII": "Dify.Finance",
"YFIVE": "YFIVE FINANCE",
@@ -13553,16 +15821,22 @@
"YFV": "YFValue",
"YFX": "Your Futures Exchange",
"YGG": "Yield Guild Games",
+ "YIDO": "Yidocy Plus",
"YIELD": "Yield Protocol",
"YIELDX": "Yield Finance",
"YIKES": "Yikes Dog",
+ "YILONG": "Yi Long Ma",
+ "YILONGMA": "Chinese Elon Musk",
"YIN": "YIN Finance",
"YINBI": "Yinbi",
+ "YLAY": "Yelay",
"YLC": "YoloCash",
"YLD": "YIELD App",
"YLDY": "Yieldly",
"YMC": "YamahaCoin",
"YMS": "Yeni Malatyaspor Token",
+ "YNE": "yesnoerror",
+ "YNETH": "YieldNest Restaked ETH",
"YO": "Yobit Token",
"YOBASE": "All Your Base",
"YOC": "YoCoin",
@@ -13571,18 +15845,25 @@
"YODE": "YodeSwap",
"YOLO": "YoloNolo",
"YOM": "YOM",
+ "YONNY": "YONNY",
"YOOSHI": "YooShi",
"YOP": "Yield Optimization Platform & Protocol",
+ "YORAN": "YORAN THE CAVALIER",
+ "YORI": "YORI",
"YOSHI": "Yoshi.exchange",
"YOTD": "Year of the Dragon",
"YOTO": "yotoshi",
"YOU": "YOU Chain",
"YOUC": "yOUcash",
+ "YOUNES": "YOUNES",
"YOURAI": "YOUR AI",
+ "YOURMOM": "YOUR MOM DOG",
+ "YOUSIM": "YouSim",
"YOVI": "YobitVirtualCoin",
"YOYOW": "Yoyow",
"YPC": "YoungParrot",
"YPIE": "PieDAO Yearn Ecosystem Pie",
+ "YPRISMA": "Yearn yPRISMA",
"YSAFE": "yieldfarming.insure",
"YSEC": "Yearn Secure",
"YSR": "Ystar",
@@ -13592,25 +15873,32 @@
"YTS": "YetiSwap",
"YU": "BOUNTYKINDS",
"YUANG": "Yuang Coin",
+ "YUCHEN": "Sun Yuchen",
"YUCJ": "Yu Coin",
"YUCT": "Yucreat",
"YUDI": "Yudi",
"YUGE": "YUGE COIN",
"YUKI": "YUKI",
+ "YUKIE": "Yukie",
"YUKKY": "YUKKY",
+ "YUKO": "YUKO",
"YUM": "Yumerium",
"YUMMI": "Yummi Universe",
"YUMMY": "Yummy",
"YUP": "Crowdholding",
"YURI": "YURI",
+ "YUSD": "YUSD Stablecoin",
"YUSE": "Yuse Token",
"YUSRA": "YUSRA",
+ "YUSUF": "Yusuf Dikec Meme",
"YUZU": "YuzuSwap",
"YVBOOST": "Yearn Compounding veCRV yVault",
"YVS": "YVS.Finance",
+ "YVYFI": "YFI yVault",
"YYAVAX": "Yield Yak AVAX",
"YYE": "YYE Energy",
"YYFI": "YYFI.Protocol",
+ "YYOLO": "yYOLO",
"Z3": "Z-Cubed",
"ZABAKU": "Zabaku Inu",
"ZACK": "Zack Morris",
@@ -13623,10 +15911,14 @@
"ZAO": "zkTAO",
"ZAP": "Zap",
"ZAPI": "Zapicorn",
+ "ZAPO": "Zapo AI",
"ZARP": "ZARP Stablecoin",
"ZARX": "eToro South African Rand",
"ZASH": "ZIMBOCASH",
"ZAT": "ZatGo",
+ "ZAZA": "ZAZA",
+ "ZAZU": "Zazu",
+ "ZAZZLES": "Zazzles",
"ZB": "ZB",
"ZBC": "Zebec Protocol",
"ZBCN": "Zebec Network",
@@ -13634,6 +15926,7 @@
"ZBU": "Zeebu",
"ZCC": "ZCC Coin",
"ZCC1": "ZeroCarbon",
+ "ZCD": "ZChains",
"ZCG": "ZCashGOLD",
"ZCHF": "Frankencoin",
"ZCHN": "Zichain",
@@ -13646,6 +15939,8 @@
"ZCULT": "Zkcult",
"ZCX": "Unizen",
"ZDAI": "Zydio AI",
+ "ZDC": "Zodiacs",
+ "ZDCV2": "ZodiacsV2",
"ZDEX": "Zeedex",
"ZDR": "Zloadr",
"ZEBU": "ZEBU",
@@ -13669,11 +15964,14 @@
"ZENI": "Zennies",
"ZENIQ": "Zeniq Coin",
"ZENITH": "Zenith Chain",
+ "ZENQ": "Zenqira",
"ZENT": "Zentry",
"ZEON": "Zeon Network",
"ZEP": "Zeppelin Dao",
"ZEPH": "Zephyr Protocol",
"ZER": "Zero",
+ "ZEREBRO": "Zerebro",
+ "ZERO": "ZeroLend",
"ZEROB": "ZeroBank",
"ZEROEX": "0.exchange",
"ZES": "Zetos",
@@ -13686,14 +15984,19 @@
"ZETRIX": "Zetrix",
"ZEUM": "Colizeum",
"ZEUS": "Zeus Network",
+ "ZEUSPEPES": "Zeus",
+ "ZEX": "Zeta",
"ZEXI": "ZEXICON",
+ "ZEXY": "ZEXY",
"ZF": "zkSwap Finance ",
+ "ZFI": "Zyfi",
"ZFL": "Zuflo Coin",
"ZFLOKI": "zkFloki",
"ZFM": "ZFMCOIN",
"ZGD": "ZambesiGold",
"ZGEM": "GemSwap",
"ZHC": "ZHC : Zero Hour Cash",
+ "ZHOA": "Chengpang Zhoa",
"ZIBU": "Zibu",
"ZIG": "Zignaly",
"ZIGAP": "ZIGAP",
@@ -13719,10 +16022,12 @@
"ZKARCH": "zkArchive",
"ZKB": "ZKBase",
"ZKBOB": "BOB",
+ "ZKCRO": "Cronos zkEVM CRO",
"ZKDOGE": "zkDoge",
"ZKDX": "ZKDX",
"ZKE": "zkEra Finance",
"ZKEVM": "zkEVMChain (BSC)",
+ "ZKEX": "zkExchange",
"ZKF": "ZKFair",
"ZKGROK": "ZKGROK",
"ZKGUN": "zkGUN",
@@ -13730,6 +16035,7 @@
"ZKID": "zkSync id",
"ZKIN": "zkInfra",
"ZKJ": "Polyhedra Network",
+ "ZKL": "zkLink",
"ZKLAB": "zkSync Labs",
"ZKLK": "ZkLock",
"ZKML": "zKML",
@@ -13744,7 +16050,8 @@
"ZKX": "ZKX",
"ZKZ": "Zkzone",
"ZLA": "Zilla",
- "ZLDA": "Zelda Inu",
+ "ZLDA": "ZELDA 2.0",
+ "ZLDAV1": "ZELDA v1",
"ZLK": "Zenlink Network",
"ZLOT": "zLOT Finance",
"ZLP": "ZilPay Wallet",
@@ -13765,11 +16072,13 @@
"ZODI": "Zodium",
"ZOE": "Zoe Cash",
"ZOI": "Zoin",
+ "ZON": "Zon Token",
"ZONE": "Zone",
"ZONO": "Zono Swap",
"ZONX": "METAZONX",
"ZOO": "ZooKeeper",
"ZOOA": "Zoopia",
+ "ZOOC": "ZOO Crypto World",
"ZOOM": "ZoomCoin",
"ZOOMER": "Zoomer Coin",
"ZOON": "CryptoZoon",
@@ -13777,6 +16086,7 @@
"ZORA": "Zoracles",
"ZORKSEES": "Zorksees",
"ZORO": "Zoro Inu",
+ "ZORRO": "Zorro",
"ZORT": "Zort",
"ZP": "Zen Protocol",
"ZPAE": "ZelaaPayAE",
@@ -13789,6 +16099,8 @@
"ZPTC": "Zeptacoin",
"ZRC": "ZrCoin",
"ZRO": "LayerZero",
+ "ZRPY": "Zerpaay",
+ "ZRS": "Zaros",
"ZRX": "0x",
"ZSC": "Zeusshield",
"ZSD": "Zephyr Protocol Stable Dollar",
@@ -13797,11 +16109,13 @@
"ZT": "ZBG Token",
"ZTC": "ZeTo",
"ZTG": "Zeitgeist",
+ "ZTK": "Zefi",
"ZTX": "ZTX",
"ZUC": "Zeux",
"ZUCKPEPE": "ZuckPepe",
"ZUKI": "Zuki Moba",
"ZUM": "ZumCoin",
+ "ZUN": "Zunami Governance Token",
"ZUNA": "ZUNA",
"ZUNUSD": "Zunami USD",
"ZUR": "Zurcoin",
@@ -13816,8 +16130,11 @@
"ZWAP": "ZilSwap",
"ZXC": "Oxcert",
"ZXT": "Zcrypt",
+ "ZYB": "Zyberswap",
"ZYD": "ZayedCoin",
+ "ZYGO": "Zygo the frog",
"ZYN": "Zynecoin",
+ "ZYNC": "ZynCoin",
"ZYNE": "Zynergy",
"ZYPTO": "Zypto Token",
"ZYR": "Zyrri",
@@ -13831,5 +16148,6 @@
"gOHM": "Governance OHM",
"redBUX": "redBUX",
"sOHM": "Staked Olympus",
+ "vXDEFI": "vXDEFI",
"wsOHM": "Wrapped Staked Olympus"
}
diff --git a/apps/api/src/assets/sitemap.xml b/apps/api/src/assets/sitemap.xml
index 3a0f44ffd..a422ff31a 100644
--- a/apps/api/src/assets/sitemap.xml
+++ b/apps/api/src/assets/sitemap.xml
@@ -188,6 +188,10 @@
https://ghostfol.io/en/blog/2024/09/hacktoberfest-2024
${currentDate}T00:00:00+00:00
+
+ https://ghostfol.io/en/blog/2024/11/black-weeks-2024
+ ${currentDate}T00:00:00+00:00
+
https://ghostfol.io/en/faq
${currentDate}T00:00:00+00:00
@@ -500,12 +504,10 @@
https://ghostfol.io/pl/o-ghostfolio
${currentDate}T00:00:00+00:00
-
+
+ https://ghostfol.io/pl/open
+ ${currentDate}T00:00:00+00:00
+
https://ghostfol.io/pl/rynki
${currentDate}T00:00:00+00:00
@@ -579,6 +581,12 @@
${currentDate}T00:00:00+00:00
+
+
- Dutch, French, German, Italian,
-
- Portuguese, Spanish and Turkish are currently supported.
+ Dutch, French, German, Italian, Polish, Portuguese, Spanish
+ and Turkish
+
+ are currently supported.
diff --git a/apps/client/src/app/pages/home/home-page.component.ts b/apps/client/src/app/pages/home/home-page.component.ts
index 6b79f09b9..e307884f8 100644
--- a/apps/client/src/app/pages/home/home-page.component.ts
+++ b/apps/client/src/app/pages/home/home-page.component.ts
@@ -11,7 +11,8 @@ import { takeUntil } from 'rxjs/operators';
host: { class: 'page has-tabs' },
selector: 'gf-home-page',
styleUrls: ['./home-page.scss'],
- templateUrl: './home-page.html'
+ templateUrl: './home-page.html',
+ standalone: false
})
export class HomePageComponent implements OnDestroy, OnInit {
public deviceType: string;
diff --git a/apps/client/src/app/pages/landing/landing-page.component.ts b/apps/client/src/app/pages/landing/landing-page.component.ts
index 3f9e45b94..4adcbe00a 100644
--- a/apps/client/src/app/pages/landing/landing-page.component.ts
+++ b/apps/client/src/app/pages/landing/landing-page.component.ts
@@ -11,7 +11,8 @@ import { Subject } from 'rxjs';
host: { class: 'page' },
selector: 'gf-landing-page',
styleUrls: ['./landing-page.scss'],
- templateUrl: './landing-page.html'
+ templateUrl: './landing-page.html',
+ standalone: false
})
export class LandingPageComponent implements OnDestroy, OnInit {
public countriesOfSubscribersMap: {
diff --git a/apps/client/src/app/pages/markets/markets-page.component.ts b/apps/client/src/app/pages/markets/markets-page.component.ts
index 65d1cccc5..be569233e 100644
--- a/apps/client/src/app/pages/markets/markets-page.component.ts
+++ b/apps/client/src/app/pages/markets/markets-page.component.ts
@@ -5,7 +5,8 @@ import { Subject } from 'rxjs';
host: { class: 'page' },
selector: 'gf-markets-page',
styleUrls: ['./markets-page.scss'],
- templateUrl: './markets-page.html'
+ templateUrl: './markets-page.html',
+ standalone: false
})
export class MarketsPageComponent implements OnDestroy {
private unsubscribeSubject = new Subject();
diff --git a/apps/client/src/app/pages/open/open-page.component.ts b/apps/client/src/app/pages/open/open-page.component.ts
index c7faaa4e2..c876c3cc8 100644
--- a/apps/client/src/app/pages/open/open-page.component.ts
+++ b/apps/client/src/app/pages/open/open-page.component.ts
@@ -9,7 +9,8 @@ import { Subject, takeUntil } from 'rxjs';
host: { class: 'page' },
selector: 'gf-open-page',
styleUrls: ['./open-page.scss'],
- templateUrl: './open-page.html'
+ templateUrl: './open-page.html',
+ standalone: false
})
export class OpenPageComponent implements OnDestroy, OnInit {
public statistics: Statistics;
diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
index 4f70993db..91254e002 100644
--- a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
+++ b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
@@ -29,7 +29,8 @@ import { ImportActivitiesDialogParams } from './import-activities-dialog/interfa
host: { class: 'has-fab' },
selector: 'gf-activities-page',
styleUrls: ['./activities-page.scss'],
- templateUrl: './activities-page.html'
+ templateUrl: './activities-page.html',
+ standalone: false
})
export class ActivitiesPageComponent implements OnDestroy, OnInit {
public dataSource: MatTableDataSource;
diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
index ac6a86cd5..fe3c7b278 100644
--- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
+++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
@@ -1,7 +1,5 @@
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
import { UpdateOrderDto } from '@ghostfolio/api/app/order/update-order.dto';
-import { DataService } from '@ghostfolio/client/services/data.service';
-import { validateObjectForForm } from '@ghostfolio/client/util/form.util';
import { getDateFormatString } from '@ghostfolio/common/helper';
import { translate } from '@ghostfolio/ui/i18n';
@@ -20,11 +18,12 @@ import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
import { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { AssetClass, AssetSubClass, Tag, Type } from '@prisma/client';
-import { isUUID } from 'class-validator';
import { isAfter, isToday } from 'date-fns';
import { EMPTY, Observable, Subject, lastValueFrom, of } from 'rxjs';
import { catchError, delay, map, startWith, takeUntil } from 'rxjs/operators';
+import { DataService } from '../../../../services/data.service';
+import { validateObjectForForm } from '../../../../util/form.util';
import { CreateOrUpdateActivityDialogParams } from './interfaces/interfaces';
@Component({
@@ -32,7 +31,8 @@ import { CreateOrUpdateActivityDialogParams } from './interfaces/interfaces';
selector: 'gf-create-or-update-activity-dialog',
changeDetection: ChangeDetectionStrategy.OnPush,
styleUrls: ['./create-or-update-activity-dialog.scss'],
- templateUrl: 'create-or-update-activity-dialog.html'
+ templateUrl: 'create-or-update-activity-dialog.html',
+ standalone: false
})
export class CreateOrUpdateActivityDialog implements OnDestroy {
@ViewChild('symbolAutocomplete') symbolAutocomplete;
@@ -124,7 +124,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
name: [this.data.activity?.SymbolProfile?.name, Validators.required],
quantity: [this.data.activity?.quantity, Validators.required],
searchSymbol: [
- !!this.data.activity?.SymbolProfile
+ this.data.activity?.SymbolProfile
? {
dataSource: this.data.activity?.SymbolProfile?.dataSource,
symbol: this.data.activity?.SymbolProfile?.symbol
@@ -216,16 +216,16 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
this.total =
this.activityForm.get('quantity').value *
this.activityForm.get('unitPrice').value +
- this.activityForm.get('fee').value ?? 0;
+ (this.activityForm.get('fee').value ?? 0);
} else if (this.activityForm.get('type').value === 'STAKE') {
this.total =
- this.activityForm.get('quantity').value * this.currentMarketPrice ??
- 0;
+ this.activityForm.get('quantity').value *
+ (this.currentMarketPrice ?? 0);
} else {
this.total =
this.activityForm.get('quantity').value *
this.activityForm.get('unitPrice').value -
- this.activityForm.get('fee').value ?? 0;
+ (this.activityForm.get('fee').value ?? 0);
}
this.changeDetectorRef.markForCheck();
@@ -480,10 +480,12 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
fee: this.activityForm.get('fee').value,
quantity: this.activityForm.get('quantity').value,
symbol:
- this.activityForm.get('searchSymbol').value?.symbol === undefined ||
- isUUID(this.activityForm.get('searchSymbol').value?.symbol)
- ? this.activityForm.get('name').value
- : this.activityForm.get('searchSymbol').value.symbol,
+ (['FEE', 'INTEREST', 'ITEM', 'LIABILITY'].includes(
+ this.activityForm.get('type').value
+ )
+ ? undefined
+ : this.activityForm.get('searchSymbol')?.value?.symbol) ??
+ this.activityForm.get('name')?.value,
tags: this.activityForm.get('tags').value,
type: this.activityForm.get('type').value,
unitPrice: this.activityForm.get('unitPrice').value
@@ -491,8 +493,9 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
try {
if (this.mode === 'create') {
- (activity as CreateOrderDto).updateAccountBalance =
- this.activityForm.get('updateAccountBalance').value;
+ activity.updateAccountBalance = this.activityForm.get(
+ 'updateAccountBalance'
+ ).value;
await validateObjectForForm({
classDto: CreateOrderDto,
@@ -501,7 +504,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
object: activity
});
- this.dialogRef.close(activity as CreateOrderDto);
+ this.dialogRef.close(activity);
} else {
(activity as UpdateOrderDto).id = this.data.activity.id;
diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
index 69c11ee70..2f5ead47a 100644
--- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
+++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
@@ -33,7 +33,8 @@ import { ImportActivitiesDialogParams } from './interfaces/interfaces';
changeDetection: ChangeDetectionStrategy.OnPush,
selector: 'gf-import-activities-dialog',
styleUrls: ['./import-activities-dialog.scss'],
- templateUrl: 'import-activities-dialog.html'
+ templateUrl: 'import-activities-dialog.html',
+ standalone: false
})
export class ImportActivitiesDialog implements OnDestroy {
public accounts: CreateAccountDto[] = [];
diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
index e2efb9e96..696fe7c5f 100644
--- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
+++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
@@ -7,7 +7,7 @@ import { MAX_TOP_HOLDINGS, UNKNOWN_KEY } from '@ghostfolio/common/config';
import { prettifySymbol } from '@ghostfolio/common/helper';
import {
AssetProfileIdentifier,
- Holding,
+ HoldingWithParents,
PortfolioDetails,
PortfolioPosition,
User
@@ -28,7 +28,8 @@ import { takeUntil } from 'rxjs/operators';
@Component({
selector: 'gf-allocations-page',
styleUrls: ['./allocations-page.scss'],
- templateUrl: './allocations-page.html'
+ templateUrl: './allocations-page.html',
+ standalone: false
})
export class AllocationsPageComponent implements OnDestroy, OnInit {
public accounts: {
@@ -86,7 +87,7 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
value: number;
};
};
- public topHoldings: Holding[];
+ public topHoldings: HoldingWithParents[];
public topHoldingsMap: {
[name: string]: { name: string; value: number };
};
@@ -493,6 +494,36 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
name,
allocationInPercentage:
this.totalValueInEtf > 0 ? value / this.totalValueInEtf : 0,
+ parents: Object.entries(this.portfolioDetails.holdings)
+ .map(([symbol, holding]) => {
+ if (holding.holdings.length > 0) {
+ const currentParentHolding = holding.holdings.find(
+ (parentHolding) => {
+ return parentHolding.name === name;
+ }
+ );
+
+ return currentParentHolding
+ ? {
+ allocationInPercentage:
+ currentParentHolding.valueInBaseCurrency / value,
+ name: holding.name,
+ position: holding,
+ symbol: prettifySymbol(symbol),
+ valueInBaseCurrency:
+ currentParentHolding.valueInBaseCurrency
+ }
+ : null;
+ }
+
+ return null;
+ })
+ .filter((item) => {
+ return item !== null;
+ })
+ .sort((a, b) => {
+ return b.allocationInPercentage - a.allocationInPercentage;
+ }),
valueInBaseCurrency: value
};
})
diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.html b/apps/client/src/app/pages/portfolio/allocations/allocations-page.html
index 3431501f5..f2dff76f3 100644
--- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.html
+++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.html
@@ -347,6 +347,7 @@
[locale]="user?.settings?.locale"
[pageSize]="10"
[topHoldings]="topHoldings"
+ (holdingClicked)="onSymbolChartClicked($event)"
/>
diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
index 85009a6e8..f52e7d558 100644
--- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
+++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
@@ -11,10 +11,13 @@ import {
ToggleOption,
User
} from '@ghostfolio/common/interfaces';
+import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { DateRange, GroupBy } from '@ghostfolio/common/types';
import { translate } from '@ghostfolio/ui/i18n';
+import { Clipboard } from '@angular/cdk/clipboard';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
+import { MatSnackBar } from '@angular/material/snack-bar';
import { SymbolProfile } from '@prisma/client';
import { isNumber, sortBy } from 'lodash';
import { DeviceDetectorService } from 'ngx-device-detector';
@@ -24,7 +27,8 @@ import { takeUntil } from 'rxjs/operators';
@Component({
selector: 'gf-analysis-page',
styleUrls: ['./analysis-page.scss'],
- templateUrl: './analysis-page.html'
+ templateUrl: './analysis-page.html',
+ standalone: false
})
export class AnalysisPageComponent implements OnDestroy, OnInit {
public benchmark: Partial;
@@ -44,6 +48,7 @@ export class AnalysisPageComponent implements OnDestroy, OnInit {
public dividendTimelineDataLabel = $localize`Dividend`;
public firstOrderDate: Date;
public hasImpersonationId: boolean;
+ public hasPermissionToReadAiPrompt: boolean;
public investments: InvestmentItem[];
public investmentTimelineDataLabel = $localize`Investment`;
public investmentsByGroup: InvestmentItem[];
@@ -73,9 +78,11 @@ export class AnalysisPageComponent implements OnDestroy, OnInit {
public constructor(
private changeDetectorRef: ChangeDetectorRef,
+ private clipboard: Clipboard,
private dataService: DataService,
private deviceService: DeviceDetectorService,
private impersonationStorageService: ImpersonationStorageService,
+ private snackBar: MatSnackBar,
private userService: UserService
) {
const { benchmarks } = this.dataService.fetchInfo();
@@ -113,6 +120,11 @@ export class AnalysisPageComponent implements OnDestroy, OnInit {
return id === this.user.settings?.benchmark;
});
+ this.hasPermissionToReadAiPrompt = hasPermission(
+ this.user.permissions,
+ permissions.readAiPrompt
+ );
+
this.update();
}
});
@@ -163,6 +175,20 @@ export class AnalysisPageComponent implements OnDestroy, OnInit {
this.fetchDividendsAndInvestments();
}
+ public onCopyPromptToClipboard() {
+ this.dataService.fetchPrompt().subscribe(({ prompt }) => {
+ this.clipboard.copy(prompt);
+
+ this.snackBar.open(
+ '✅ ' + $localize`AI prompt has been copied to the clipboard`,
+ undefined,
+ {
+ duration: 3000
+ }
+ );
+ });
+ }
+
public ngOnDestroy() {
this.unsubscribeSubject.next();
this.unsubscribeSubject.complete();
diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html
index 3dd0b3c10..491551c13 100644
--- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html
+++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html
@@ -1,5 +1,37 @@
Analysis
+ @if (user?.settings?.isExperimentalFeatures) {
+
+
+
+
+
+
+
+
+
+ @if (user?.subscription?.type === 'Basic') {
+
+ } @else {
+
+ }
+ Copy AI prompt to clipboard
+
+
+
+
+
+
+ }
X-ray
-
+
Ghostfolio X-ray uses static analysis to uncover potential issues and
risks in your portfolio. Adjust the rules below and set custom
thresholds to align with your personal investment strategy.
-
+
+ @if (isLoading) {
+
+ } @else {
+ {{ statistics?.rulesFulfilledCount }}
+ out of
+ {{ statistics?.rulesActiveCount }}
+ rules align with your portfolio.
+ }
+
+
Emergency Fund
@if (user?.subscription?.type === 'Basic') {
@@ -20,13 +42,18 @@
hasPermissionToUpdateUserSettings &&
user?.settings?.isExperimentalFeatures
"
- [isLoading]="isLoadingPortfolioReport"
+ [isLoading]="isLoading"
[rules]="emergencyFundRules"
[settings]="user?.settings?.xRayRules"
(rulesUpdated)="onRulesUpdated($event)"
/>
-
+
Currency Cluster Risks
@if (user?.subscription?.type === 'Basic') {
@@ -39,13 +66,42 @@
hasPermissionToUpdateUserSettings &&
user?.settings?.isExperimentalFeatures
"
- [isLoading]="isLoadingPortfolioReport"
+ [isLoading]="isLoading"
[rules]="currencyClusterRiskRules"
[settings]="user?.settings?.xRayRules"
(rulesUpdated)="onRulesUpdated($event)"
/>
-
+
+
+ Asset Class Cluster Risks
+ @if (user?.subscription?.type === 'Basic') {
+
+ }
+
+
+
+
Account Cluster Risks
@if (user?.subscription?.type === 'Basic') {
@@ -58,13 +114,18 @@
hasPermissionToUpdateUserSettings &&
user?.settings?.isExperimentalFeatures
"
- [isLoading]="isLoadingPortfolioReport"
+ [isLoading]="isLoading"
[rules]="accountClusterRiskRules"
[settings]="user?.settings?.xRayRules"
(rulesUpdated)="onRulesUpdated($event)"
/>
-
+
Economic Market Cluster Risks
@if (user?.subscription?.type === 'Basic') {
@@ -77,13 +138,18 @@
hasPermissionToUpdateUserSettings &&
user?.settings?.isExperimentalFeatures
"
- [isLoading]="isLoadingPortfolioReport"
+ [isLoading]="isLoading"
[rules]="economicMarketClusterRiskRules"
[settings]="user?.settings?.xRayRules"
(rulesUpdated)="onRulesUpdated($event)"
/>
-
+
Fees
@if (user?.subscription?.type === 'Basic') {
@@ -96,7 +162,7 @@
hasPermissionToUpdateUserSettings &&
user?.settings?.isExperimentalFeatures
"
- [isLoading]="isLoadingPortfolioReport"
+ [isLoading]="isLoading"
[rules]="feeRules"
[settings]="user?.settings?.xRayRules"
(rulesUpdated)="onRulesUpdated($event)"
@@ -111,7 +177,7 @@
hasPermissionToUpdateUserSettings &&
user?.settings?.isExperimentalFeatures
"
- [isLoading]="isLoadingPortfolioReport"
+ [isLoading]="isLoading"
[rules]="inactiveRules"
[settings]="user?.settings?.xRayRules"
(rulesUpdated)="onRulesUpdated($event)"
diff --git a/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.ts b/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.ts
index 36f42fc3e..0207545c2 100644
--- a/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.ts
+++ b/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.ts
@@ -3,8 +3,8 @@ import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import {
- PortfolioReportRule,
- PortfolioReport
+ PortfolioReportResponse,
+ PortfolioReportRule
} from '@ghostfolio/common/interfaces';
import { User } from '@ghostfolio/common/interfaces/user.interface';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
@@ -15,10 +15,12 @@ import { Subject, takeUntil } from 'rxjs';
@Component({
selector: 'gf-x-ray-page',
styleUrl: './x-ray-page.component.scss',
- templateUrl: './x-ray-page.component.html'
+ templateUrl: './x-ray-page.component.html',
+ standalone: false
})
export class XRayPageComponent {
public accountClusterRiskRules: PortfolioReportRule[];
+ public assetClassClusterRiskRules: PortfolioReportRule[];
public currencyClusterRiskRules: PortfolioReportRule[];
public economicMarketClusterRiskRules: PortfolioReportRule[];
public emergencyFundRules: PortfolioReportRule[];
@@ -26,7 +28,8 @@ export class XRayPageComponent {
public hasImpersonationId: boolean;
public hasPermissionToUpdateUserSettings: boolean;
public inactiveRules: PortfolioReportRule[];
- public isLoadingPortfolioReport = false;
+ public isLoading = false;
+ public statistics: PortfolioReportResponse['statistics'];
public user: User;
private unsubscribeSubject = new Subject();
@@ -87,56 +90,58 @@ export class XRayPageComponent {
}
private initializePortfolioReport() {
- this.isLoadingPortfolioReport = true;
+ this.isLoading = true;
this.dataService
.fetchPortfolioReport()
.pipe(takeUntil(this.unsubscribeSubject))
- .subscribe((portfolioReport) => {
- this.inactiveRules = this.mergeInactiveRules(portfolioReport);
+ .subscribe(({ rules, statistics }) => {
+ this.inactiveRules = this.mergeInactiveRules(rules);
+ this.statistics = statistics;
this.accountClusterRiskRules =
- portfolioReport.rules['accountClusterRisk']?.filter(
- ({ isActive }) => {
- return isActive;
- }
- ) ?? null;
+ rules['accountClusterRisk']?.filter(({ isActive }) => {
+ return isActive;
+ }) ?? null;
+
+ this.assetClassClusterRiskRules =
+ rules['assetClassClusterRisk']?.filter(({ isActive }) => {
+ return isActive;
+ }) ?? null;
this.currencyClusterRiskRules =
- portfolioReport.rules['currencyClusterRisk']?.filter(
- ({ isActive }) => {
- return isActive;
- }
- ) ?? null;
+ rules['currencyClusterRisk']?.filter(({ isActive }) => {
+ return isActive;
+ }) ?? null;
this.economicMarketClusterRiskRules =
- portfolioReport.rules['economicMarketClusterRisk']?.filter(
- ({ isActive }) => {
- return isActive;
- }
- ) ?? null;
+ rules['economicMarketClusterRisk']?.filter(({ isActive }) => {
+ return isActive;
+ }) ?? null;
this.emergencyFundRules =
- portfolioReport.rules['emergencyFund']?.filter(({ isActive }) => {
+ rules['emergencyFund']?.filter(({ isActive }) => {
return isActive;
}) ?? null;
this.feeRules =
- portfolioReport.rules['fees']?.filter(({ isActive }) => {
+ rules['fees']?.filter(({ isActive }) => {
return isActive;
}) ?? null;
- this.isLoadingPortfolioReport = false;
+ this.isLoading = false;
this.changeDetectorRef.markForCheck();
});
}
- private mergeInactiveRules(report: PortfolioReport): PortfolioReportRule[] {
+ private mergeInactiveRules(
+ rules: PortfolioReportResponse['rules']
+ ): PortfolioReportRule[] {
let inactiveRules: PortfolioReportRule[] = [];
- for (const category in report.rules) {
- const rulesArray = report.rules[category];
+ for (const category in rules) {
+ const rulesArray = rules[category] || [];
inactiveRules = inactiveRules.concat(
rulesArray.filter(({ isActive }) => {
diff --git a/apps/client/src/app/pages/pricing/pricing-page.component.ts b/apps/client/src/app/pages/pricing/pricing-page.component.ts
index f86a75904..62e2bec0b 100644
--- a/apps/client/src/app/pages/pricing/pricing-page.component.ts
+++ b/apps/client/src/app/pages/pricing/pricing-page.component.ts
@@ -15,7 +15,8 @@ import { catchError, switchMap, takeUntil } from 'rxjs/operators';
host: { class: 'page' },
selector: 'gf-pricing-page',
styleUrls: ['./pricing-page.scss'],
- templateUrl: './pricing-page.html'
+ templateUrl: './pricing-page.html',
+ standalone: false
})
export class PricingPageComponent implements OnDestroy, OnInit {
public baseCurrency: string;
@@ -33,6 +34,7 @@ export class PricingPageComponent implements OnDestroy, OnInit {
'DATA_IMPORT_AND_EXPORT_TOOLTIP_PREMIUM'
);
public isLoggedIn: boolean;
+ public label: string;
public price: number;
public priceId: string;
public professionalDataProviderTooltipPremium = translate(
@@ -58,6 +60,7 @@ export class PricingPageComponent implements OnDestroy, OnInit {
this.coupon = subscriptionOffers?.default?.coupon;
this.durationExtension = subscriptionOffers?.default?.durationExtension;
+ this.label = subscriptionOffers?.default?.label;
this.price = subscriptionOffers?.default?.price;
this.userService.stateChanged
@@ -79,6 +82,8 @@ export class PricingPageComponent implements OnDestroy, OnInit {
subscriptionOffers?.[
this.user?.subscription?.offer
]?.durationExtension;
+ this.label =
+ subscriptionOffers?.[this.user?.subscription?.offer]?.label;
this.price =
subscriptionOffers?.[this.user?.subscription?.offer]?.price;
this.priceId =
diff --git a/apps/client/src/app/pages/pricing/pricing-page.html b/apps/client/src/app/pages/pricing/pricing-page.html
index 605ad5d2e..3124d99b1 100644
--- a/apps/client/src/app/pages/pricing/pricing-page.html
+++ b/apps/client/src/app/pages/pricing/pricing-page.html
@@ -179,6 +179,11 @@
[ngClass]="{ active: user?.subscription?.type === 'Premium' }"
>
+ @if (label) {
+
+ {{ label }}
+
+ }
diff --git a/apps/client/src/app/pages/pricing/pricing-page.scss b/apps/client/src/app/pages/pricing/pricing-page.scss
index ad8e97b19..c92ca364f 100644
--- a/apps/client/src/app/pages/pricing/pricing-page.scss
+++ b/apps/client/src/app/pages/pricing/pricing-page.scss
@@ -23,6 +23,12 @@
ion-icon[name='checkmark-circle-outline'] {
color: rgba(var(--palette-primary-500), 1);
}
+
+ .badge-container {
+ left: 0;
+ right: 0;
+ top: 0;
+ }
}
}
diff --git a/apps/client/src/app/pages/public/public-page.component.ts b/apps/client/src/app/pages/public/public-page.component.ts
index 3dbce23ec..b343a6e01 100644
--- a/apps/client/src/app/pages/public/public-page.component.ts
+++ b/apps/client/src/app/pages/public/public-page.component.ts
@@ -20,7 +20,8 @@ import { catchError, takeUntil } from 'rxjs/operators';
host: { class: 'page' },
selector: 'gf-public-page',
styleUrls: ['./public-page.scss'],
- templateUrl: './public-page.html'
+ templateUrl: './public-page.html',
+ standalone: false
})
export class PublicPageComponent implements OnInit {
public continents: {
diff --git a/apps/client/src/app/pages/register/register-page.component.ts b/apps/client/src/app/pages/register/register-page.component.ts
index b7e5757c6..86490688b 100644
--- a/apps/client/src/app/pages/register/register-page.component.ts
+++ b/apps/client/src/app/pages/register/register-page.component.ts
@@ -18,7 +18,8 @@ import { ShowAccessTokenDialog } from './show-access-token-dialog/show-access-to
host: { class: 'page' },
selector: 'gf-register-page',
styleUrls: ['./register-page.scss'],
- templateUrl: './register-page.html'
+ templateUrl: './register-page.html',
+ standalone: false
})
export class RegisterPageComponent implements OnDestroy, OnInit {
public demoAuthToken: string;
diff --git a/apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.component.ts b/apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.component.ts
index 298cd278d..5aacbd457 100644
--- a/apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.component.ts
+++ b/apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.component.ts
@@ -5,7 +5,8 @@ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
selector: 'gf-show-access-token-dialog',
changeDetection: ChangeDetectionStrategy.OnPush,
styleUrls: ['./show-access-token-dialog.scss'],
- templateUrl: 'show-access-token-dialog.html'
+ templateUrl: 'show-access-token-dialog.html',
+ standalone: false
})
export class ShowAccessTokenDialog {
public isAgreeButtonDisabled = true;
diff --git a/apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts b/apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts
index c1a57d4cf..b6749b5cd 100644
--- a/apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts
+++ b/apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts
@@ -7,7 +7,8 @@ import { Component, OnInit } from '@angular/core';
@Component({
selector: 'gf-resources-glossary',
styleUrls: ['./resources-glossary.component.scss'],
- templateUrl: './resources-glossary.component.html'
+ templateUrl: './resources-glossary.component.html',
+ standalone: false
})
export class ResourcesGlossaryPageComponent implements OnInit {
public hasPermissionForSubscription: boolean;
diff --git a/apps/client/src/app/pages/resources/guides/resources-guides.component.ts b/apps/client/src/app/pages/resources/guides/resources-guides.component.ts
index eebda3103..ddba58e69 100644
--- a/apps/client/src/app/pages/resources/guides/resources-guides.component.ts
+++ b/apps/client/src/app/pages/resources/guides/resources-guides.component.ts
@@ -3,6 +3,7 @@ import { Component } from '@angular/core';
@Component({
selector: 'gf-resources-guides',
styleUrls: ['./resources-guides.component.scss'],
- templateUrl: './resources-guides.component.html'
+ templateUrl: './resources-guides.component.html',
+ standalone: false
})
export class ResourcesGuidesComponent {}
diff --git a/apps/client/src/app/pages/resources/markets/resources-markets.component.ts b/apps/client/src/app/pages/resources/markets/resources-markets.component.ts
index 79c185959..a188e3a94 100644
--- a/apps/client/src/app/pages/resources/markets/resources-markets.component.ts
+++ b/apps/client/src/app/pages/resources/markets/resources-markets.component.ts
@@ -3,6 +3,7 @@ import { Component } from '@angular/core';
@Component({
selector: 'gf-resources-markets',
styleUrls: ['./resources-markets.component.scss'],
- templateUrl: './resources-markets.component.html'
+ templateUrl: './resources-markets.component.html',
+ standalone: false
})
export class ResourcesMarketsComponent {}
diff --git a/apps/client/src/app/pages/resources/overview/resources-overview.component.ts b/apps/client/src/app/pages/resources/overview/resources-overview.component.ts
index 6e7a5e2a8..f95e78a26 100644
--- a/apps/client/src/app/pages/resources/overview/resources-overview.component.ts
+++ b/apps/client/src/app/pages/resources/overview/resources-overview.component.ts
@@ -3,7 +3,8 @@ import { Component } from '@angular/core';
@Component({
selector: 'gf-resources-overview',
styleUrls: ['./resources-overview.component.scss'],
- templateUrl: './resources-overview.component.html'
+ templateUrl: './resources-overview.component.html',
+ standalone: false
})
export class ResourcesOverviewComponent {
public overviewItems = [
diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts
index cadc62563..c9c0aa044 100644
--- a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts
+++ b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts
@@ -7,7 +7,8 @@ import { Subject } from 'rxjs';
host: { class: 'page' },
selector: 'gf-personal-finance-tools-page',
styleUrls: ['./personal-finance-tools-page.scss'],
- templateUrl: './personal-finance-tools-page.html'
+ templateUrl: './personal-finance-tools-page.html',
+ standalone: false
})
export class PersonalFinanceToolsPageComponent implements OnDestroy {
public pathAlternativeTo = $localize`open-source-alternative-to` + '-';
diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
index 39dbc4813..3a0ec4ffb 100644
--- a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+++ b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
@@ -12,7 +12,6 @@ import { ActivatedRoute, RouterModule } from '@angular/router';
host: { class: 'page' },
imports: [CommonModule, MatButtonModule, RouterModule],
selector: 'gf-product-page',
- standalone: true,
styleUrls: ['./product-page.scss'],
templateUrl: './product-page.html'
})
diff --git a/apps/client/src/app/pages/resources/resources-page.component.ts b/apps/client/src/app/pages/resources/resources-page.component.ts
index d900a38ad..d0534417d 100644
--- a/apps/client/src/app/pages/resources/resources-page.component.ts
+++ b/apps/client/src/app/pages/resources/resources-page.component.ts
@@ -6,7 +6,8 @@ import { Subject } from 'rxjs';
host: { class: 'page has-tabs' },
selector: 'gf-resources-page',
styleUrls: ['./resources-page.scss'],
- templateUrl: './resources-page.html'
+ templateUrl: './resources-page.html',
+ standalone: false
})
export class ResourcesPageComponent implements OnInit {
public deviceType: string;
diff --git a/apps/client/src/app/pages/user-account/user-account-page.component.ts b/apps/client/src/app/pages/user-account/user-account-page.component.ts
index f8d68baa6..d53465faa 100644
--- a/apps/client/src/app/pages/user-account/user-account-page.component.ts
+++ b/apps/client/src/app/pages/user-account/user-account-page.component.ts
@@ -9,7 +9,8 @@ import { Subject, takeUntil } from 'rxjs';
host: { class: 'page has-tabs' },
selector: 'gf-user-account-page',
styleUrls: ['./user-account-page.scss'],
- templateUrl: './user-account-page.html'
+ templateUrl: './user-account-page.html',
+ standalone: false
})
export class UserAccountPageComponent implements OnDestroy, OnInit {
public deviceType: string;
@@ -42,7 +43,7 @@ export class UserAccountPageComponent implements OnDestroy, OnInit {
showCondition: !!this.user?.subscription
},
{
- iconName: 'share-social-outline',
+ iconName: 'key-outline',
label: $localize`Access`,
path: ['/account', 'access']
}
diff --git a/apps/client/src/app/pages/webauthn/webauthn-page.component.ts b/apps/client/src/app/pages/webauthn/webauthn-page.component.ts
index 41860014a..74631eeca 100644
--- a/apps/client/src/app/pages/webauthn/webauthn-page.component.ts
+++ b/apps/client/src/app/pages/webauthn/webauthn-page.component.ts
@@ -13,7 +13,6 @@ import { takeUntil } from 'rxjs/operators';
host: { class: 'page' },
imports: [GfLogoComponent, MatButtonModule, MatProgressSpinnerModule],
selector: 'gf-webauthn-page',
- standalone: true,
styleUrls: ['./webauthn-page.scss'],
templateUrl: './webauthn-page.html'
})
@@ -22,7 +21,7 @@ export class GfWebauthnPageComponent implements OnDestroy, OnInit {
private unsubscribeSubject = new Subject();
- constructor(
+ public constructor(
private changeDetectorRef: ChangeDetectorRef,
private router: Router,
private tokenStorageService: TokenStorageService,
diff --git a/apps/client/src/app/pages/zen/zen-page.component.ts b/apps/client/src/app/pages/zen/zen-page.component.ts
index 511e2656d..c39cecccd 100644
--- a/apps/client/src/app/pages/zen/zen-page.component.ts
+++ b/apps/client/src/app/pages/zen/zen-page.component.ts
@@ -10,7 +10,8 @@ import { takeUntil } from 'rxjs/operators';
host: { class: 'page has-tabs' },
selector: 'gf-zen-page',
styleUrls: ['./zen-page.scss'],
- templateUrl: './zen-page.html'
+ templateUrl: './zen-page.html',
+ standalone: false
})
export class ZenPageComponent implements OnDestroy, OnInit {
public deviceType: string;
diff --git a/apps/client/src/app/pipes/symbol/symbol.pipe.ts b/apps/client/src/app/pipes/symbol/symbol.pipe.ts
index 7e77339f6..2b30d1041 100644
--- a/apps/client/src/app/pipes/symbol/symbol.pipe.ts
+++ b/apps/client/src/app/pipes/symbol/symbol.pipe.ts
@@ -2,7 +2,10 @@ import { prettifySymbol } from '@ghostfolio/common/helper';
import { Pipe, PipeTransform } from '@angular/core';
-@Pipe({ name: 'gfSymbol' })
+@Pipe({
+ name: 'gfSymbol',
+ standalone: false
+})
export class SymbolPipe implements PipeTransform {
public transform(aSymbol: string) {
return prettifySymbol(aSymbol);
diff --git a/apps/client/src/app/services/admin.service.ts b/apps/client/src/app/services/admin.service.ts
index 8142b5a47..715ec0f78 100644
--- a/apps/client/src/app/services/admin.service.ts
+++ b/apps/client/src/app/services/admin.service.ts
@@ -1,30 +1,36 @@
import { UpdateAssetProfileDto } from '@ghostfolio/api/app/admin/update-asset-profile.dto';
-import { UpdateBulkMarketDataDto } from '@ghostfolio/api/app/admin/update-bulk-market-data.dto';
import { CreatePlatformDto } from '@ghostfolio/api/app/platform/create-platform.dto';
import { UpdatePlatformDto } from '@ghostfolio/api/app/platform/update-platform.dto';
import { CreateTagDto } from '@ghostfolio/api/app/tag/create-tag.dto';
import { UpdateTagDto } from '@ghostfolio/api/app/tag/update-tag.dto';
import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces';
+import {
+ HEADER_KEY_SKIP_INTERCEPTOR,
+ HEADER_KEY_TOKEN,
+ PROPERTY_API_KEY_GHOSTFOLIO
+} from '@ghostfolio/common/config';
+import { DEFAULT_PAGE_SIZE } from '@ghostfolio/common/config';
import { DATE_FORMAT } from '@ghostfolio/common/helper';
import {
AssetProfileIdentifier,
AdminData,
AdminJobs,
AdminMarketData,
- AdminMarketDataDetails,
AdminUsers,
+ DataProviderGhostfolioStatusResponse,
EnhancedSymbolProfile,
Filter
} from '@ghostfolio/common/interfaces';
-import { HttpClient, HttpParams } from '@angular/common/http';
+import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { SortDirection } from '@angular/material/sort';
import { DataSource, MarketData, Platform, Tag } from '@prisma/client';
import { JobStatus } from 'bull';
-import { format, parseISO } from 'date-fns';
-import { Observable, map } from 'rxjs';
+import { format } from 'date-fns';
+import { switchMap } from 'rxjs';
+import { environment } from '../../environments/environment';
import { DataService } from './data.service';
@Injectable({
@@ -117,23 +123,20 @@ export class AdminService {
});
}
- public fetchAdminMarketDataBySymbol({
- dataSource,
- symbol
- }: {
- dataSource: DataSource;
- symbol: string;
- }): Observable {
- return this.http
- .get(`/api/v1/admin/market-data/${dataSource}/${symbol}`)
- .pipe(
- map((data) => {
- for (const item of data.marketData) {
- item.date = parseISO(item.date);
- }
- return data;
- })
- );
+ public fetchGhostfolioDataProviderStatus() {
+ return this.fetchAdminData().pipe(
+ switchMap(({ settings }) => {
+ const headers = new HttpHeaders({
+ [HEADER_KEY_SKIP_INTERCEPTOR]: 'true',
+ [HEADER_KEY_TOKEN]: `Api-Key ${settings[PROPERTY_API_KEY_GHOSTFOLIO]}`
+ });
+
+ return this.http.get(
+ `${environment.production ? 'https://ghostfol.io' : ''}/api/v2/data-providers/ghostfolio/status`,
+ { headers }
+ );
+ })
+ );
}
public fetchJobs({ status }: { status?: JobStatus[] }) {
@@ -156,8 +159,19 @@ export class AdminService {
return this.http.get('/api/v1/tag');
}
- public fetchUsers() {
- return this.http.get('/api/v1/admin/user');
+ public fetchUsers({
+ skip,
+ take = DEFAULT_PAGE_SIZE
+ }: {
+ skip?: number;
+ take?: number;
+ }) {
+ let params = new HttpParams();
+
+ params = params.append('skip', skip);
+ params = params.append('take', take);
+
+ return this.http.get('/api/v1/admin/user', { params });
}
public gather7Days() {
@@ -267,20 +281,6 @@ export class AdminService {
);
}
- public postMarketData({
- dataSource,
- marketData,
- symbol
- }: {
- dataSource: DataSource;
- marketData: UpdateBulkMarketDataDto;
- symbol: string;
- }) {
- const url = `/api/v1/admin/market-data/${dataSource}/${symbol}`;
-
- return this.http.post(url, marketData);
- }
-
public postPlatform(aPlatform: CreatePlatformDto) {
return this.http.post(`/api/v1/platform`, aPlatform);
}
diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts
index ac9772352..d72c02715 100644
--- a/apps/client/src/app/services/data.service.ts
+++ b/apps/client/src/app/services/data.service.ts
@@ -3,6 +3,7 @@ import { CreateAccountBalanceDto } from '@ghostfolio/api/app/account-balance/cre
import { CreateAccountDto } from '@ghostfolio/api/app/account/create-account.dto';
import { TransferBalanceDto } from '@ghostfolio/api/app/account/transfer-balance.dto';
import { UpdateAccountDto } from '@ghostfolio/api/app/account/update-account.dto';
+import { UpdateBulkMarketDataDto } from '@ghostfolio/api/app/admin/update-bulk-market-data.dto';
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
import {
Activities,
@@ -21,7 +22,8 @@ import {
Access,
AccountBalancesResponse,
Accounts,
- AdminMarketDataDetails,
+ AiPromptResponse,
+ ApiKeyResponse,
AssetProfileIdentifier,
BenchmarkMarketDataDetails,
BenchmarkResponse,
@@ -30,13 +32,14 @@ import {
ImportResponse,
InfoItem,
LookupResponse,
+ MarketDataDetailsResponse,
OAuthResponse,
PortfolioDetails,
PortfolioDividends,
PortfolioHoldingsResponse,
PortfolioInvestments,
PortfolioPerformanceResponse,
- PortfolioReport,
+ PortfolioReportResponse,
PublicPortfolioResponse,
User
} from '@ghostfolio/common/interfaces';
@@ -50,6 +53,7 @@ import { SortDirection } from '@angular/material/sort';
import {
AccountBalance,
DataSource,
+ MarketData,
Order as OrderModel,
Tag
} from '@prisma/client';
@@ -289,7 +293,7 @@ export class DataService {
public deleteActivities({ filters }) {
const params = this.buildFiltersAsQueryParams({ filters });
- return this.http.delete(`/api/v1/order`, { params });
+ return this.http.delete('/api/v1/order', { params });
}
public deleteActivity(aId: string) {
@@ -315,7 +319,7 @@ export class DataService {
public fetchAsset({
dataSource,
symbol
- }: AssetProfileIdentifier): Observable {
+ }: AssetProfileIdentifier): Observable {
return this.http.get(`/api/v1/asset/${dataSource}/${symbol}`).pipe(
map((data) => {
for (const item of data.marketData) {
@@ -430,6 +434,25 @@ export class DataService {
);
}
+ public fetchMarketDataBySymbol({
+ dataSource,
+ symbol
+ }: {
+ dataSource: DataSource;
+ symbol: string;
+ }): Observable {
+ return this.http
+ .get(`/api/v1/market-data/${dataSource}/${symbol}`)
+ .pipe(
+ map((data) => {
+ for (const item of data.marketData) {
+ item.date = parseISO(item.date);
+ }
+ return data;
+ })
+ );
+ }
+
public fetchSymbolItem({
dataSource,
includeHistoricalData,
@@ -623,7 +646,11 @@ export class DataService {
}
public fetchPortfolioReport() {
- return this.http.get('/api/v1/portfolio/report');
+ return this.http.get('/api/v1/portfolio/report');
+ }
+
+ public fetchPrompt() {
+ return this.http.get('/api/v1/ai/prompt');
}
public fetchPublicPortfolio(aAccessId: string) {
@@ -647,36 +674,54 @@ export class DataService {
}
public loginAnonymous(accessToken: string) {
- return this.http.post(`/api/v1/auth/anonymous`, {
+ return this.http.post('/api/v1/auth/anonymous', {
accessToken
});
}
public postAccess(aAccess: CreateAccessDto) {
- return this.http.post(`/api/v1/access`, aAccess);
+ return this.http.post('/api/v1/access', aAccess);
}
public postAccount(aAccount: CreateAccountDto) {
- return this.http.post(`/api/v1/account`, aAccount);
+ return this.http.post('/api/v1/account', aAccount);
}
public postAccountBalance(aAccountBalance: CreateAccountBalanceDto) {
return this.http.post(
- `/api/v1/account-balance`,
+ '/api/v1/account-balance',
aAccountBalance
);
}
+ public postApiKey() {
+ return this.http.post('/api/v1/api-keys', {});
+ }
+
public postBenchmark(benchmark: AssetProfileIdentifier) {
- return this.http.post(`/api/v1/benchmark`, benchmark);
+ return this.http.post('/api/v1/benchmark', benchmark);
+ }
+
+ public postMarketData({
+ dataSource,
+ marketData,
+ symbol
+ }: {
+ dataSource: DataSource;
+ marketData: UpdateBulkMarketDataDto;
+ symbol: string;
+ }) {
+ const url = `/api/v1/market-data/${dataSource}/${symbol}`;
+
+ return this.http.post(url, marketData);
}
public postOrder(aOrder: CreateOrderDto) {
- return this.http.post(`/api/v1/order`, aOrder);
+ return this.http.post('/api/v1/order', aOrder);
}
public postUser() {
- return this.http.post(`/api/v1/user`, {});
+ return this.http.post('/api/v1/user', {});
}
public putAccount(aAccount: UpdateAccountDto) {
@@ -703,7 +748,7 @@ export class DataService {
}
public putUserSetting(aData: UpdateUserSettingDto) {
- return this.http.put(`/api/v1/user/setting`, aData);
+ return this.http.put('/api/v1/user/setting', aData);
}
public redeemCoupon(couponCode: string) {
diff --git a/apps/client/src/assets/images/blog/black-weeks-2024.jpg b/apps/client/src/assets/images/blog/black-weeks-2024.jpg
new file mode 100644
index 000000000..c71827c5e
Binary files /dev/null and b/apps/client/src/assets/images/blog/black-weeks-2024.jpg differ
diff --git a/apps/client/src/assets/oss-friends.json b/apps/client/src/assets/oss-friends.json
index 0fe726510..c7d1be3e9 100644
--- a/apps/client/src/assets/oss-friends.json
+++ b/apps/client/src/assets/oss-friends.json
@@ -1,6 +1,11 @@
{
- "createdAt": "2024-08-31T00:00:00.000Z",
+ "createdAt": "2024-12-30T00:00:00.000Z",
"data": [
+ {
+ "name": "Activepieces",
+ "description": "Activepieces is an open source, no-code, AI-first business automation tool. Alternative to Zapier, Make and Workato.",
+ "href": "https://activepieces.com"
+ },
{
"name": "Aptabase",
"description": "Analytics for Apps, open source, simple and privacy-friendly. SDKs for Swift, React Native, Electron, Flutter and many others.",
@@ -53,7 +58,7 @@
},
{
"name": "Formbricks",
- "description": "Survey granular user segments at any point in the user journey. Gather up to 6x more insights with targeted micro-surveys. All open-source.",
+ "description": "Open source survey software and Experience Management Platform. Understand your customers, keep full control over your data.",
"href": "https://formbricks.com"
},
{
@@ -81,6 +86,11 @@
"description": "Open source, end-to-end encrypted platform that lets you securely manage secrets and configs across your team, devices, and infrastructure.",
"href": "https://infisical.com"
},
+ {
+ "name": "KeepHQ",
+ "description": "Keep is an open-source AIOps (AI for IT operations) platform",
+ "href": "https://www.keephq.dev"
+ },
{
"name": "Langfuse",
"description": "Open source LLM engineering platform. Debug, analyze and iterate together.",
diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf
index d4260f529..77636d9e8 100644
--- a/apps/client/src/locales/messages.ca.xlf
+++ b/apps/client/src/locales/messages.ca.xlf
@@ -6,7 +6,7 @@
Característiques
apps/client/src/app/app-routing.module.ts
- 65
+ 74
@@ -14,7 +14,7 @@
Internacionalització
apps/client/src/app/app-routing.module.ts
- 79
+ 88
@@ -22,11 +22,11 @@
Iniciar sessió
apps/client/src/app/app-routing.module.ts
- 141
+ 150
apps/client/src/app/components/header/header.component.ts
- 229
+ 231
@@ -58,7 +58,7 @@
Finances Personals
apps/client/src/app/app.component.html
- 56
+ 57
@@ -66,11 +66,11 @@
Mercats
apps/client/src/app/app.component.html
- 60
+ 61
apps/client/src/app/components/header/header.component.html
- 383
+ 398
apps/client/src/app/components/home-market/home-market.html
@@ -86,7 +86,7 @@
Recursos
apps/client/src/app/app.component.html
- 63
+ 64
apps/client/src/app/components/header/header.component.html
@@ -94,7 +94,7 @@
apps/client/src/app/components/header/header.component.html
- 286
+ 291
apps/client/src/app/pages/resources/overview/resources-overview.component.html
@@ -106,15 +106,15 @@
Sobre
apps/client/src/app/app.component.html
- 69
+ 70
apps/client/src/app/components/header/header.component.html
- 112
+ 117
apps/client/src/app/components/header/header.component.html
- 354
+ 364
@@ -122,7 +122,7 @@
Blog
apps/client/src/app/app.component.html
- 72
+ 73
apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html
@@ -204,6 +204,10 @@
apps/client/src/app/pages/blog/2024/09/hacktoberfest-2024/hacktoberfest-2024-page.html
187
+
+ apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.html
+ 167
+
apps/client/src/app/pages/blog/blog-page.html
5
@@ -214,7 +218,7 @@
Registre de canvis
apps/client/src/app/app.component.html
- 76
+ 77
apps/client/src/app/pages/about/changelog/changelog-page.html
@@ -226,11 +230,11 @@
Característiques
apps/client/src/app/app.component.html
- 78
+ 79
apps/client/src/app/components/header/header.component.html
- 341
+ 351
apps/client/src/app/pages/features/features-page.html
@@ -242,7 +246,7 @@
Preguntes Freqüents (FAQ)
apps/client/src/app/app.component.html
- 82
+ 83
apps/client/src/app/pages/about/overview/about-overview-page.html
@@ -254,7 +258,7 @@
Llicències
apps/client/src/app/app.component.html
- 87
+ 88
apps/client/src/app/pages/about/license/license-page.html
@@ -266,19 +270,19 @@
Preu
apps/client/src/app/app.component.html
- 96
+ 97
apps/client/src/app/components/header/header.component.html
- 98
+ 99
apps/client/src/app/components/header/header.component.html
- 297
+ 303
apps/client/src/app/components/header/header.component.html
- 368
+ 379
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
@@ -290,7 +294,7 @@
Política de privacitat
apps/client/src/app/app.component.html
- 102
+ 103
apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html
@@ -302,7 +306,7 @@
Comunitat
apps/client/src/app/app.component.html
- 120
+ 121
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -330,19 +334,23 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 105
+ 104
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 110
+ 108
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 114
+ 112
+
+
+ apps/client/src/app/components/user-account-settings/user-account-settings.html
+ 117
apps/client/src/app/pages/features/features-page.html
- 259
+ 260
@@ -350,7 +358,7 @@
El risc d’assumir pèrdues en les inversions és substancial. No és recomanable invertir diners que pugui necessitar a curt termini.
apps/client/src/app/app.component.html
- 199
+ 205
@@ -359,27 +367,27 @@
snake-case
apps/client/src/app/app.component.ts
- 63
+ 65
apps/client/src/app/app.component.ts
- 65
+ 67
apps/client/src/app/app.component.ts
- 69
+ 71
apps/client/src/app/app.component.ts
- 73
+ 75
apps/client/src/app/components/header/header.component.ts
- 80
+ 82
apps/client/src/app/components/header/header.component.ts
- 85
+ 87
apps/client/src/app/core/paths.ts
@@ -387,59 +395,59 @@
apps/client/src/app/pages/about/about-page.component.ts
- 45
+ 46
apps/client/src/app/pages/about/about-page.component.ts
- 50
+ 51
apps/client/src/app/pages/about/about-page.component.ts
- 55
+ 56
apps/client/src/app/pages/about/about-page.component.ts
- 63
+ 64
apps/client/src/app/pages/about/about-page.component.ts
- 74
+ 75
apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.component.ts
- 14
+ 13
apps/client/src/app/pages/blog/2023/09/ghostfolio-2/ghostfolio-2-page.component.ts
- 13
+ 12
apps/client/src/app/pages/blog/2023/09/ghostfolio-2/ghostfolio-2-page.component.ts
- 15
+ 14
apps/client/src/app/pages/blog/2023/09/hacktoberfest-2023/hacktoberfest-2023-page.component.ts
- 13
+ 12
apps/client/src/app/pages/blog/2023/11/hacktoberfest-2023-debriefing/hacktoberfest-2023-debriefing-page.component.ts
- 13
+ 12
apps/client/src/app/pages/blog/2024/09/hacktoberfest-2024/hacktoberfest-2024-page.component.ts
- 13
+ 12
apps/client/src/app/pages/landing/landing-page.component.ts
- 26
+ 27
apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts
- 18
+ 19
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 24
+ 23
@@ -448,7 +456,7 @@
snake-case
apps/client/src/app/app.component.ts
- 70
+ 72
apps/client/src/app/core/paths.ts
@@ -456,7 +464,7 @@
apps/client/src/app/pages/about/about-page.component.ts
- 55
+ 56
@@ -465,7 +473,7 @@
snake-case
apps/client/src/app/app.component.ts
- 74
+ 76
apps/client/src/app/core/paths.ts
@@ -473,7 +481,7 @@
apps/client/src/app/pages/about/about-page.component.ts
- 63
+ 64
@@ -482,7 +490,7 @@
snake-case
apps/client/src/app/app.component.ts
- 76
+ 78
apps/client/src/app/core/paths.ts
@@ -490,23 +498,23 @@
apps/client/src/app/pages/about/overview/about-overview-page.component.ts
- 19
+ 20
apps/client/src/app/pages/faq/faq-page.component.ts
- 37
+ 38
apps/client/src/app/pages/faq/faq-page.component.ts
- 42
+ 43
apps/client/src/app/pages/faq/faq-page.component.ts
- 48
+ 49
apps/client/src/app/pages/resources/overview/resources-overview.component.ts
- 14
+ 15
@@ -515,15 +523,15 @@
snake-case
apps/client/src/app/app.component.ts
- 77
+ 79
apps/client/src/app/components/header/header.component.ts
- 81
+ 83
apps/client/src/app/components/header/header.component.ts
- 86
+ 88
apps/client/src/app/core/paths.ts
@@ -531,47 +539,51 @@
apps/client/src/app/pages/about/overview/about-overview-page.component.ts
- 20
+ 21
apps/client/src/app/pages/blog/2022/11/black-friday-2022/black-friday-2022-page.component.ts
- 15
+ 14
apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.component.ts
- 13
+ 12
apps/client/src/app/pages/blog/2023/05/unlock-your-financial-potential-with-ghostfolio/unlock-your-financial-potential-with-ghostfolio-page.component.ts
- 13
+ 12
apps/client/src/app/pages/blog/2023/07/exploring-the-path-to-fire/exploring-the-path-to-fire-page.component.ts
- 13
+ 12
apps/client/src/app/pages/blog/2023/09/ghostfolio-2/ghostfolio-2-page.component.ts
- 18
+ 17
apps/client/src/app/pages/blog/2023/11/black-week-2023/black-week-2023-page.component.ts
- 15
+ 14
apps/client/src/app/pages/blog/2023/11/hacktoberfest-2023-debriefing/hacktoberfest-2023-debriefing-page.component.ts
+ 13
+
+
+ apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts
14
apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts
- 14
+ 15
apps/client/src/app/pages/pricing/pricing-page.component.ts
- 39
+ 43
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 25
+ 24
@@ -580,15 +592,15 @@
snake-case
apps/client/src/app/app.component.ts
- 78
+ 80
apps/client/src/app/components/header/header.component.ts
- 82
+ 84
apps/client/src/app/components/header/header.component.ts
- 87
+ 89
apps/client/src/app/core/paths.ts
@@ -596,19 +608,19 @@
apps/client/src/app/pages/blog/2022/08/500-stars-on-github/500-stars-on-github-page.component.ts
- 13
+ 12
apps/client/src/app/pages/blog/2023/09/ghostfolio-2/ghostfolio-2-page.component.ts
- 19
+ 18
apps/client/src/app/pages/faq/saas/saas-page.component.ts
- 14
+ 15
apps/client/src/app/pages/resources/overview/resources-overview.component.ts
- 31
+ 32
apps/client/src/app/pages/resources/resources-page-routing.module.ts
@@ -621,27 +633,27 @@
snake-case
apps/client/src/app/app.component.ts
- 79
+ 81
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 48
+ 74
apps/client/src/app/components/header/header.component.ts
- 83
+ 85
apps/client/src/app/components/header/header.component.ts
- 88
+ 90
apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts
- 16
+ 17
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 38
+ 43
apps/client/src/app/core/http-response.interceptor.ts
@@ -653,39 +665,43 @@
apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.component.ts
- 13
+ 12
apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.component.ts
- 13
+ 12
apps/client/src/app/pages/blog/2022/01/first-months-in-open-source/first-months-in-open-source-page.component.ts
- 13
+ 12
apps/client/src/app/pages/blog/2022/08/500-stars-on-github/500-stars-on-github-page.component.ts
- 14
+ 13
apps/client/src/app/pages/blog/2022/11/black-friday-2022/black-friday-2022-page.component.ts
- 16
+ 15
apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.component.ts
- 14
+ 13
apps/client/src/app/pages/blog/2023/11/black-week-2023/black-week-2023-page.component.ts
- 16
+ 15
- apps/client/src/app/pages/faq/saas/saas-page.component.ts
+ apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts
15
+
+ apps/client/src/app/pages/faq/saas/saas-page.component.ts
+ 16
+
libs/ui/src/lib/membership-card/membership-card.component.ts
- 25
+ 30
@@ -694,11 +710,11 @@
snake-case
apps/client/src/app/app.component.ts
- 80
+ 82
apps/client/src/app/components/header/header.component.ts
- 89
+ 91
apps/client/src/app/core/auth.guard.ts
@@ -710,19 +726,19 @@
apps/client/src/app/pages/faq/saas/saas-page.component.ts
- 16
+ 17
apps/client/src/app/pages/features/features-page.component.ts
- 29
+ 28
apps/client/src/app/pages/landing/landing-page.component.ts
- 27
+ 28
apps/client/src/app/pages/pricing/pricing-page.component.ts
- 40
+ 44
@@ -731,15 +747,15 @@
snake-case
apps/client/src/app/app.component.ts
- 81
+ 83
apps/client/src/app/components/header/header.component.ts
- 84
+ 86
apps/client/src/app/components/header/header.component.ts
- 90
+ 92
apps/client/src/app/core/paths.ts
@@ -747,47 +763,47 @@
apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.component.ts
- 14
+ 13
apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.component.ts
- 14
+ 13
apps/client/src/app/pages/blog/2022/07/how-do-i-get-my-finances-in-order/how-do-i-get-my-finances-in-order-page.component.ts
- 13
+ 12
apps/client/src/app/pages/blog/2023/05/unlock-your-financial-potential-with-ghostfolio/unlock-your-financial-potential-with-ghostfolio-page.component.ts
- 14
+ 13
apps/client/src/app/pages/features/features-page.component.ts
- 30
+ 29
apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts
- 16
+ 17
apps/client/src/app/pages/resources/overview/resources-overview.component.ts
- 21
+ 22
apps/client/src/app/pages/resources/overview/resources-overview.component.ts
- 30
+ 31
apps/client/src/app/pages/resources/overview/resources-overview.component.ts
- 39
+ 40
apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts
- 14
+ 15
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 27
+ 26
@@ -867,7 +883,7 @@
Realment vol revocar aquest accés?
apps/client/src/app/components/access-table/access-table.component.ts
- 67
+ 78
@@ -911,7 +927,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 153
+ 131
apps/client/src/app/components/admin-tag/admin-tag.component.html
@@ -1003,7 +1019,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 229
+ 207
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1039,7 +1055,11 @@
libs/ui/src/lib/top-holdings/top-holdings.component.html
- 12
+ 16
+
+
+ libs/ui/src/lib/top-holdings/top-holdings.component.html
+ 88
@@ -1059,11 +1079,11 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 133
+ 111
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 236
+ 214
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -1143,7 +1163,11 @@
libs/ui/src/lib/top-holdings/top-holdings.component.html
- 26
+ 25
+
+
+ libs/ui/src/lib/top-holdings/top-holdings.component.html
+ 102
@@ -1219,7 +1243,7 @@
Realment vol suprimir aquest compte?
apps/client/src/app/components/accounts-table/accounts-table.component.ts
- 106
+ 107
@@ -1271,7 +1295,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 118
+ 96
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -1295,7 +1319,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 128
+ 106
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -1386,17 +1410,13 @@
Details for
Detalls de
- apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html
+ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
2
Date
Data
-
- apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html
- 6
-
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
160
@@ -1409,14 +1429,14 @@
libs/ui/src/lib/activities-table/activities-table.component.html
170
+
+ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
+ 6
+
Market Price
Preu de Mercat
-
- apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html
- 26
-
apps/client/src/app/components/admin-market-data/admin-market-data.html
104
@@ -1425,17 +1445,17 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
98
+
+ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
+ 26
+
Cancel
Cancel·lar
-
- apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html
- 46
-
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 379
+ 357
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -1469,17 +1489,17 @@
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html
38
+
+ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
+ 46
+
Save
Guardar
-
- apps/client/src/app/components/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html
- 48
-
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 386
+ 364
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -1495,7 +1515,7 @@
apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html
- 83
+ 135
apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html
@@ -1509,13 +1529,17 @@
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
434
+
+ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
+ 48
+
Benchmarks
Punts de referència
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 80
+ 81
@@ -1523,7 +1547,7 @@
Divises
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 85
+ 86
@@ -1531,7 +1555,7 @@
ETFs sense País
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 90
+ 91
@@ -1539,7 +1563,7 @@
ETFs sense Sector
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 95
+ 96
@@ -1547,7 +1571,7 @@
Filtra per...
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 328
+ 329
@@ -1559,11 +1583,11 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 162
+ 140
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 246
+ 224
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -1573,6 +1597,10 @@
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
354
+
+ libs/ui/src/lib/assistant/assistant.html
+ 166
+
Asset Sub Class
@@ -1583,11 +1611,11 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 171
+ 149
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 259
+ 237
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -1607,7 +1635,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 144
+ 122
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -1634,8 +1662,8 @@
137
- apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 85
+ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html
+ 44
@@ -1718,8 +1746,8 @@
Oops! Could not parse historical data.
Oooh! No s’han pogut recopilar les dades históriques.
- apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 237
+ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts
+ 262
@@ -1727,7 +1755,7 @@
El preu de mercat actual és
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 345
+ 326
@@ -1749,10 +1777,6 @@
Import
Importar
-
- apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 111
-
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html
153
@@ -1761,13 +1785,17 @@
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html
186
+
+ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html
+ 70
+
Sector
Sector
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 188
+ 166
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -1779,7 +1807,7 @@
País
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 199
+ 177
apps/client/src/app/components/admin-users/admin-users.html
@@ -1795,11 +1823,11 @@
Sectors
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 205
+ 183
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 330
+ 308
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -1815,11 +1843,11 @@
Països
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 215
+ 193
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 341
+ 319
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -1831,7 +1859,7 @@
Referència
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 287
+ 265
@@ -1839,7 +1867,7 @@
Mapatge de Símbols
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 293
+ 271
@@ -1847,7 +1875,7 @@
Configuració del Proveïdor de Dades
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 305
+ 283
@@ -1855,7 +1883,7 @@
Prova
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 323
+ 301
@@ -1863,7 +1891,7 @@
Url
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 353
+ 331
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1879,7 +1907,7 @@
Notes
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 366
+ 344
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1931,7 +1959,7 @@
Si us plau, afegiu una divisa:
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 125
+ 126
@@ -1939,7 +1967,7 @@
no és una divisa vàlida!
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 136
+ 137
@@ -1947,7 +1975,7 @@
Està segur qeu vol eliminar aquest cupó?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 155
+ 156
@@ -1955,7 +1983,7 @@
Està segur que vol eliminar aquesta divisa?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 168
+ 169
@@ -1963,7 +1991,7 @@
Està segur que vol eliminar aquest missatge del sistema?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 181
+ 182
@@ -1971,7 +1999,7 @@
Està segur que vol depurar el cache?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 205
+ 206
@@ -1979,7 +2007,7 @@
Si us plau, afegeixi el seu missatge del sistema:
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 225
+ 226
@@ -2135,7 +2163,7 @@
apps/client/src/app/components/header/header.component.html
- 258
+ 263
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -2145,17 +2173,13 @@
apps/client/src/app/pages/accounts/accounts-page.html
4
-
- libs/ui/src/lib/assistant/assistant.html
- 107
-
Do you really want to delete this platform?
Està segur que vol eliminar aquesta plataforma?
apps/client/src/app/components/admin-platform/admin-platform.component.ts
- 86
+ 87
@@ -2179,7 +2203,7 @@
Plataformes
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 39
+ 81
@@ -2187,7 +2211,7 @@
Etiquetes
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 45
+ 87
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -2201,10 +2225,6 @@
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
383
-
- libs/ui/src/lib/assistant/assistant.html
- 127
-
Add Tag
@@ -2219,7 +2239,7 @@
Està segur que vol eliminar aquesta etiqueta?
apps/client/src/app/components/admin-tag/admin-tag.component.ts
- 86
+ 87
@@ -2243,7 +2263,7 @@
Està segur que vol eliminar aquest usuari?
apps/client/src/app/components/admin-users/admin-users.component.ts
- 125
+ 139
@@ -2275,7 +2295,7 @@
Última Solicitut
apps/client/src/app/components/admin-users/admin-users.html
- 181
+ 202
@@ -2283,7 +2303,7 @@
Actuar com un altre Usuari
apps/client/src/app/components/admin-users/admin-users.html
- 218
+ 239
@@ -2291,7 +2311,7 @@
Eliminar Usuari
apps/client/src/app/components/admin-users/admin-users.html
- 230
+ 251
@@ -2327,15 +2347,15 @@
Portfolio
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 116
+ 117
apps/client/src/app/pages/portfolio/portfolio-page-routing.module.ts
- 41
+ 46
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 95
+ 94
@@ -2343,7 +2363,7 @@
Punt de Referència
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 128
+ 129
@@ -2363,7 +2383,7 @@
apps/client/src/app/components/header/header.component.html
- 240
+ 245
@@ -2375,7 +2395,7 @@
apps/client/src/app/components/header/header.component.html
- 250
+ 255
@@ -2387,7 +2407,7 @@
apps/client/src/app/components/header/header.component.html
- 274
+ 279
@@ -2395,7 +2415,7 @@
Millora la teva Subscripció
apps/client/src/app/components/header/header.component.html
- 180
+ 185
apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html
@@ -2403,11 +2423,11 @@
apps/client/src/app/components/user-account-membership/user-account-membership.html
- 16
+ 18
apps/client/src/app/pages/pricing/pricing-page.html
- 278
+ 293
@@ -2415,15 +2435,15 @@
Renova la teva Subscripció
apps/client/src/app/components/header/header.component.html
- 186
+ 191
apps/client/src/app/components/user-account-membership/user-account-membership.html
- 22
+ 24
apps/client/src/app/pages/pricing/pricing-page.html
- 284
+ 299
@@ -2431,7 +2451,7 @@
Tu
apps/client/src/app/components/header/header.component.html
- 206
+ 211
@@ -2443,7 +2463,7 @@
apps/client/src/app/components/header/header.component.html
- 224
+ 229
@@ -2451,7 +2471,7 @@
El meu Ghostfolio
apps/client/src/app/components/header/header.component.html
- 265
+ 270
@@ -2459,7 +2479,7 @@
Sobre Ghostfolio
apps/client/src/app/components/header/header.component.html
- 306
+ 316
apps/client/src/app/pages/about/overview/about-overview-page.html
@@ -2471,7 +2491,7 @@
Iniciar Sessió
apps/client/src/app/components/header/header.component.html
- 397
+ 412
apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html
@@ -2483,7 +2503,7 @@
Primers Passos
apps/client/src/app/components/header/header.component.html
- 407
+ 422
@@ -2491,11 +2511,11 @@
Oooh! El testimoni de seguretat és incorrecte.
apps/client/src/app/components/header/header.component.ts
- 244
+ 246
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 157
+ 159
@@ -2602,8 +2622,8 @@
84
- apps/client/src/app/pages/portfolio/fire/fire-page.html
- 198
+ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
+ 154
@@ -2627,7 +2647,7 @@
en Actiiu
apps/client/src/app/components/home-holdings/home-holdings.component.ts
- 35
+ 36
@@ -2635,7 +2655,7 @@
Finalitzat
apps/client/src/app/components/home-holdings/home-holdings.component.ts
- 36
+ 37
@@ -2643,7 +2663,7 @@
Taula
apps/client/src/app/components/home-holdings/home-holdings.html
- 17
+ 16
@@ -2651,7 +2671,7 @@
Gràfic
apps/client/src/app/components/home-holdings/home-holdings.html
- 20
+ 19
@@ -2659,7 +2679,7 @@
Gestionar Activitats
apps/client/src/app/components/home-holdings/home-holdings.html
- 65
+ 63
@@ -2667,7 +2687,7 @@
Por
apps/client/src/app/components/home-market/home-market.component.ts
- 27
+ 28
libs/ui/src/lib/i18n.ts
@@ -2679,7 +2699,7 @@
Cobdícia
apps/client/src/app/components/home-market/home-market.component.ts
- 28
+ 29
libs/ui/src/lib/i18n.ts
@@ -2791,7 +2811,7 @@
Total Amount
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 140
+ 141
@@ -2799,7 +2819,7 @@
Savings Rate
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 199
+ 200
@@ -2811,7 +2831,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 251
+ 255
apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html
@@ -2821,6 +2841,10 @@
or
or
+
+ apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html
+ 36
+
apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html
31
@@ -2883,7 +2907,7 @@
Market data is delayed for
apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts
- 86
+ 87
@@ -2970,8 +2994,8 @@
89
- apps/client/src/app/pages/portfolio/fire/fire-page.html
- 122
+ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
+ 34
@@ -3042,12 +3066,12 @@
307
-
- Please enter the amount of your emergency fund:
- Please enter the amount of your emergency fund:
+
+ Please set the amount of your emergency fund.
+ Please set the amount of your emergency fund.
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts
- 53
+ 64
@@ -3079,7 +3103,7 @@
apps/client/src/app/pages/pricing/pricing-page.html
- 203
+ 218
@@ -3099,7 +3123,7 @@
apps/client/src/app/pages/pricing/pricing-page.html
- 207
+ 222
@@ -3115,7 +3139,7 @@
apps/client/src/app/pages/pricing/pricing-page.html
- 211
+ 226
@@ -3131,7 +3155,7 @@
apps/client/src/app/pages/pricing/pricing-page.html
- 215
+ 230
@@ -3143,7 +3167,7 @@
apps/client/src/app/pages/pricing/pricing-page.html
- 230
+ 245
@@ -3159,7 +3183,7 @@
apps/client/src/app/pages/pricing/pricing-page.html
- 242
+ 257
@@ -3183,11 +3207,11 @@
Today
apps/client/src/app/components/toggle/toggle.component.ts
- 21
+ 22
libs/ui/src/lib/assistant/assistant.component.ts
- 210
+ 220
@@ -3195,11 +3219,11 @@
YTD
apps/client/src/app/components/toggle/toggle.component.ts
- 22
+ 23
libs/ui/src/lib/assistant/assistant.component.ts
- 220
+ 230
@@ -3207,11 +3231,11 @@
1Y
apps/client/src/app/components/toggle/toggle.component.ts
- 23
+ 24
libs/ui/src/lib/assistant/assistant.component.ts
- 224
+ 234
@@ -3219,11 +3243,11 @@
5Y
apps/client/src/app/components/toggle/toggle.component.ts
- 24
+ 25
libs/ui/src/lib/assistant/assistant.component.ts
- 246
+ 256
@@ -3231,11 +3255,11 @@
Max
apps/client/src/app/components/toggle/toggle.component.ts
- 25
+ 26
libs/ui/src/lib/assistant/assistant.component.ts
- 249
+ 259
@@ -3243,7 +3267,7 @@
Oops! Could not grant access.
apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts
- 90
+ 91
@@ -3279,7 +3303,7 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 224
+ 228
@@ -3287,15 +3311,15 @@
Granted Access
apps/client/src/app/components/user-account-access/user-account-access.html
- 5
+ 7
-
- Please enter your coupon code:
- Please enter your coupon code:
+
+ Please enter your coupon code.
+ Please enter your coupon code.
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 115
+ 213
@@ -3303,7 +3327,7 @@
Could not redeem coupon code
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 125
+ 177
@@ -3311,7 +3335,7 @@
Coupon code has been redeemed
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 137
+ 190
@@ -3319,7 +3343,7 @@
Reload
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 138
+ 191
@@ -3327,11 +3351,11 @@
per year
apps/client/src/app/components/user-account-membership/user-account-membership.html
- 34
+ 36
apps/client/src/app/pages/pricing/pricing-page.html
- 264
+ 279
@@ -3339,7 +3363,7 @@
Try Premium
apps/client/src/app/components/user-account-membership/user-account-membership.html
- 41
+ 53
@@ -3347,7 +3371,7 @@
Redeem Coupon
apps/client/src/app/components/user-account-membership/user-account-membership.html
- 55
+ 67
@@ -3355,7 +3379,7 @@
Auto
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 38
+ 39
@@ -3363,7 +3387,7 @@
Do you really want to close your Ghostfolio account?
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 172
+ 174
@@ -3371,7 +3395,7 @@
Do you really want to remove this sign in method?
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 246
+ 248
@@ -3379,7 +3403,7 @@
Oops! There was an error setting up biometric authentication.
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 300
+ 302
@@ -3435,7 +3459,7 @@
Locale
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 123
+ 127
@@ -3443,7 +3467,7 @@
Date and number format
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 125
+ 129
@@ -3451,7 +3475,7 @@
Appearance
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 148
+ 152
@@ -3459,7 +3483,7 @@
Auto
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 162
+ 166
@@ -3467,7 +3491,7 @@
Light
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 163
+ 167
@@ -3475,7 +3499,7 @@
Dark
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 164
+ 168
@@ -3483,7 +3507,7 @@
Zen Mode
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 173
+ 177
apps/client/src/app/pages/features/features-page.html
@@ -3495,7 +3519,7 @@
Distraction-free experience for turbulent times
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 174
+ 178
@@ -3503,7 +3527,7 @@
Biometric Authentication
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 190
+ 194
@@ -3511,7 +3535,7 @@
Sign in with fingerprint
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 191
+ 195
@@ -3519,7 +3543,7 @@
Experimental Features
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 207
+ 211
@@ -3527,7 +3551,7 @@
Sneak peek at upcoming functionality
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 208
+ 212
@@ -3535,7 +3559,7 @@
Export Data
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 232
+ 236
@@ -3543,7 +3567,7 @@
Danger Zone
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 244
+ 248
@@ -3551,7 +3575,7 @@
Close Account
apps/client/src/app/components/user-account-settings/user-account-settings.html
- 279
+ 283
@@ -3575,7 +3599,7 @@
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
- 142
+ 143
@@ -3595,19 +3619,23 @@
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
- 140
+ 141
Okay
Okay
+
+ apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
+ 152
+
apps/client/src/app/core/http-response.interceptor.ts
81
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
- 143
+ 144
@@ -3627,7 +3655,7 @@
apps/client/src/app/pages/about/about-page.component.ts
- 44
+ 45
apps/client/src/app/pages/about/overview/about-overview-page-routing.module.ts
@@ -3639,7 +3667,7 @@
Changelog
apps/client/src/app/pages/about/about-page.component.ts
- 49
+ 50
apps/client/src/app/pages/about/changelog/changelog-page-routing.module.ts
@@ -3651,7 +3679,7 @@
License
apps/client/src/app/pages/about/about-page.component.ts
- 54
+ 55
apps/client/src/app/pages/about/license/license-page-routing.module.ts
@@ -3663,7 +3691,7 @@
Privacy Policy
apps/client/src/app/pages/about/about-page.component.ts
- 62
+ 63
apps/client/src/app/pages/about/privacy-policy/privacy-policy-page-routing.module.ts
@@ -3707,7 +3735,7 @@
Oops, cash balance transfer has failed.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 317
+ 318
@@ -3775,7 +3803,7 @@
apps/client/src/app/pages/admin/admin-page.component.ts
- 42
+ 43
@@ -3787,7 +3815,7 @@
apps/client/src/app/pages/admin/admin-page.component.ts
- 37
+ 38
@@ -3799,7 +3827,7 @@
apps/client/src/app/pages/admin/admin-page.component.ts
- 32
+ 33
apps/client/src/app/pages/user-account/user-account-page-routing.module.ts
@@ -3807,7 +3835,7 @@
apps/client/src/app/pages/user-account/user-account-page.component.ts
- 35
+ 36
@@ -3819,7 +3847,7 @@
apps/client/src/app/pages/admin/admin-page.component.ts
- 47
+ 48
@@ -3827,15 +3855,15 @@
Overview
apps/client/src/app/pages/admin/admin-page.component.ts
- 27
+ 28
apps/client/src/app/pages/home/home-page.component.ts
- 37
+ 38
apps/client/src/app/pages/resources/resources-page.component.ts
- 16
+ 17
apps/client/src/app/pages/zen/zen-page-routing.module.ts
@@ -3843,7 +3871,7 @@
apps/client/src/app/pages/zen/zen-page.component.ts
- 34
+ 35
@@ -3887,7 +3915,7 @@
General
apps/client/src/app/pages/faq/faq-page.component.ts
- 36
+ 37
@@ -3895,7 +3923,7 @@
Cloud
apps/client/src/app/pages/faq/faq-page.component.ts
- 41
+ 42
apps/client/src/app/pages/faq/saas/saas-page-routing.module.ts
@@ -3907,7 +3935,7 @@
Self-Hosting
apps/client/src/app/pages/faq/faq-page.component.ts
- 47
+ 48
apps/client/src/app/pages/faq/self-hosting/self-hosting-page-routing.module.ts
@@ -3919,7 +3947,7 @@
self-hosting
apps/client/src/app/pages/faq/faq-page.component.ts
- 48
+ 49
@@ -4059,7 +4087,7 @@
Open Source Software
apps/client/src/app/pages/features/features-page.html
- 278
+ 279
@@ -4067,7 +4095,7 @@
Get Started
apps/client/src/app/pages/features/features-page.html
- 303
+ 304
apps/client/src/app/pages/public/public-page.html
@@ -4087,11 +4115,11 @@
apps/client/src/app/pages/home/home-page.component.ts
- 42
+ 43
apps/client/src/app/pages/zen/zen-page.component.ts
- 39
+ 40
@@ -4103,7 +4131,7 @@
apps/client/src/app/pages/home/home-page.component.ts
- 47
+ 48
@@ -4115,7 +4143,7 @@
apps/client/src/app/pages/home/home-page.component.ts
- 52
+ 53
apps/client/src/app/pages/markets/markets-page-routing.module.ts
@@ -4127,7 +4155,7 @@
apps/client/src/app/pages/resources/resources-page.component.ts
- 26
+ 27
@@ -4187,7 +4215,7 @@
apps/client/src/app/pages/pricing/pricing-page.html
- 306
+ 329
@@ -4579,7 +4607,7 @@
apps/client/src/app/pages/portfolio/portfolio-page.component.ts
- 39
+ 40
@@ -4653,6 +4681,10 @@
libs/ui/src/lib/activities-table/activities-table.component.html
308
+
+ libs/ui/src/lib/assistant/assistant.html
+ 107
+
Update Cash Balance
@@ -4715,7 +4747,7 @@
Import Activities
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
- 45
+ 46
@@ -4723,7 +4755,7 @@
Import Dividends
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
- 86
+ 87
@@ -4731,7 +4763,7 @@
Importing data...
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
- 124
+ 125
@@ -4739,7 +4771,7 @@
Import has been completed
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
- 132
+ 133
@@ -4747,7 +4779,7 @@
Validating data...
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
- 238
+ 239
@@ -4773,6 +4805,10 @@
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html
32
+
+ libs/ui/src/lib/assistant/assistant.html
+ 127
+
Load Dividends
@@ -4835,7 +4871,7 @@
apps/client/src/app/pages/portfolio/portfolio-page.component.ts
- 44
+ 45
@@ -4975,7 +5011,7 @@
libs/ui/src/lib/top-holdings/top-holdings.component.html
- 88
+ 181
@@ -5027,7 +5063,7 @@
apps/client/src/app/pages/portfolio/portfolio-page.component.ts
- 34
+ 35
@@ -5035,7 +5071,7 @@
Dividend
apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
- 37
+ 41
libs/ui/src/lib/i18n.ts
@@ -5047,15 +5083,15 @@
Investment
apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
- 41
+ 46
apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
- 55
+ 60
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 89
+ 88
@@ -5063,7 +5099,7 @@
Monthly
apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
- 49
+ 54
@@ -5071,7 +5107,7 @@
Yearly
apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
- 50
+ 55
@@ -5087,7 +5123,7 @@
Absolute Asset Performance
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 28
+ 60
@@ -5095,7 +5131,7 @@
Asset Performance
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 49
+ 81
@@ -5103,7 +5139,7 @@
Absolute Currency Performance
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 71
+ 103
@@ -5111,7 +5147,7 @@
Currency Performance
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 95
+ 127
@@ -5119,7 +5155,7 @@
Absolute Net Performance
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 118
+ 150
@@ -5127,7 +5163,7 @@
Net Performance
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 137
+ 169
@@ -5135,7 +5171,7 @@
Top
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 165
+ 197
@@ -5143,7 +5179,7 @@
Bottom
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 214
+ 246
@@ -5151,7 +5187,7 @@
Portfolio Evolution
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 267
+ 299
@@ -5159,7 +5195,7 @@
Investment Timeline
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 294
+ 326
@@ -5167,7 +5203,7 @@
Current Streak
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 315
+ 347
@@ -5175,7 +5211,7 @@
Longest Streak
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 324
+ 356
@@ -5183,15 +5219,7 @@
Dividend Timeline
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 351
-
-
-
- FIRE
- FIRE
-
- apps/client/src/app/pages/portfolio/fire/fire-page-routing.module.ts
- 13
+ 383
@@ -5226,28 +5254,20 @@
67
-
- Ghostfolio X-ray uses static analysis to identify potential issues and risks in your portfolio.
- Ghostfolio X-ray uses static analysis to identify potential issues and risks in your portfolio.
-
- apps/client/src/app/pages/portfolio/fire/fire-page.html
- 111
-
-
Currency Cluster Risks
Currency Cluster Risks
- apps/client/src/app/pages/portfolio/fire/fire-page.html
- 141
+ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
+ 58
Account Cluster Risks
Account Cluster Risks
- apps/client/src/app/pages/portfolio/fire/fire-page.html
- 160
+ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
+ 106
@@ -5299,11 +5319,11 @@
apps/client/src/app/pages/pricing/pricing-page.html
- 129
+ 134
apps/client/src/app/pages/pricing/pricing-page.html
- 191
+ 206
@@ -5315,11 +5335,11 @@
apps/client/src/app/pages/pricing/pricing-page.html
- 133
+ 138
apps/client/src/app/pages/pricing/pricing-page.html
- 195
+ 210
@@ -5331,11 +5351,11 @@
apps/client/src/app/pages/pricing/pricing-page.html
- 137
+ 142
apps/client/src/app/pages/pricing/pricing-page.html
- 199
+ 214
@@ -5347,11 +5367,11 @@
apps/client/src/app/pages/pricing/pricing-page.html
- 141
+ 146
apps/client/src/app/pages/pricing/pricing-page.html
- 219
+ 234
@@ -5379,7 +5399,7 @@
apps/client/src/app/pages/pricing/pricing-page.html
- 153
+ 158
@@ -5387,7 +5407,7 @@
For new investors who are just getting started with trading.
apps/client/src/app/pages/pricing/pricing-page.html
- 123
+ 128
@@ -5395,11 +5415,11 @@
Fully managed Ghostfolio cloud offering.
apps/client/src/app/pages/pricing/pricing-page.html
- 152
+ 157
apps/client/src/app/pages/pricing/pricing-page.html
- 251
+ 266
@@ -5407,7 +5427,7 @@
For ambitious investors who need the full picture of their financial assets.
apps/client/src/app/pages/pricing/pricing-page.html
- 184
+ 199
@@ -5415,7 +5435,7 @@
Email and Chat Support
apps/client/src/app/pages/pricing/pricing-page.html
- 247
+ 262
@@ -5423,7 +5443,7 @@
One-time payment, no auto-renewal.
apps/client/src/app/pages/pricing/pricing-page.html
- 288
+ 303
@@ -5431,7 +5451,7 @@
It’s free.
apps/client/src/app/pages/pricing/pricing-page.html
- 309
+ 332
@@ -5539,7 +5559,7 @@
apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts
- 13
+ 14
@@ -5587,7 +5607,7 @@
Switzerland
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 60
+ 59
libs/ui/src/lib/i18n.ts
@@ -5599,7 +5619,7 @@
Global
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 61
+ 60
libs/ui/src/lib/i18n.ts
@@ -5879,7 +5899,7 @@
apps/client/src/app/pages/user-account/user-account-page.component.ts
- 40
+ 41
@@ -5891,7 +5911,7 @@
apps/client/src/app/pages/user-account/user-account-page.component.ts
- 46
+ 47
@@ -5931,7 +5951,7 @@
Do you really want to delete this account balance?
libs/ui/src/lib/account-balances/account-balances.component.ts
- 110
+ 109
@@ -6019,7 +6039,7 @@
Do you really want to delete these activities?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 219
+ 218
@@ -6027,7 +6047,7 @@
Do you really want to delete this activity?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 229
+ 228
@@ -6035,7 +6055,7 @@
Find holding...
libs/ui/src/lib/assistant/assistant.component.ts
- 139
+ 143
@@ -6043,7 +6063,7 @@
Week to date
libs/ui/src/lib/assistant/assistant.component.ts
- 212
+ 222
@@ -6051,7 +6071,7 @@
WTD
libs/ui/src/lib/assistant/assistant.component.ts
- 212
+ 222
@@ -6059,7 +6079,7 @@
Month to date
libs/ui/src/lib/assistant/assistant.component.ts
- 216
+ 226
@@ -6067,7 +6087,7 @@
MTD
libs/ui/src/lib/assistant/assistant.component.ts
- 216
+ 226
@@ -6075,7 +6095,7 @@
Year to date
libs/ui/src/lib/assistant/assistant.component.ts
- 220
+ 230
@@ -6083,7 +6103,7 @@
year
libs/ui/src/lib/assistant/assistant.component.ts
- 224
+ 234
@@ -6091,7 +6111,7 @@
years
libs/ui/src/lib/assistant/assistant.component.ts
- 246
+ 256
@@ -6122,20 +6142,12 @@
93
-
- Asset Classes
- Asset Classes
-
- libs/ui/src/lib/assistant/assistant.html
- 138
-
-
Reset Filters
Reset Filters
libs/ui/src/lib/assistant/assistant.html
- 157
+ 185
@@ -6143,7 +6155,7 @@
Apply Filters
libs/ui/src/lib/assistant/assistant.html
- 167
+ 195
@@ -6239,7 +6251,7 @@
Deposit
libs/ui/src/lib/fire-calculator/fire-calculator.component.ts
- 361
+ 360
@@ -6247,7 +6259,7 @@
Interest
libs/ui/src/lib/fire-calculator/fire-calculator.component.ts
- 371
+ 370
libs/ui/src/lib/i18n.ts
@@ -6259,7 +6271,7 @@
Savings
libs/ui/src/lib/fire-calculator/fire-calculator.component.ts
- 381
+ 380
@@ -6271,7 +6283,11 @@
libs/ui/src/lib/top-holdings/top-holdings.component.html
- 46
+ 40
+
+
+ libs/ui/src/lib/top-holdings/top-holdings.component.html
+ 116
@@ -6427,7 +6443,7 @@
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
- 403
+ 402
@@ -6707,15 +6723,19 @@
Membership
libs/ui/src/lib/membership-card/membership-card.component.html
- 18
+ 37
Valid until
Valid until
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 28
+
libs/ui/src/lib/membership-card/membership-card.component.html
- 23
+ 42
@@ -6731,11 +6751,11 @@
No data available
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
- 405
+ 404
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
- 418
+ 417
@@ -6743,7 +6763,7 @@
Show more
libs/ui/src/lib/top-holdings/top-holdings.component.html
- 81
+ 174
@@ -6751,7 +6771,7 @@
Alternative
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 83
+ 82
@@ -6759,7 +6779,7 @@
App
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 84
+ 83
@@ -6767,7 +6787,7 @@
Budgeting
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 85
+ 84
@@ -6775,7 +6795,7 @@
Community
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 86
+ 85
@@ -6783,7 +6803,7 @@
Family Office
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 87
+ 86
@@ -6791,7 +6811,7 @@
Investor
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 90
+ 89
@@ -6799,7 +6819,7 @@
Open Source
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 91
+ 90
@@ -6807,7 +6827,7 @@
Personal Finance
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 93
+ 92
@@ -6815,7 +6835,7 @@
Privacy
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 94
+ 93
@@ -6823,7 +6843,7 @@
Software
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 96
+ 95
@@ -6831,7 +6851,7 @@
Tool
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 97
+ 96
@@ -6839,7 +6859,7 @@
User Experience
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 98
+ 97
@@ -6847,7 +6867,7 @@
Wealth
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 99
+ 98
@@ -6855,7 +6875,7 @@
Wealth Management
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
- 100
+ 99
@@ -7007,7 +7027,7 @@
Error
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 336
+ 317
@@ -7030,8 +7050,8 @@
Inactive
Inactive
- apps/client/src/app/pages/portfolio/fire/fire-page.html
- 217
+ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
+ 173
@@ -7095,7 +7115,7 @@
Threshold Min
apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html
- 9
+ 54
@@ -7103,7 +7123,7 @@
Threshold Max
apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html
- 44
+ 92
@@ -7111,7 +7131,7 @@
Close
apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html
- 77
+ 129
@@ -7127,7 +7147,7 @@
No auto-renewal.
apps/client/src/app/components/user-account-membership/user-account-membership.html
- 62
+ 74
@@ -7303,7 +7323,7 @@
Oops! Could not find any assets.
libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html
- 37
+ 40
@@ -7314,20 +7334,12 @@
4
-
- NEW
- NEW
-
- apps/client/src/app/components/admin-settings/admin-settings.component.html
- 14
-
-
-
- Set API Key
- Set API Key
+
+ Set API key
+ Set API key
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 29
+ 70
@@ -7338,14 +7350,6 @@
23
-
- Notify me
- Notify me
-
- apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html
- 32
-
-
Get access to 100’000+ tickers from over 50 exchanges
Get access to 100’000+ tickers from over 50 exchanges
@@ -7378,14 +7382,6 @@
93
-
- Allocation Cluster Risks
- Allocation Cluster Risks
-
- apps/client/src/app/pages/portfolio/fire/fire-page.html
- 179
-
-
Glossary
Glossary
@@ -7395,7 +7391,7 @@
apps/client/src/app/pages/resources/resources-page.component.ts
- 31
+ 32
@@ -7407,7 +7403,7 @@
apps/client/src/app/pages/resources/resources-page.component.ts
- 21
+ 22
@@ -7416,7 +7412,7 @@
snake-case
apps/client/src/app/pages/resources/overview/resources-overview.component.ts
- 22
+ 23
apps/client/src/app/pages/resources/resources-page-routing.module.ts
@@ -7429,13 +7425,245 @@
snake-case
apps/client/src/app/pages/resources/overview/resources-overview.component.ts
- 40
+ 41
apps/client/src/app/pages/resources/resources-page-routing.module.ts
21
+
+ Threshold range
+ Threshold range
+
+ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html
+ 9
+
+
+
+ Ghostfolio X-ray uses static analysis to uncover potential issues and risks in your portfolio. Adjust the rules below and set custom thresholds to align with your personal investment strategy.
+ Ghostfolio X-ray uses static analysis to uncover potential issues and risks in your portfolio. Adjust the rules below and set custom thresholds to align with your personal investment strategy.
+
+ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
+ 5
+
+
+
+ Economic Market Cluster Risks
+ Economic Market Cluster Risks
+
+ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
+ 130
+
+
+
+ of
+ of
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 42
+
+
+
+ daily requests
+ daily requests
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 44
+
+
+
+ Remove API key
+ Remove API key
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 58
+
+
+
+ Do you really want to delete the API key?
+ Do you really want to delete the API key?
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.ts
+ 93
+
+
+
+ Please enter your Ghostfolio API key:
+ Please enter your Ghostfolio API key:
+
+ apps/client/src/app/pages/api/api-page.component.ts
+ 40
+
+
+
+ Notify me
+ Notify me
+
+ apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html
+ 32
+
+
+
+ I have an API key
+ I have an API key
+
+ apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html
+ 43
+
+
+
+ API Requests Today
+ API Requests Today
+
+ apps/client/src/app/components/admin-users/admin-users.html
+ 178
+
+
+
+ Could not generate an API key
+ Could not generate an API key
+
+ apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
+ 139
+
+
+
+ Set this API key in your self-hosted environment:
+ Set this API key in your self-hosted environment:
+
+ apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
+ 154
+
+
+
+ Ghostfolio Premium Data Provider API Key
+ Ghostfolio Premium Data Provider API Key
+
+ apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
+ 157
+
+
+
+ Do you really want to generate a new API key?
+ Do you really want to generate a new API key?
+
+ apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
+ 162
+
+
+
+ Tag
+ Tag
+
+ libs/ui/src/lib/assistant/assistant.html
+ 155
+
+
+
+ API Key
+ API Key
+
+ libs/ui/src/lib/membership-card/membership-card.component.html
+ 18
+
+
+
+ Generate Ghostfolio Premium Data Provider API key for self-hosted environments...
+ Generate Ghostfolio Premium Data Provider API key for self-hosted environments...
+
+ libs/ui/src/lib/membership-card/membership-card.component.html
+ 26
+
+
+
+ out of
+ out of
+
+ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
+ 22
+
+
+
+ rules align with your portfolio.
+ rules align with your portfolio.
+
+ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
+ 24
+
+
+
+ Save
+ Save
+
+ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts
+ 62
+
+
+
+ Asset Class Cluster Risks
+ Asset Class Cluster Risks
+
+ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
+ 82
+
+
+
+ Me
+ Me
+
+ apps/client/src/app/components/user-account-access/user-account-access.component.ts
+ 135
+
+
+
+ Received Access
+ Received Access
+
+ apps/client/src/app/components/user-account-access/user-account-access.html
+ 3
+
+
+
+ Please enter your Ghostfolio API key.
+ Please enter your Ghostfolio API key.
+
+ apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.component.ts
+ 59
+
+
+
+ AI prompt has been copied to the clipboard
+ AI prompt has been copied to the clipboard
+
+ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
+ 149
+
+
+
+ Copy AI prompt to clipboard
+ Copy AI prompt to clipboard
+
+ apps/client/src/app/pages/portfolio/analysis/analysis-page.html
+ 27
+
+
+
+ Link has been copied to the clipboard
+ Link has been copied to the clipboard
+
+ apps/client/src/app/components/access-table/access-table.component.ts
+ 64
+
+
+
+ Early Access
+ Early Access
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 16
+
+