diff --git a/.docs/GUIDE.md b/.docs/GUIDE.md new file mode 100644 index 000000000..688f0bcd6 --- /dev/null +++ b/.docs/GUIDE.md @@ -0,0 +1,110 @@ +# How to write Academy articles + +## High-level file structure + +![File Structure](./file_structure.png) + +All pages seen on the website are located inside `src/content/docs/`. +For example all metrics articles are located inside src/docs/metrics/, pages about +Sanbase are inside `src/docs/guides/sanbase/`, etc. + +This structure is very important for the visualization. It should be created inside the most appropriate directory, or if such directory is missing - create a new directory. + +## Article-level file structure + +When creating a new article, do the following steps: + +- Decide on the article title. For the purpose of the example let's choose 'Trading and Transaction Volume' +- Locate the most appropriate directory where the article +- Create a new folder named `trading-and-transaction-volume` inside it. This directory name is important + and should reflect the name of the article itself. Usually it is the `snake-case` version of the title. + This directory name is important as we'll use it when we create links to that article. +- Create an `index.mdx` file inside that directory. The name is important. This will be the main/index page of + the article. + +## Contents of the index.mdx file + +### Header + +Always start with the header structure, which looks like this. +Fields `title` and `datePublished` are mandatory. +`datePublished` field must not be update after article deploy. +Add field `dateModified` and write any changes thee instead. + +``` +--- +title: Trading and Transaction Volume +author: Santiment Team +datePublished: 2025-05-13 +--- +``` + +![Header fields](./title_and_date.jpg) + +The `title` and `dateModified` fields are displayed on the article page, as seen in the screenshot. + +The `title` field will be transformed to an h1 HTML tag in the final page. +One page should have one h1 tag, holding the title. In Markdown this is usually represented +as a line starting with `#`, like: + +`# Trading and Transaction Volume`. + +As this is done automatically by us by defining the title, we should **not** use `# title` anywhere in the article thereafter. + +Do not define the title second time with markdown! + +### Youtube Video + +If some video from our channel needs to be added, go to the youtube video and copy the `iframe` +that is produced when you click Share->Embed +![noborder](./embed_youtube_video_1.png) + +Paste the copied iframe right after the header definition, if you wish to have the video right after the title on the final page. + +### Subsections + +As our title is defined in the header, all main subsections are defined as: + +``` +## Title of subsection 1 +``` + +These subsections are shown as h2 titles in the HTML (smaller titles than the main title). +They are also shown in the right sidebar/map of the article. + +![noborder](./subsections.png) + +You can use `###`, `####`, etc. to further nest subsections. + +You should be consistent -- all top-level subsections should be `##` and the subsections of these subsections should +be `###`, and so on. + +### Links and images + +#### Links + +Markdown link syntax is: `[Link Text](Link URL)`. The link URL can be: + +- External (link to sanbase) -- the full URL must be provided. Example: `[Sanbase](https://app.santment.net)` +- Internal -- point to some other page of Academy. These paths are relative. Relative paths allow you to link to stage + pages on stage and to prod pages on prod. Do not use full paths when linking to other Academy pages! + + Example: `[NVT article](/metrics/nvt)`. The root of the relative path is the `/src/docs/` directory. + + Standard relative path syntax works: `./` points to the current directory and `../` points to the parent directory. + +The same rules apply to linking from other pages to your new article page. +If our example `Trading and Transaction Volume` article is located in the `Education and Use Cases` directory, then +the following syntax will create a link to our article: `[Trading and Transaction Volume](/education-and-use-cases/trading-and-transaction-volume/)` + +#### Images + +Markdown image syntax is `![noborder](Image path)`. + +In almost all cases the image file is located in the same directory as the `index.md` file. If the image `img.png` is located +in the same directory, then the following syntax will add it `![noborder](./img.png)`. The `./` is the above-mentioned way to point +to the current directory. + +Note: The `noborder` is Academy-specific and it removes borders from images. By default we prefer to not have borders. + +Prefer adding the images to the directory of your article instead of using images hosted on some other server. diff --git a/docs/embed_youtube_video_1.png b/.docs/embed_youtube_video_1.png similarity index 100% rename from docs/embed_youtube_video_1.png rename to .docs/embed_youtube_video_1.png diff --git a/docs/file_structure.png b/.docs/file_structure.png similarity index 100% rename from docs/file_structure.png rename to .docs/file_structure.png diff --git a/docs/navigation.png b/.docs/navigation.png similarity index 100% rename from docs/navigation.png rename to .docs/navigation.png diff --git a/docs/subsections.png b/.docs/subsections.png similarity index 100% rename from docs/subsections.png rename to .docs/subsections.png diff --git a/docs/title_and_date.jpg b/.docs/title_and_date.jpg similarity index 100% rename from docs/title_and_date.jpg rename to .docs/title_and_date.jpg diff --git a/.gitignore b/.gitignore index 80e2686ad..24f201b88 100644 --- a/.gitignore +++ b/.gitignore @@ -1,86 +1,36 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage +# build output +dist/ +public/ +public/pagefind/ -# nyc test coverage -.nyc_output +# generated types +.astro/ -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories +# dependencies node_modules/ -jspm_packages/ - -# Typescript v1 declaration files -typings/ -# Optional npm cache directory -.npm +#svelte +.svelte-kit -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* -# Output of 'npm pack' -*.tgz +# static +static/webkit +static/vendors +static/~partytown -# dotenv environment variables file +# environment variables .env +.env.production -# gatsby files -.cache/ -public - -# Mac files +# macOS-specific files .DS_Store -# Yarn -yarn-error.log -package-lock.json -.pnp/ -.pnp.js -# Yarn Integrity file -.yarn-integrity - +# jetbrains setting folder .idea/ -.tool-versions -.aider* - - -# web components - -svelte-widgets/.svelte-kit -svelte-widgets/static/webkit - -# mkcert - -local.santiment.net.pem -local.santiment.net-key.pem +mkcert diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..248ac2f2d --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +./src/content/docs/**/*.md +./src/content/docs/**/*.mdx diff --git a/.prettierrc b/.prettierrc index d27ac8ef1..570fed4ca 100644 --- a/.prettierrc +++ b/.prettierrc @@ -3,5 +3,37 @@ "semi": false, "singleQuote": true, "tabWidth": 2, - "trailingComma": "es5" + "trailingComma": "all", + "plugins": [ + "prettier-plugin-astro", + "prettier-plugin-svelte", + "@trivago/prettier-plugin-sort-imports", + "prettier-plugin-tailwindcss" + ], + "importOrder": [ + "^astro", + "^svelte", + "^san-webkit-next/(.*)$", + "^\\$layouts/(.*)$", + "^\\$components/(.*)$", + "^\\$modules/(.*)$", + "^\\$config/(.*)$", + "^[./]" + ], + "importOrderSeparation": true, + "importOrderSortSpecifiers": true, + "overrides": [ + { + "files": "*.astro", + "options": { + "parser": "astro" + } + }, + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ] } diff --git a/Dockerfile b/Dockerfile index f2a6492e3..5ea9ebfd5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,19 @@ -FROM debian:bullseye +FROM node:20-alpine AS base -RUN apt-get update && \ - apt-get install -y \ - python3 \ - python3-dev \ - python3-pip \ - build-essential \ - curl git +RUN apk add git +RUN npm install -g pnpm@8 -RUN curl -fsSL https://deb.nodesource.com/setup_16.x | bash - -RUN apt-get install -y nodejs +ENV NODE_ENV production WORKDIR /app -COPY ./ /app +COPY package.json pnpm-lock.yaml /app -ENV BACKEND_URL="globalThis.env?.BACKEND_URL" +RUN pnpm i --ignore-scripts --frozen-lockfile --prod --force -RUN npm install -g yarn --force && yarn install --production +FROM base AS builder +ARG BACKEND_URL -RUN yarn build +COPY . /app + +RUN pnpm build diff --git a/Jenkinsfile b/Jenkinsfile index ce2f5ae12..9a790b08d 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,15 +1,37 @@ -podTemplate(label: 'academy-builder', containers: [ - containerTemplate(name: 'docker', image: 'docker', ttyEnabled: true, command: 'cat', envVars: [ - envVar(key: 'DOCKER_HOST', value: 'tcp://docker-host-docker-host:2375') - ]) -]) { - node('academy-builder') { +@Library('podTemplateLib') +import net.santiment.utils.podTemplates + +properties([buildDiscarder(logRotator(artifactDaysToKeepStr: '30', artifactNumToKeepStr: '', daysToKeepStr: '30', numToKeepStr: ''))]) + +slaveTemplates = new podTemplates() + +slaveTemplates.dockerTemplate { label -> + node(label) { stage('Build') { container('docker') { def scmVars = checkout scm - def gitHead = scmVars.GIT_COMMIT.substring(0,7) - if (env.BRANCH_NAME == "master") { + if (env.BRANCH_NAME == "main") { + withCredentials([ + string( + credentialsId: 'SECRET_KEY_BASE', + variable: 'SECRET_KEY_BASE' + ), + string( + credentialsId: 'aws_account_id', + variable: 'aws_account_id' + ) + ]) { + def awsRegistry = "${env.aws_account_id}.dkr.ecr.eu-central-1.amazonaws.com" + docker.withRegistry("https://${awsRegistry}", "ecr:eu-central-1:ecr-credentials") { + sh "docker build --build-arg BACKEND_URL=https://api-stage.santiment.net -t ${awsRegistry}/academy:stage -t ${awsRegistry}/academy:${scmVars.GIT_COMMIT} ." + sh "docker push ${awsRegistry}/academy:stage" + sh "docker push ${awsRegistry}/academy:${scmVars.GIT_COMMIT}" + } + } + } + + if (env.BRANCH_NAME == "production") { withCredentials([ string( credentialsId: 'SECRET_KEY_BASE', @@ -22,8 +44,8 @@ podTemplate(label: 'academy-builder', containers: [ ]) { def awsRegistry = "${env.aws_account_id}.dkr.ecr.eu-central-1.amazonaws.com" docker.withRegistry("https://${awsRegistry}", "ecr:eu-central-1:ecr-credentials") { - sh "docker build -t ${awsRegistry}/academy:${env.BRANCH_NAME} -t ${awsRegistry}/academy:${scmVars.GIT_COMMIT} ." - sh "docker push ${awsRegistry}/academy:${env.BRANCH_NAME}" + sh "docker build --build-arg BACKEND_URL=https://api.santiment.net -t ${awsRegistry}/academy:production -t ${awsRegistry}/academy:${scmVars.GIT_COMMIT} ." + sh "docker push ${awsRegistry}/academy:production" sh "docker push ${awsRegistry}/academy:${scmVars.GIT_COMMIT}" } } diff --git a/Jenkinsfile-production-deploy b/Jenkinsfile-production-deploy new file mode 100644 index 000000000..cfdfbf68c --- /dev/null +++ b/Jenkinsfile-production-deploy @@ -0,0 +1,52 @@ +podTemplate(label: 'academy-production-deploy', nodeSelector: 'cpu.credits=no', containers: [ + containerTemplate(name: 'kubectl', image: 'lachlanevenson/k8s-kubectl:v1.25.4', command: 'cat', ttyEnabled: true), + containerTemplate(name: 'docker', image: 'docker', ttyEnabled: true, command: 'cat', envVars: [ + envVar(key: 'DOCKER_BUILDKIT', value: '1'), + envVar(key: 'DOCKER_HOST', value: 'tcp://docker-host-docker-host:2375')]), + containerTemplate(name: 'awscli', image: 'mikesir87/aws-cli', ttyEnabled: true, command: 'cat', envVars: [ + envVar(key: 'AWS_DEFAULT_REGION', value: 'eu-central-1'), + secretEnvVar(key: 'AWS_ACCESS_KEY_ID', secretName: 'academy-uploader-env', secretKey: 'awsAccessKeyId'), + secretEnvVar(key: 'AWS_SECRET_ACCESS_KEY', secretName: 'academy-uploader-env', secretKey: 'awsSecretAccessKey'), + ]) +]) { + node('academy-production-deploy') { + stage('Update deployment') { + def scmVars = checkout scm + def gitCommit = scmVars.GIT_COMMIT + + withCredentials([ + string(credentialsId: 'aws_account_id', variable: 'aws_account_id') + ]){ + + def awsRegistry = "${env.aws_account_id}.dkr.ecr.eu-central-1.amazonaws.com" + def sourceImage = "${awsRegistry}/academy" + def taggedSource = "${sourceImage}:${gitCommit}" + + container('docker') { + docker.withRegistry("https://${awsRegistry}", "ecr:eu-central-1:ecr-credentials") { + sh "docker pull ${taggedSource}" + sh "mkdir -p artifacts" + sh "docker create --name academy-temp ${taggedSource}" + sh "docker cp academy-temp:/app/public ./artifacts/" + sh "docker rm academy-temp" + } + } + } + } + + stage('Copy assets to S3') { + container('awscli') { + def bucket = "s3://academy-production.santiment.net" + + sh "cd ./artifacts/public/ && aws s3 sync . ${bucket}/ --delete --exclude index.html" + sh """ + aws s3 cp ./artifacts/public/index.html ${bucket}/index.html \ + --metadata-directive REPLACE \ + --cache-control max-age=0,no-cache,no-store,must-revalidate \ + --content-type text/html + """ + } + } + + } +} diff --git a/Jenkinsfile-stage-deploy b/Jenkinsfile-stage-deploy new file mode 100644 index 000000000..863e1870c --- /dev/null +++ b/Jenkinsfile-stage-deploy @@ -0,0 +1,52 @@ +podTemplate(label: 'academy-staging-deploy', nodeSelector: 'cpu.credits=no', containers: [ + containerTemplate(name: 'kubectl', image: 'lachlanevenson/k8s-kubectl:v1.25.4', command: 'cat', ttyEnabled: true), + containerTemplate(name: 'docker', image: 'docker', ttyEnabled: true, command: 'cat', envVars: [ + envVar(key: 'DOCKER_BUILDKIT', value: '1'), + envVar(key: 'DOCKER_HOST', value: 'tcp://docker-host-docker-host:2375')]), + containerTemplate(name: 'awscli', image: 'mikesir87/aws-cli', ttyEnabled: true, command: 'cat', envVars: [ + envVar(key: 'AWS_DEFAULT_REGION', value: 'eu-central-1'), + secretEnvVar(key: 'AWS_ACCESS_KEY_ID', secretName: 'academy-uploader-env', secretKey: 'awsAccessKeyId'), + secretEnvVar(key: 'AWS_SECRET_ACCESS_KEY', secretName: 'academy-uploader-env', secretKey: 'awsSecretAccessKey'), + ]) +]) { + node('academy-staging-deploy') { + stage('Update deployment') { + def scmVars = checkout scm + def gitCommit = scmVars.GIT_COMMIT + + withCredentials([ + string(credentialsId: 'aws_account_id', variable: 'aws_account_id') + ]){ + + def awsRegistry = "${env.aws_account_id}.dkr.ecr.eu-central-1.amazonaws.com" + def sourceImage = "${awsRegistry}/academy" + def taggedSource = "${sourceImage}:${gitCommit}" + + container('docker') { + docker.withRegistry("https://${awsRegistry}", "ecr:eu-central-1:ecr-credentials") { + sh "docker pull ${taggedSource}" + sh "mkdir -p artifacts" + sh "docker create --name academy-temp ${taggedSource}" + sh "docker cp academy-temp:/app/public ./artifacts/" + sh "docker rm academy-temp" + } + } + } + } + + stage('Copy assets to S3') { + container('awscli') { + def bucket = "s3://academy-stage.santiment.net" + + sh "cd ./artifacts/public/ && aws s3 sync . ${bucket}/ --delete --exclude index.html" + sh """ + aws s3 cp ./artifacts/public/index.html ${bucket}/index.html \ + --metadata-directive REPLACE \ + --cache-control max-age=0,no-cache,no-store,must-revalidate \ + --content-type text/html + """ + } + } + + } +} diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 5169a5e41..000000000 --- a/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 gatsbyjs - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/README.md b/README.md index 9bade4748..3e09e5e92 100644 --- a/README.md +++ b/README.md @@ -1,107 +1,105 @@ -This is the source for [**Santiment Knowledge Base site**](https://academy.santiment.net) +This is the source for **[Santiment Knowledge Base site](https://academy.santiment.net)** ## Contributing ### Running locally - -If you have [yarn](https://classic.yarnpkg.com/en/docs/install/) you can run the app simply: + +We use **pnpm** and **Node v22**. To run the app locally: ```bash -yarn -yarn start -``` +pnpm install +pnpm dev -If you have problems with `yarn` use node v14 / v16. For example: -```sh -nvm install 16 -nvm use 16 ``` -This is going to run the app on port 8000, so [`localhost:8000`](http://localhost:8000) should be accessible. - +This is going to run the app on port **3000**, so [`localhost:3000`](http://localhost:3000) should be accessible. ### How to add an article -Basically, you can add `.md` (Markdown) file in `src/docs/test.md` or put `index.md` to `src/docs/test` folder. -It will be available at `academy.santiment.net/test` (locally: `localhost:8000/test`) -Also you can put images under that folder +We use **MDX** (.mdx) for all content. The routing is file-system based and located in `src/content/docs/` (or `src/docs/`). -### Generate llms.txt +- To create a page at `academy.santiment.net/test`, add `src/docs/[section]/test.mdx`. +- Images should be placed in the same folder as the article and referenced relatively. -To update the `llms.txt` file (LLM-readable index of all documentation): -```bash -pip install pyyaml -python scripts/generate_llms_txt.py -``` +### Sidebar & Visibility -### Custom Components +The sidebar is generated automatically. + +- **Visibility**: All files are visible by default. +- **Hiding**: To hide an article from the sidebar, set `sidebar.hidden: true` in the frontmatter. +- **Ordering**: Use `sidebar.order: [number]` to control the position in the list. -- Available custom components: `Markdown Content`, `Markdown Content` -- Disable image automatic bordering: Append `noborder` to image alt, eg: `![noborder](46_connect_wallet_with_mm_sign_v2.png)` +### Custom Components -### Add an article into navigation sidebar +- **Available custom components**: `Markdown Content`, `Markdown Content` +- **Disable image automatic bordering**: Append `noborder` to image alt, eg: `![noborder](image.png)` -If you want to see article not only by direct link, choose category for article, (example: "Metrics") -Categories are available in [`src/docs/navigation.js`](https://github.com/santiment/academy/blob/master/src/docs/navigation.js) +### Generate llms.txt -Example: you want to add `Transaction Volume` article. -You should choose: `METRICS` category, add `"Transaction Volume"` to `articles` array. -After that add markdown file `transaction-volume.md` (or transaction-volume/index.md) to `src/docs/metrics/`. +To update the `llms.txt` file (LLM-readable index of all documentation): -Also, need to add a reference to the article file in category root article (see examples in `src/docs/metrics/index.md`) +```bash +pip install pyyaml +python scripts/generate_llms_txt.py -> If you can't find appropriate category for your article [write us](mailto:support@santiment.net). +``` --- ### Metadata -A metadata block should be in a yaml notation directly in markdown file. +A metadata block (Frontmatter) should be in YAML notation directly at the top of the MDX file. -- Each article should contain a **title** and **description** -- Update **date** field, when you refactor your article. -- **author** name should use existing person from [`src/docs/people.js`](https://github.com/santiment/academy/blob/master/src/docs/people.js). If you use it right - image and person description will appear. +- **title**: Required. +- **description**: Required. +- **datePublished**: Required. +- **dateModified**: Update this field when you refactor the article. +- **author**: Preferably full name. -Example of a metadata block inside markdown file: +Example: ```yaml --- title: Daily active addresses metric -description: some description for seo +description: The number of distinct addresses that participated in a transfer. author: Tzanko Matev -date: 2019-01-01 +dateModified: 2025-12-21 +datePublished: 2025-12-21 +sidebar: + hidden: false --- ## Some title in article The number of distinct addresses that ... ``` -Note the three dashes before and after metadata. _Don't forget to put them there_. - -`h2` for headings in article will be in the fast navigation through the article +`h2` (##) headings will be used to generate the fast navigation (Table of Contents) on the right. --- ## Learn More -* [Sanbase](https://app.santiment.net) -* [Insights](https://insights.santiment.net) -* [Sheets](https://sheets.santiment.net) -* [SanR](https://sanr.app) -* [API](https://api.santiment.net) -* [Knowledge Base](https://academy.santiment.net) + +- [Sanbase](https://app.santiment.net) +- [Insights](https://insights.santiment.net) +- [Sheets](https://sheets.santiment.net) +- [SanR](https://sanr.app) +- [API](https://api.santiment.net) +- [Knowledge Base](https://academy.santiment.net) ## Become a SanDev + We're hiring developers, support people, and product managers all the time. Please check our [open positions](https://santiment.notion.site/Open-positions-f1880de7557b468a80b1465013f311cd) [Contact us](mailto:jobs@santiment.net) ## Community + Join thousands of members worldwide in our [community server](https://santiment.net/discord). ## Get the Latest News -* [Twitter](https://twitter.com/santimentfeed) -* [Blog](https://insights.santiment.net) -* [Youtube](https://www.youtube.com/channel/UCSzP_Z3MrygWlbLMyrNmMkg) +- [Twitter](https://twitter.com/santimentfeed) +- [Blog](https://insights.santiment.net) +- [Youtube](https://www.youtube.com/channel/UCSzP_Z3MrygWlbLMyrNmMkg) -Any other questions, reach out to us at [support@santiment.net](support@santiment.net). We’d happy to help! +Any other questions, reach out to us at [support@santiment.net](mailto:support@santiment.net). We’d happy to help! diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 000000000..0289e7f53 --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,100 @@ +import mdx from '@astrojs/mdx' +import sitemap from '@astrojs/sitemap' +import svelte from '@astrojs/svelte' +import tailwind from '@astrojs/tailwind' +import { pluginLineNumbers } from '@expressive-code/plugin-line-numbers' +import path from 'path' +import rehypeKatex from 'rehype-katex' +import rehypeSlug from 'rehype-slug' +import remarkGemoji from 'remark-gemoji' +import remarkMath from 'remark-math' +import { fileURLToPath } from 'url' + +import astroExpressiveCode from 'astro-expressive-code' +import { defineConfig, mergeConfig } from 'astro/config' + +import { createAstroConfig } from 'san-webkit-next/vite.config.js' + +import { expressiveCodeExplorer } from './plugins/ec-explorer-outside.mjs' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) + +const viteBase = await createAstroConfig() + +const viteConfig = mergeConfig(viteBase, { + define: { + __SVELTEKIT_APP_VERSION_POLL_INTERVAL__: '0', + }, + alias: { + $components: path.resolve(__dirname, './src/components'), + $layouts: path.resolve(__dirname, './src/layouts'), + $modules: path.resolve(__dirname, './src/modules'), + $config: path.resolve(__dirname, './src/config'), + }, + ssr: { + noExternal: ['san-webkit-next'], + }, +}) + +export default defineConfig({ + site: 'https://academy.santiment.net', + trailingSlash: 'always', + build: { + format: 'directory', + }, + redirects: { + '/metrics/mvrv-ratio/': '/metrics/mvrv/', + '/metrics/holders-distribution/': '/metrics/supply-distribution/', + '/education-and-use-cases/understaning-daily-active-addresses/': + '/education-and-use-cases/understanding-daily-active-addresses/', + }, + integrations: [ + svelte({ + extensions: ['.svelte'], + }), + astroExpressiveCode({ + theme: 'min-light', + plugins: [pluginLineNumbers(), expressiveCodeExplorer()], + removeUnusedThemes: true, + styleOverrides: { + codePaddingBlock: '10px', + borderWidth: '1px', + borderColor: 'var(--porcelain)', + codeFontSize: '16px', + codeFontFamily: + 'Fira Code, Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace', + frames: { + inlineButtonBorder: 'none', + inlineButtonBackground: 'none', + inlineButtonForeground: 'var(--casper)', + inlineButtonBackgroundHoverOrFocusOpacity: 'var(--rhino)', + frameBoxShadowCssValue: 'none', + tooltipSuccessBackground: 'var(--rhino)', + tooltipSuccessForeground: 'var(--white)', + }, + lineNumbers: { + foreground: 'var(--casper)', + }, + }, + }), + mdx(), + tailwind(), + sitemap(), + ], + vite: viteConfig, + base: '/', + markdown: { + shikiConfig: { + langAlias: { + SQL: 'sql', + }, + }, + remarkPlugins: [remarkMath, remarkGemoji], + rehypePlugins: [rehypeKatex, rehypeSlug], + }, + publicDir: './static', + outDir: './public', + server: { + port: 3000, + }, +}) diff --git a/docs/GUIDE.md b/docs/GUIDE.md deleted file mode 100644 index 8a3d2843d..000000000 --- a/docs/GUIDE.md +++ /dev/null @@ -1,144 +0,0 @@ -# How to write Academy articles - -## High-level file structure - -![File Structure](./file_structure.png) - -All pages seen on the website are located inside src/docs/. -For example all metrics articles are located inside src/docs/metrics/, pages about -Sanbase are inside src/docs/sanbase/, etc. - -This structure is not extremely important for the visualization, but one should keep -discipline when deciding where to put a new article. It should be created inside the -most appropriate directory, or if such directory is missing - crate a new directory. - -## Article-level file structure - -When creating a new article, do the following steps: - -- Decide on the article title. For the purpose of the example let's choose 'Trading and Transaction Volume' -- Locate the most appropriate directory where the article -- Create a new folder named `trading-and-transaction-volume` inside it. This directory name is important - and should reflect the name of the article itself. Usually it is the `snake-case` version of the title. - This directory name is important as we'll use it when we create links to that article. -- Create an `index.md` file inside that directory. The name is important. This will be the main/index page of - the article. - -## Contents of the index.md file - -### Header - -Always start with the header structure, which looks like this: - -``` ---- -title: Trading and Transaction Volume -author: Santiment Team -date: 2025-05-13 ---- -``` - -![Header fields](./title_and_date.jpg) - -The `title` and `date` fields are displayed on the article page, as seen in the screenshot. - -The `title` field will be transformed to an h1 HTML tag in the final page. -One page should have one h1 tag, holding the title. In Markdown this is usually represented -as a line starting with `#`, like: - -`# Trading and Transaction Volume`. - -As this is done automatically by us by defining the title, we should **not** use `# title` anywhere in the article thereafter. - -Do not define the title second time with markdown! - -### Youtube Video - -If some video from our channel needs to be added, go to the youtube video and copy the `iframe` -that is produced when you click Share->Embed -![noborder](./embed_youtube_video_1.png) - -Paste the copied iframe right after the header definition, if you wish to have the video right after the title on the final page. - -### Subsections - -As our title is defined in the header, all main subsections are defined as: - -``` -## Title of subsection 1 -``` - -These subsections are shown as h2 titles in the HTML (smaller titles than the main title). -They are also shown in the right sidebar/map of the article. - -![noborder](./subsections.png) - -You can use `###`, `####`, etc. to further nest subsections. - -You should be consistent -- all top-level subsections should be `##` and the subsections of these subsections should -be `###`, and so on. - -### Links and images - -#### Links - -Markdown link syntax is: `[Link Text](Link URL)`. The link URL can be: - -- External (link to sanbase) -- the full URL must be provided. Example: `[Sanbase](https://app.santment.net)` -- Internal -- point to some other page of Academy. These paths are relative. Relative paths allow you to link to stage - pages on stage and to prod pages on prod. Do not use full paths when linking to other Academy pages! - - Example: `[NVT article](/metrics/nvt)`. The root of the relative path is the `/src/docs/` directory. - - Standard relative path syntax works: `./` points to the current directory and `../` points to the parent directory. - -The same rules apply to linking from other pages to your new article page. -If our example `Trading and Transaction Volume` article is located in the `Education and Use Cases` directory, then -the following syntax will create a link to our article: `[Trading and Transaction Volume](/education-and-use-cases/trading-and-transaction-volume/)` - -#### Images - -Markdown image syntax is `![noborder](Image path)`. - -In almost all cases the image file is located in the same directory as the `index.md` file. If the image `img.png` is located -in the same directory, then the following syntax will add it `![noborder](./img.png)`. The `./` is the above-mentioned way to point -to the current directory. - -Note: The `noborder` is Academy-specific and it removes borders from images. By default we prefer to not have borders. - -Prefer adding the images to the directory of your article instead of using images hosted on some other server. - -## Add the article to the navigation - -The final thing we need to do is to put our new article in the left navigation bar in the appropriate place. - -To do this, open the `/src/docs/navigation.js` file. - -Locate the JS variable that points to the parent directory that holds your article. - -Existing variables are: `export const GETTING_STARTED`, `export const REFERENCES`, `export const GUIDES`, etc. - -These variables hold a dictionary with a few notable key-value pairs. - -- `title: 'Education and Use cases'` - The title of the group of links in the sidebar. -- `articles: [ ... ]` - Holds the list of articles in that group. Your task is to add the article here. - -There are two ways of adding articles. Follow the same convention as the rest of the articles defined in that group. - -### Option 1 - -```js -{ - slug: 'alerts on Sanbase', - title: 'Sanbase Alerts - Age Consumed example', -} -``` - -- `slug` refers to the name of the directory of the article. When the `slug` is lowercased and spaces are replaced with `-` it must match the name of the directory you created. -- `title` shows how the article will be named in the sidebar. The title can be different form the slug. - -### Option 2 - -If the slug and title match, then you can just write the title as a string: `Trading and Transaction Volume` - -![noborder](./navigation.png) diff --git a/gatsby-browser.js b/gatsby-browser.js deleted file mode 100644 index 868225d2c..000000000 --- a/gatsby-browser.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Implement Gatsby's Browser APIs in this file. - * - * See: https://www.gatsbyjs.org/docs/browser-apis/ - */ - -// You can delete this file if you're not using it - -export { wrapRootElement } from "./src/apollo/wrap-root-element" - -const scrollTo = id => () => { - try { - const el = document.querySelector(id) - if (el) return window.scrollTo(0, el.offsetTop - 90) - } catch (e) { - console.log(e) - } - - return false -} - -export const onRouteUpdate = ({ location: { hash } }) => { - if (hash) { - window.setTimeout(scrollTo(hash.replace("/", "")), 10) - } -} diff --git a/gatsby-config.js b/gatsby-config.js deleted file mode 100644 index e922818b5..000000000 --- a/gatsby-config.js +++ /dev/null @@ -1,76 +0,0 @@ -module.exports = { - siteMetadata: { - title: `Crypto Academy: Learn How to Analyze Cryptocurrency Market`, - description: `Utilize our crypto academy as a comprehensive resource for knowledge about the crypto market, our products, tools, and metrics. Learn how to use these insights to enhance your market decisions.`, - author: `Santiment Team`, - siteUrl: "https://academy.santiment.net", - }, - plugins: [ - { - resolve: `gatsby-plugin-env-variables`, - options: { - whitelist: ["BACKEND_URL"], - }, - }, - { - resolve: `gatsby-plugin-algolia-docsearch`, - options: { - appId: "ZVVHPHW3IV", // App ID - apiKey: "712c7a00cdc130f6828b671dac8ad35f", // Search API key - indexName: "santiment_academy", // required - inputSelector: "#search", // required - debug: true, - }, - }, - `gatsby-plugin-react-helmet`, - `gatsby-plugin-sass`, - { - resolve: `gatsby-source-filesystem`, - options: { - name: `images`, - path: `${__dirname}/src/images`, - }, - }, - { - resolve: `gatsby-source-filesystem`, - options: { - name: `src`, - path: `${__dirname}/src/docs`, - }, - }, - `gatsby-transformer-sharp`, - `gatsby-plugin-sharp`, - { - resolve: `gatsby-plugin-manifest`, - options: { - name: `gatsby-starter-default`, - short_name: `starter`, - start_url: `/`, - background_color: `#2F354D`, - theme_color: `#2F354D`, - display: `minimal-ui`, - icon: `src/images/logo.png`, // This path is relative to the root of the site. - }, - }, - { - resolve: `gatsby-transformer-remark`, - options: { - plugins: [`gatsby-remark-copy-images`], - }, - }, - { - resolve: `gatsby-plugin-breadcrumb`, - options: { - useAutoGen: true, - autoGenHomeLabel: `Home`, - exclude: [ - `/dev-404-page`, - `/404`, - `/404.html`, - `/offline-plugin-app-shell-fallback`, - ], - useClassNames: true, - }, - }, - ], -} diff --git a/gatsby-node.js b/gatsby-node.js deleted file mode 100644 index 4b841023a..000000000 --- a/gatsby-node.js +++ /dev/null @@ -1,98 +0,0 @@ -const webpack = require('webpack') -const path = require(`path`) -const { execSync } = require('child_process') -const { createFilePath } = require(`gatsby-source-filesystem`) -const { onPostBuild } = require('gatsby-plugin-meta-redirect/gatsby-node') - -exports.onCreateNode = ({ node, getNode, actions }) => { - const { createNodeField } = actions - if (node.internal.type === `MarkdownRemark`) { - const slug = createFilePath({ node, getNode, basePath: `pages` }) - createNodeField({ - node, - name: `slug`, - value: slug, - }) - // node.fileAbsolutePath is used for each file separately - // if we remove it all updated at values would be the same as this file modified date - const lastUpdatedAt = execSync( - `git log -1 --pretty=format:%aI ${node.fileAbsolutePath}` - ).toString() - createNodeField({ - node, - name: 'lastUpdatedAt', - value: lastUpdatedAt, - }) - } -} - -exports.createPages = async ({ graphql, actions }) => { - const { createPage } = actions - const result = await graphql(` - query { - allMarkdownRemark { - edges { - node { - fields { - slug - } - } - } - } - } - `) - - const { createRedirect } = actions - createRedirect({ - fromPath: '/metrics/mvrv-ratio/', - toPath: '/metrics/mvrv/', - isPermanent: true, - redirectInBrowser: true, - }) - createRedirect({ - fromPath: '/metrics/holders-distribution/', - toPath: '/metrics/supply-distribution/', - isPermanent: true, - redirectInBrowser: true, - }) - - result.data.allMarkdownRemark.edges.forEach(({ node }) => { - createPage({ - path: node.fields.slug, - component: path.resolve(`./src/templates/article.js`), - context: { slug: node.fields.slug }, - }) - }) -} - -exports.onCreateWebpackConfig = ({ actions }) => { - actions.setWebpackConfig({ - resolve: { - alias: { - webkit: path.resolve('node_modules/san-webkit/lib'), - }, - }, - - module: { - rules: [ - { - test: /\.svelte/, - use: { - loader: 'svelte-loader', - }, - }, - ], - }, - - plugins: [ - new webpack.DefinePlugin({ - 'process.env.MEDIA_PATH': JSON.stringify('/static/webkit'), - 'process.env.ICONS_PATH': JSON.stringify('/static/webkit/icons'), - 'process.env.GQL_SERVER_URL': - '`https://api${window.location.hostname.includes("stage") ? "-stage" : ""}.santiment.net/graphql`', - }), - ], - }) -} - -exports.onPostBuild = onPostBuild \ No newline at end of file diff --git a/gatsby-ssr.js b/gatsby-ssr.js deleted file mode 100644 index 1a867332c..000000000 --- a/gatsby-ssr.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Implement Gatsby's SSR (Server Side Rendering) APIs in this file. - * - * See: https://www.gatsbyjs.org/docs/ssr-apis/ - */ - -// You can delete this file if you're not using it - -export { wrapRootElement } from "./src/apollo/wrap-root-element" diff --git a/package.json b/package.json index cbf7adb11..9b6ee0bd0 100644 --- a/package.json +++ b/package.json @@ -1,83 +1,51 @@ { - "name": "gatsby-starter-default", - "private": true, - "description": "A simple starter to get up and developing quickly with Gatsby", - "version": "0.1.0", - "author": "Kyle Mathews ", + "name": "academy", + "version": "1.0.0", + "type": "module", + "description": "Santiment Academy", + "scripts": { + "dev": "astro dev", + "dev:https": "astro dev --host -- --https", + "build": "astro build && pagefind --site public", + "preview": "astro preview", + "astro": "astro" + }, + "keywords": [], + "license": "ISC", "dependencies": { - "@matejmazur/react-katex": "^3.0.2", + "@astrojs/sitemap": "^3.6.0", + "@expressive-code/plugin-line-numbers": "^0.41.4", + "@melt-ui/svelte": "^0.86.0", "@santiment-network/ui": "^0.5.237", - "apollo-boost": "^0.4.4", - "apollo-client": "^2.6.4", - "apollo-link-context": "^1.0.19", - "classnames": "^2.3.1", - "copy-to-clipboard": "^3.2.0", - "gatsby": "^2.32.13", - "gatsby-image": "^2.2.29", - "gatsby-plugin-algolia-docsearch": "^1.0.5", - "gatsby-plugin-breadcrumb": "^6.1.0", - "gatsby-plugin-env-variables": "^1.0.1", - "gatsby-plugin-manifest": "^4.2.0", - "gatsby-plugin-meta-redirect": "^1.1.1", - "gatsby-plugin-react-helmet": "^3.1.13", - "gatsby-plugin-sass": "^3.2.0", - "gatsby-plugin-sharp": "^4.2.0", - "gatsby-remark-copy-images": "^0.2.1", - "gatsby-source-filesystem": "^4.2.0", - "gatsby-transformer-remark": "^2.6.30", - "gatsby-transformer-sharp": "^4.2.0", - "graphql-tag": "^2.10.1", - "install": "^0.13.0", - "isomorphic-fetch": "^2.2.1", - "katex": "^0.11.1", - "lodash": "^4.17.15", - "lodash.template": "^4.5.0", - "node-sass": "^6.0.1", - "npm": "^6.12.0", - "patch-package": "^6.4.7", - "phoenix": "^1.6.6", - "postinstall-postinstall": "^2.1.0", - "prop-types": "^15.7.2", - "query-string": "^6.8.3", - "react": "^16.10.2", - "react-apollo": "^3.1.3", - "react-dom": "^16.10.2", - "react-emoji-render": "^1.0.0", - "react-ga": "^2.7.0", - "react-helmet": "^5.2.1", - "react-markdown": "^4.2.2", - "react-sizes": "^2.0.0", - "react-syntax-highlighter": "^11.0.2", - "react-transition-group": "^4.3.0", - "remark-math": "^2.0.0", - "san-webkit": "https://github.com/santiment/san-webkit#f459c21", - "svelte": "^3.46.3", - "svelte-loader": "^2.13.6" + "astro": "^5.16.4", + "astro-expressive-code": "^0.41.4", + "bits-ui": "^1.3.4", + "esm-env": "^1.2.2", + "pagefind": "^1.4.0", + "rehype-slug": "^6.0.0", + "remark-gemoji": "^8.0.0", + "san-webkit-next": "github:santiment/san-webkit#lib-292a0d40-021225", + "svelte": "^5.33.7", + "unist-util-visit": "^5.0.0", + "vite-plugin-mkcert": "^1.17.9" }, "devDependencies": { - "prettier": "^1.18.2" - }, - "keywords": [ - "gatsby" - ], - "license": "MIT", - "scripts": { - "build": "gatsby build", - "develop": "gatsby develop", - "dev:https": "mkcert local.santiment.net && gatsby develop --port 3000 --https --host local.santiment.net --key-file ./local.santiment.net-key.pem --cert-file ./local.santiment.net.pem", - "clean": "gatsby clean", - "format": "prettier --single-quote --write src/**/*.{js,jsx}", - "start": "npm run develop", - "serve": "gatsby serve", - "test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\"", - "webkit": "node scripts/webkit", - "postinstall": "patch-package && npm run webkit" - }, - "repository": { - "type": "git", - "url": "https://github.com/gatsbyjs/gatsby-starter-default" - }, - "bugs": { - "url": "https://github.com/gatsbyjs/gatsby/issues" + "@astrojs/mdx": "^4.3.12", + "@astrojs/svelte": "^7.2.2", + "@astrojs/tailwind": "^6.0.2", + "@astrojs/ts-plugin": "^1.10.6", + "@trivago/prettier-plugin-sort-imports": "^6.0.0", + "katex": "^0.16.25", + "prettier": "^3.7.2", + "prettier-plugin-astro": "^0.14.1", + "prettier-plugin-svelte": "^3.4.0", + "prettier-plugin-tailwindcss": "^0.7.1", + "rehype-katex": "^7.0.1", + "remark-math": "^6.0.0", + "sharp": "^0.34.5", + "svelte-preprocess": "^5.1.4", + "svelte-preprocess-cssmodules": "^3.0.1", + "typescript": "^5.9.3", + "vite": "^7.1.12" } } diff --git a/patches/gatsby-plugin-algolia-docsearch+1.0.5.patch b/patches/gatsby-plugin-algolia-docsearch+1.0.5.patch deleted file mode 100644 index f3030bb89..000000000 --- a/patches/gatsby-plugin-algolia-docsearch+1.0.5.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff --git a/node_modules/gatsby-plugin-algolia-docsearch/gatsby-ssr.js b/node_modules/gatsby-plugin-algolia-docsearch/gatsby-ssr.js -index aa06cf2..9006c27 100644 ---- a/node_modules/gatsby-plugin-algolia-docsearch/gatsby-ssr.js -+++ b/node_modules/gatsby-plugin-algolia-docsearch/gatsby-ssr.js -@@ -9,7 +9,7 @@ var _react = _interopRequireDefault(require("react")); - var _commonTags = require("common-tags"); - - function _templateObject() { -- var data = (0, _taggedTemplateLiteralLoose2["default"])(["\n var observer = new MutationObserver(function (mutations, instance) {\n var docuSearchElem = document.querySelector('", "');\n if (docuSearchElem) {\n docsearch({\n apiKey: \"", "\",\n indexName: \"", "\",\n inputSelector: \"", "\",\n debug: ", "\n });\n instance.disconnect(); // stop observing\n return;\n }\n });\n\n // start observing\n document.addEventListener(\"DOMContentLoaded\", function() {\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n });\n "]); -+ var data = (0, _taggedTemplateLiteralLoose2["default"])(["\n var observer = new MutationObserver(function (mutations, instance) {\n var docuSearchElem = document.querySelector('", "');\n if (docuSearchElem) {\n docsearch({\n apiKey: \"", "\",\n appId: \"", "\",\n indexName: \"", "\",\n inputSelector: \"", "\",\n debug: ", "\n });\n instance.disconnect(); // stop observing\n return;\n }\n });\n\n // start observing\n document.addEventListener(\"DOMContentLoaded\", function() {\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n });\n "]); - - _templateObject = function _templateObject() { - return data; -@@ -22,6 +22,7 @@ exports.onRenderBody = function (_ref, _ref2) { - var setHeadComponents = _ref.setHeadComponents, - setPostBodyComponents = _ref.setPostBodyComponents; - var apiKey = _ref2.apiKey, -+ appId = _ref2.appId, - indexName = _ref2.indexName, - inputSelector = _ref2.inputSelector, - _ref2$debug = _ref2.debug, -@@ -44,7 +45,7 @@ exports.onRenderBody = function (_ref, _ref2) { - key: "plugin-docsearch-initiate", - type: "text/javascript", - dangerouslySetInnerHTML: { -- __html: (0, _commonTags.stripIndent)(_templateObject(), inputSelector, apiKey, indexName, inputSelector, debug === true ? "true" : "false") -+ __html: (0, _commonTags.stripIndent)(_templateObject(), inputSelector, apiKey, appId, indexName, inputSelector, debug === true ? "true" : "false") - } - })]); - }; -\ No newline at end of file diff --git a/plugins/ec-explorer-outside.mjs b/plugins/ec-explorer-outside.mjs new file mode 100644 index 000000000..1be210b37 --- /dev/null +++ b/plugins/ec-explorer-outside.mjs @@ -0,0 +1,35 @@ +import { definePlugin } from 'astro-expressive-code' +import { h } from 'astro-expressive-code/hast' + +export function expressiveCodeExplorer() { + return definePlugin({ + name: 'api-santiment-explorer', + + baseStyles: ` + .ec-explorer-link { all: unset; color: var(--green); font-size: 18px; cursor: pointer; font-family: 'Proxima Nova', sans-serif; font-weight: bolder; } + .ec-explorer-actions { margin-top: 10px; } + `, + + hooks: { + postprocessRenderedBlock: ({ codeBlock, renderData }) => { + if (codeBlock.language !== 'graphql') return + if (!codeBlock.meta?.includes('explorer')) return + + const url = new URL('https://api.santiment.net/graphiql') + url.searchParams.set('query', codeBlock.code) + + const link = h( + 'a.ec-explorer-link', + { + href: url.toString(), + target: '_blank', + rel: 'noopener noreferrer', + }, + 'Run in Explorer', + ) + + renderData.blockAst.children.push(h('div.ec-explorer-actions', [link])) + }, + }, + }) +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 000000000..2a24eedc7 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,9917 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@astrojs/sitemap': + specifier: ^3.6.0 + version: 3.6.0 + '@expressive-code/plugin-line-numbers': + specifier: ^0.41.4 + version: 0.41.4 + '@melt-ui/svelte': + specifier: ^0.86.0 + version: 0.86.6(svelte@5.42.3) + '@santiment-network/ui': + specifier: ^0.5.237 + version: 0.5.282(react-dom@16.14.0)(react@16.14.0) + astro: + specifier: ^5.16.4 + version: 5.16.4(typescript@5.9.3) + astro-expressive-code: + specifier: ^0.41.4 + version: 0.41.4(astro@5.16.4) + bits-ui: + specifier: ^1.3.4 + version: 1.8.0(svelte@5.42.3) + esm-env: + specifier: ^1.2.2 + version: 1.2.2 + pagefind: + specifier: ^1.4.0 + version: 1.4.0 + rehype-slug: + specifier: ^6.0.0 + version: 6.0.0 + remark-gemoji: + specifier: ^8.0.0 + version: 8.0.0 + san-webkit-next: + specifier: github:santiment/san-webkit#lib-292a0d40-021225 + version: github.com/santiment/san-webkit/95902f9e0fe3dcddccf60d69fa49f79fb1586d80(@amplitude/rrweb@2.0.0-alpha.33)(@melt-ui/svelte@0.86.6)(@sveltejs/adapter-auto@3.3.1)(@sveltejs/adapter-node@5.4.0)(@sveltejs/kit@2.48.2)(@sveltejs/vite-plugin-svelte@5.1.1)(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(@wagmi/connectors@5.11.2)(@wagmi/core@2.22.1)(bits-ui@1.8.0)(estree-walker@3.0.3)(graphql@16.11.0)(highlight.js@11.11.1)(indicatorts@2.2.2)(lottie-web@5.13.0)(marked-highlight@2.2.2)(marked@15.0.12)(mathjs@14.9.1)(monaco-editor@0.52.2)(react-dom@16.14.0)(react@16.14.0)(rxjs@7.8.2)(svelte@5.42.3)(tailwind-merge@2.6.0)(tailwindcss@3.4.18)(typescript@5.9.3)(uuid@11.1.0)(viem@2.38.5)(vite@7.1.12)(wagmi@2.19.0) + svelte: + specifier: ^5.33.7 + version: 5.42.3 + unist-util-visit: + specifier: ^5.0.0 + version: 5.0.0 + vite-plugin-mkcert: + specifier: ^1.17.9 + version: 1.17.9(vite@7.1.12) + +devDependencies: + '@astrojs/mdx': + specifier: ^4.3.12 + version: 4.3.12(astro@5.16.4) + '@astrojs/svelte': + specifier: ^7.2.2 + version: 7.2.2(astro@5.16.4)(svelte@5.42.3)(typescript@5.9.3) + '@astrojs/tailwind': + specifier: ^6.0.2 + version: 6.0.2(astro@5.16.4)(tailwindcss@3.4.18) + '@astrojs/ts-plugin': + specifier: ^1.10.6 + version: 1.10.6 + '@trivago/prettier-plugin-sort-imports': + specifier: ^6.0.0 + version: 6.0.0(prettier-plugin-svelte@3.4.0)(prettier@3.7.2)(svelte@5.42.3) + katex: + specifier: ^0.16.25 + version: 0.16.25 + prettier: + specifier: ^3.7.2 + version: 3.7.2 + prettier-plugin-astro: + specifier: ^0.14.1 + version: 0.14.1 + prettier-plugin-svelte: + specifier: ^3.4.0 + version: 3.4.0(prettier@3.7.2)(svelte@5.42.3) + prettier-plugin-tailwindcss: + specifier: ^0.7.1 + version: 0.7.1(@trivago/prettier-plugin-sort-imports@6.0.0)(prettier-plugin-astro@0.14.1)(prettier-plugin-svelte@3.4.0)(prettier@3.7.2) + rehype-katex: + specifier: ^7.0.1 + version: 7.0.1 + remark-math: + specifier: ^6.0.0 + version: 6.0.0 + sharp: + specifier: ^0.34.5 + version: 0.34.5 + svelte-preprocess: + specifier: ^5.1.4 + version: 5.1.4(postcss@8.5.6)(svelte@5.42.3)(typescript@5.9.3) + svelte-preprocess-cssmodules: + specifier: ^3.0.1 + version: 3.0.1(svelte@5.42.3) + typescript: + specifier: ^5.9.3 + version: 5.9.3 + vite: + specifier: ^7.1.12 + version: 7.1.12 + +packages: + + /@adraffy/ens-normalize@1.11.1: + resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} + dev: false + + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + /@amplitude/analytics-browser@2.29.0: + resolution: {integrity: sha512-e+9tdTisSjj//BhMK4Ej8rhldfhcZXurxsfqns2DyXjf+bxLQwO32ZTIbfQMy+CAiRwVRc2nuZXyfFCpW2DgMA==} + dependencies: + '@amplitude/analytics-core': 2.30.0 + '@amplitude/plugin-autocapture-browser': 1.16.2 + '@amplitude/plugin-network-capture-browser': 1.6.11 + '@amplitude/plugin-page-url-enrichment-browser': 0.5.0 + '@amplitude/plugin-page-view-tracking-browser': 2.5.5 + '@amplitude/plugin-web-vitals-browser': 0.1.0-frustrationanalytics.0 + tslib: 2.8.1 + dev: false + + /@amplitude/analytics-client-common@2.4.10: + resolution: {integrity: sha512-M9NiqvErJCSCYQ3cUYxfXaMmDdtI+I2Re/23DXHf8aV4cH8OAoEQKM0UcA3CxPCHJKRSo420RYAwFfnuBrmDxg==} + dependencies: + '@amplitude/analytics-connector': 1.6.4 + '@amplitude/analytics-core': 2.30.0 + '@amplitude/analytics-types': 2.11.0 + tslib: 2.8.1 + dev: false + + /@amplitude/analytics-connector@1.6.4: + resolution: {integrity: sha512-SpIv0IQMNIq6SH3UqFGiaZyGSc7PBZwRdq7lvP0pBxW8i4Ny+8zwI0pV+VMfMHQwWY3wdIbWw5WQphNjpdq1/Q==} + dev: false + + /@amplitude/analytics-core@2.30.0: + resolution: {integrity: sha512-oWz13sQmfCRa9prfYcURPVNHQQOf0/rDEK7PjBi0m0nKXs+QaHu/Tq2y4F6f4K66YDsT7zYYO4DpkS+QJM3/Sw==} + dependencies: + '@amplitude/analytics-connector': 1.6.4 + tslib: 2.8.1 + dev: false + + /@amplitude/analytics-types@2.11.0: + resolution: {integrity: sha512-L1niBXYSWmbyHUE/GNuf6YBljbafaxWI3X5jjEIZDFCjQvdWO3DKalY1VPFUbhgYQgWw7+bC6I/AlUaporyfig==} + dev: false + + /@amplitude/experiment-core@0.7.2: + resolution: {integrity: sha512-Wc2NWvgQ+bLJLeF0A9wBSPIaw0XuqqgkPKsoNFQrmS7r5Djd56um75In05tqmVntPJZRvGKU46pAp8o5tdf4mA==} + dependencies: + js-base64: 3.7.8 + dev: false + + /@amplitude/plugin-autocapture-browser@1.16.2: + resolution: {integrity: sha512-0ariOP5g8xsPlKUrC91DviG9nKuaC4hYPHu5OHpUcU/LdWiKG1k+w5qawUq+KIsyTCAFRbTHn+XoJPjhm6Mbcg==} + dependencies: + '@amplitude/analytics-core': 2.30.0 + rxjs: 7.8.2 + tslib: 2.8.1 + dev: false + + /@amplitude/plugin-network-capture-browser@1.6.11: + resolution: {integrity: sha512-kGbSZ5omr9842kzBN/Wx31kq59RcyclEhpsX2lDxkuHn4el+nhylztx2mNYJyEmeNmdV68MfA1IFkA//ZJzebA==} + dependencies: + '@amplitude/analytics-core': 2.30.0 + rxjs: 7.8.2 + tslib: 2.8.1 + dev: false + + /@amplitude/plugin-page-url-enrichment-browser@0.5.0: + resolution: {integrity: sha512-MJOCHQa3H5t2khPuGwgGX36tuA7ohDwzXyuPVZbY6fN3qRT9LAE686VuvQSXH9365yHMcWp2vPkdn8Ju3i9IUw==} + dependencies: + '@amplitude/analytics-core': 2.30.0 + tslib: 2.8.1 + dev: false + + /@amplitude/plugin-page-view-tracking-browser@2.5.5: + resolution: {integrity: sha512-pSeYW3YjdFdJEA8WFQbWwaez4q1hwr4alg+Z7y1DU0hoQ91ADxCrFDQ2zoTSyBZfu/paWx1Gds1v4sYjsgh5Bw==} + dependencies: + '@amplitude/analytics-core': 2.30.0 + tslib: 2.8.1 + dev: false + + /@amplitude/plugin-session-replay-browser@1.23.0(@amplitude/rrweb@2.0.0-alpha.33): + resolution: {integrity: sha512-/r1qG4jDW9iY5MDTv93Ay6rRS/SQn1ntnqKWqGWFMuiAERJT2oCelh6RroQwUMKAB13IAom6a2YdDtXYwxHH5Q==} + dependencies: + '@amplitude/analytics-client-common': 2.4.10 + '@amplitude/analytics-core': 2.30.0 + '@amplitude/analytics-types': 2.11.0 + '@amplitude/session-replay-browser': 1.29.2(@amplitude/rrweb@2.0.0-alpha.33) + idb-keyval: 6.2.2 + tslib: 2.8.1 + transitivePeerDependencies: + - '@amplitude/rrweb' + - rollup + dev: false + + /@amplitude/plugin-web-vitals-browser@0.1.0-frustrationanalytics.0: + resolution: {integrity: sha512-xv4sje6/D8r+SgNFTA22FJ5PhtdhN+VSydvs63Frll+qWlyQwaZ1IgDbPyqjzryEkldHRPD7GUaQual+geoIYg==} + dependencies: + '@amplitude/analytics-core': 2.30.0 + rxjs: 7.8.2 + tslib: 2.8.1 + web-vitals: 5.1.0 + dev: false + + /@amplitude/rrdom@2.0.0-alpha.33: + resolution: {integrity: sha512-uu+1w1RGEJ7QcGPwCC898YBR47DpNYOZTnQMY9/IgMzTXQ0+Hh1/JLsQfMnBBtAePhvCS0BlHd/qGD5w0taIcg==} + dependencies: + '@amplitude/rrweb-snapshot': 2.0.0-alpha.33 + dev: false + + /@amplitude/rrweb-packer@2.0.0-alpha.32: + resolution: {integrity: sha512-vYT0JFzle/FV9jIpEbuumCLh516az6ltAo7mrd06dlGo1tgos7bJbl3kcnvEXmDG7WWsKwip/Qprap7cZ4CmJw==} + dependencies: + '@amplitude/rrweb-types': 2.0.0-alpha.33 + fflate: 0.4.8 + dev: false + + /@amplitude/rrweb-plugin-console-record@2.0.0-alpha.32(@amplitude/rrweb@2.0.0-alpha.33): + resolution: {integrity: sha512-oJuBSNuBnqnrRCneW3b/pMirSz0Ubr2Ebz/t+zJhkGBgrTPNMviv8sSyyGuSn0kL4RAh/9QAG1H1hiYf9cuzgA==} + peerDependencies: + '@amplitude/rrweb': ^2.0.0-alpha.32 + dependencies: + '@amplitude/rrweb': 2.0.0-alpha.33 + dev: false + + /@amplitude/rrweb-record@2.0.0-alpha.32: + resolution: {integrity: sha512-bs5ItsPfedVNiZyIzYgtey6S6qaU90XcP4/313dcvedzBk9o+eVjBG5DDbStJnwYnSj+lB+oAWw5uc9H9ghKjQ==} + dependencies: + '@amplitude/rrweb': 2.0.0-alpha.33 + '@amplitude/rrweb-types': 2.0.0-alpha.33 + dev: false + + /@amplitude/rrweb-snapshot@2.0.0-alpha.33: + resolution: {integrity: sha512-06CgbRFS+cYDo1tUa+Fe8eo4QA9qmYv9Azio3UYlYxqJf4BtAYSL0eXuzVBuqt3ZXnQwzBlsUj/8QWKKySkO7A==} + dependencies: + postcss: 8.5.6 + dev: false + + /@amplitude/rrweb-types@2.0.0-alpha.32: + resolution: {integrity: sha512-tDs8uizkG+UwE2GKjXh+gH8WhUz0C3y7WfTwrtWi1TnsVc00sXaKSUo5G2h4YF4PGK6dpnLgJBqTwrqCZ211AQ==} + dev: false + + /@amplitude/rrweb-types@2.0.0-alpha.33: + resolution: {integrity: sha512-OTUqndbcuXDZczf99NUq2PqQWTZ4JHK7oF8YT7aOXh1pJVEWhfe6S+J0idHd3YFCy1TD9gtOcdnz5nDJN68Wnw==} + dev: false + + /@amplitude/rrweb-utils@2.0.0-alpha.32: + resolution: {integrity: sha512-DCCQjuNACkIMkdY5/KBaEgL4znRHU694ClW3RIjqFXJ6j6pqGyjEhCqtlCes+XwdgwOQKnJGMNka3J9rmrSqHg==} + dev: false + + /@amplitude/rrweb-utils@2.0.0-alpha.33: + resolution: {integrity: sha512-brK6csN0Tj1W5gYERFhamWEPeFLbz9nYokdaUtd8PL/Y0owWXNX11KGP4pMWvl/f1bElDU0vcu3uYAzM4YGLQw==} + dev: false + + /@amplitude/rrweb@2.0.0-alpha.33: + resolution: {integrity: sha512-vMuk/3HzDWaUzBLFxKd7IpA8TEWjyPZBuLiLexMd/mOfTt/+JkVLsfXiJOyltJfR98LpmMTp1q51dtq357Dnfg==} + dependencies: + '@amplitude/rrdom': 2.0.0-alpha.33 + '@amplitude/rrweb-snapshot': 2.0.0-alpha.33 + '@amplitude/rrweb-types': 2.0.0-alpha.33 + '@amplitude/rrweb-utils': 2.0.0-alpha.33 + '@types/css-font-loading-module': 0.0.7 + '@xstate/fsm': 1.6.5 + base64-arraybuffer: 1.0.2 + mitt: 3.0.1 + dev: false + + /@amplitude/session-replay-browser@1.29.2(@amplitude/rrweb@2.0.0-alpha.33): + resolution: {integrity: sha512-nB67Jv6ODx5ZB9b5me6zC5k8iKcNQbo7I6f/URz6J9Sroxz94tDRVagxjB+ul7CdfigGFTa7DnAiDR/1ybc9NA==} + dependencies: + '@amplitude/analytics-client-common': 2.4.10 + '@amplitude/analytics-core': 2.30.0 + '@amplitude/analytics-types': 2.11.0 + '@amplitude/rrweb-packer': 2.0.0-alpha.32 + '@amplitude/rrweb-plugin-console-record': 2.0.0-alpha.32(@amplitude/rrweb@2.0.0-alpha.33) + '@amplitude/rrweb-record': 2.0.0-alpha.32 + '@amplitude/rrweb-types': 2.0.0-alpha.32 + '@amplitude/rrweb-utils': 2.0.0-alpha.32 + '@amplitude/targeting': 0.2.0 + '@rollup/plugin-replace': 6.0.2 + idb: 8.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@amplitude/rrweb' + - rollup + dev: false + + /@amplitude/targeting@0.2.0: + resolution: {integrity: sha512-/50ywTrC4hfcfJVBbh5DFbqMPPfaIOivZeb5Gb+OGM03QrA+lsUqdvtnKLNuWtceD4H6QQ2KFzPJ5aAJLyzVDA==} + dependencies: + '@amplitude/analytics-client-common': 2.4.10 + '@amplitude/analytics-core': 2.30.0 + '@amplitude/analytics-types': 2.11.0 + '@amplitude/experiment-core': 0.7.2 + idb: 8.0.0 + tslib: 2.8.1 + dev: false + + /@astrojs/compiler@2.13.0: + resolution: {integrity: sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw==} + + /@astrojs/internal-helpers@0.7.5: + resolution: {integrity: sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==} + + /@astrojs/markdown-remark@6.3.9: + resolution: {integrity: sha512-hX2cLC/KW74Io1zIbn92kI482j9J7LleBLGCVU9EP3BeH5MVrnFawOnqD0t/q6D1Z+ZNeQG2gNKMslCcO36wng==} + dependencies: + '@astrojs/internal-helpers': 0.7.5 + '@astrojs/prism': 3.3.0 + github-slugger: 2.0.0 + hast-util-from-html: 2.0.3 + hast-util-to-text: 4.0.2 + import-meta-resolve: 4.2.0 + js-yaml: 4.1.1 + mdast-util-definitions: 6.0.0 + rehype-raw: 7.0.0 + rehype-stringify: 10.0.1 + remark-gfm: 4.0.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + remark-smartypants: 3.0.2 + shiki: 3.19.0 + smol-toml: 1.5.2 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.0.0 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + /@astrojs/mdx@4.3.12(astro@5.16.4): + resolution: {integrity: sha512-pL3CVPtuQrPnDhWjy7zqbOibNyPaxP4VpQS8T8spwKqKzauJ4yoKyNkVTD8jrP7EAJHmBhZ7PTmUGZqOpKKp8g==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + peerDependencies: + astro: ^5.0.0 + dependencies: + '@astrojs/markdown-remark': 6.3.9 + '@mdx-js/mdx': 3.1.1 + acorn: 8.15.0 + astro: 5.16.4(typescript@5.9.3) + es-module-lexer: 1.7.0 + estree-util-visit: 2.0.0 + hast-util-to-html: 9.0.5 + piccolore: 0.1.3 + rehype-raw: 7.0.0 + remark-gfm: 4.0.1 + remark-smartypants: 3.0.2 + source-map: 0.7.6 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@astrojs/prism@3.3.0: + resolution: {integrity: sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + dependencies: + prismjs: 1.30.0 + + /@astrojs/sitemap@3.6.0: + resolution: {integrity: sha512-4aHkvcOZBWJigRmMIAJwRQXBS+ayoP5z40OklTXYXhUDhwusz+DyDl+nSshY6y9DvkVEavwNcFO8FD81iGhXjg==} + dependencies: + sitemap: 8.0.2 + stream-replace-string: 2.0.0 + zod: 3.25.76 + dev: false + + /@astrojs/svelte@7.2.2(astro@5.16.4)(svelte@5.42.3)(typescript@5.9.3): + resolution: {integrity: sha512-Eb9ahZ2BD2kPx5u7c/U6+FVNLxtuUcx0vL6kkGPP0hEikoSy0PavdjwYfZiuOtPCE7ZpQHGikGZMzrIFpjH9pQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + peerDependencies: + astro: ^5.0.0 + svelte: ^5.1.16 + typescript: ^5.3.3 + dependencies: + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.42.3)(vite@6.4.1) + astro: 5.16.4(typescript@5.9.3) + svelte: 5.42.3 + svelte2tsx: 0.7.45(svelte@5.42.3)(typescript@5.9.3) + typescript: 5.9.3 + vite: 6.4.1 + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + dev: true + + /@astrojs/tailwind@6.0.2(astro@5.16.4)(tailwindcss@3.4.18): + resolution: {integrity: sha512-j3mhLNeugZq6A8dMNXVarUa8K6X9AW+QHU9u3lKNrPLMHhOQ0S7VeWhHwEeJFpEK1BTKEUY1U78VQv2gN6hNGg==} + peerDependencies: + astro: ^3.0.0 || ^4.0.0 || ^5.0.0 + tailwindcss: ^3.0.24 + dependencies: + astro: 5.16.4(typescript@5.9.3) + autoprefixer: 10.4.21(postcss@8.5.6) + postcss: 8.5.6 + postcss-load-config: 4.0.2(postcss@8.5.6) + tailwindcss: 3.4.18 + transitivePeerDependencies: + - ts-node + dev: true + + /@astrojs/telemetry@3.3.0: + resolution: {integrity: sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + dependencies: + ci-info: 4.3.1 + debug: 4.4.3 + dlv: 1.1.3 + dset: 3.1.4 + is-docker: 3.0.0 + is-wsl: 3.1.0 + which-pm-runs: 1.1.0 + transitivePeerDependencies: + - supports-color + + /@astrojs/ts-plugin@1.10.6: + resolution: {integrity: sha512-Ke5CNwxn/ozsh6THJKuayUlBToa3uiPDi2oSwcXmTdeiJ0PGr+UkdQJf9hdMgBjbIka9fhnSn3UhYamfNfJ73A==} + dependencies: + '@astrojs/compiler': 2.13.0 + '@astrojs/yaml2ts': 0.2.2 + '@jridgewell/sourcemap-codec': 1.5.5 + '@volar/language-core': 2.4.23 + '@volar/typescript': 2.4.23 + semver: 7.7.3 + vscode-languageserver-textdocument: 1.0.12 + dev: true + + /@astrojs/yaml2ts@0.2.2: + resolution: {integrity: sha512-GOfvSr5Nqy2z5XiwqTouBBpy5FyI6DEe+/g/Mk5am9SjILN1S5fOEvYK0GuWHg98yS/dobP4m8qyqw/URW35fQ==} + dependencies: + yaml: 2.8.1 + dev: true + + /@babel/code-frame@7.27.1: + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + dev: true + + /@babel/generator@7.28.5: + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + dev: true + + /@babel/helper-globals@7.28.0: + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-string-parser@7.27.1: + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-identifier@7.28.5: + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + /@babel/parser@7.28.5: + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.28.5 + + /@babel/runtime@7.28.4: + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/template@7.27.2: + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + dev: true + + /@babel/traverse@7.28.5: + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types@7.28.5: + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + /@base-org/account@1.1.1(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(zod@3.25.76): + resolution: {integrity: sha512-IfVJPrDPhHfqXRDb89472hXkpvJuQQR7FDI9isLPHEqSYt/45whIoBxSPgZ0ssTt379VhQo4+87PWI1DoLSfAQ==} + dependencies: + '@noble/hashes': 1.4.0 + clsx: 1.2.1 + eventemitter3: 5.0.1 + idb-keyval: 6.2.1 + ox: 0.6.9(typescript@5.9.3)(zod@3.25.76) + preact: 10.24.2 + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + zustand: 5.0.3(@types/react@19.2.2)(react@16.14.0)(use-sync-external-store@1.4.0) + transitivePeerDependencies: + - '@types/react' + - bufferutil + - immer + - react + - typescript + - use-sync-external-store + - utf-8-validate + - zod + dev: false + + /@capsizecss/unpack@3.0.1: + resolution: {integrity: sha512-8XqW8xGn++Eqqbz3e9wKuK7mxryeRjs4LOHLxbh2lwKeSbuNR4NFifDZT4KzvjU6HMOPbiNTsWpniK5EJfTWkg==} + engines: {node: '>=18'} + dependencies: + fontkit: 2.0.4 + + /@coinbase/wallet-sdk@3.9.3: + resolution: {integrity: sha512-N/A2DRIf0Y3PHc1XAMvbBUu4zisna6qAdqABMZwBMNEfWrXpAwx16pZGkYCLGE+Rvv1edbcB2LYDRnACNcmCiw==} + dependencies: + bn.js: 5.2.2 + buffer: 6.0.3 + clsx: 1.2.1 + eth-block-tracker: 7.1.0 + eth-json-rpc-filters: 6.0.1 + eventemitter3: 5.0.1 + keccak: 3.0.4 + preact: 10.27.2 + sha.js: 2.4.12 + transitivePeerDependencies: + - supports-color + dev: false + + /@coinbase/wallet-sdk@4.3.6(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(zod@3.25.76): + resolution: {integrity: sha512-4q8BNG1ViL4mSAAvPAtpwlOs1gpC+67eQtgIwNvT3xyeyFFd+guwkc8bcX5rTmQhXpqnhzC4f0obACbP9CqMSA==} + dependencies: + '@noble/hashes': 1.4.0 + clsx: 1.2.1 + eventemitter3: 5.0.1 + idb-keyval: 6.2.1 + ox: 0.6.9(typescript@5.9.3)(zod@3.25.76) + preact: 10.24.2 + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + zustand: 5.0.3(@types/react@19.2.2)(react@16.14.0)(use-sync-external-store@1.4.0) + transitivePeerDependencies: + - '@types/react' + - bufferutil + - immer + - react + - typescript + - use-sync-external-store + - utf-8-validate + - zod + dev: false + + /@ctrl/tinycolor@4.2.0: + resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==} + engines: {node: '>=14'} + dev: false + + /@ecies/ciphers@0.2.4(@noble/ciphers@1.3.0): + resolution: {integrity: sha512-t+iX+Wf5nRKyNzk8dviW3Ikb/280+aEJAnw9YXvCp2tYGPSkMki+NRY+8aNLmVFv3eNtMdvViPNOPxS8SZNP+w==} + engines: {bun: '>=1', deno: '>=2', node: '>=16'} + requiresBuild: true + peerDependencies: + '@noble/ciphers': ^1.0.0 + dependencies: + '@noble/ciphers': 1.3.0 + dev: false + + /@emnapi/runtime@1.7.1: + resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + requiresBuild: true + dependencies: + tslib: 2.8.1 + optional: true + + /@esbuild/aix-ppc64@0.25.11: + resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + optional: true + + /@esbuild/android-arm64@0.25.11: + resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + requiresBuild: true + optional: true + + /@esbuild/android-arm@0.25.11: + resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + requiresBuild: true + optional: true + + /@esbuild/android-x64@0.25.11: + resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + requiresBuild: true + optional: true + + /@esbuild/darwin-arm64@0.25.11: + resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optional: true + + /@esbuild/darwin-x64@0.25.11: + resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + requiresBuild: true + optional: true + + /@esbuild/freebsd-arm64@0.25.11: + resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + optional: true + + /@esbuild/freebsd-x64@0.25.11: + resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + optional: true + + /@esbuild/linux-arm64@0.25.11: + resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@esbuild/linux-arm@0.25.11: + resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + requiresBuild: true + optional: true + + /@esbuild/linux-ia32@0.25.11: + resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + requiresBuild: true + optional: true + + /@esbuild/linux-loong64@0.25.11: + resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + requiresBuild: true + optional: true + + /@esbuild/linux-mips64el@0.25.11: + resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + optional: true + + /@esbuild/linux-ppc64@0.25.11: + resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + optional: true + + /@esbuild/linux-riscv64@0.25.11: + resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + optional: true + + /@esbuild/linux-s390x@0.25.11: + resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + requiresBuild: true + optional: true + + /@esbuild/linux-x64@0.25.11: + resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@esbuild/netbsd-arm64@0.25.11: + resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + requiresBuild: true + optional: true + + /@esbuild/netbsd-x64@0.25.11: + resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + optional: true + + /@esbuild/openbsd-arm64@0.25.11: + resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + requiresBuild: true + optional: true + + /@esbuild/openbsd-x64@0.25.11: + resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + optional: true + + /@esbuild/openharmony-arm64@0.25.11: + resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + requiresBuild: true + optional: true + + /@esbuild/sunos-x64@0.25.11: + resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + requiresBuild: true + optional: true + + /@esbuild/win32-arm64@0.25.11: + resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + requiresBuild: true + optional: true + + /@esbuild/win32-ia32@0.25.11: + resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + requiresBuild: true + optional: true + + /@esbuild/win32-x64@0.25.11: + resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + requiresBuild: true + optional: true + + /@ethereumjs/common@3.2.0: + resolution: {integrity: sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==} + requiresBuild: true + dependencies: + '@ethereumjs/util': 8.1.0 + crc-32: 1.2.2 + dev: false + + /@ethereumjs/rlp@4.0.1: + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} + engines: {node: '>=14'} + hasBin: true + requiresBuild: true + dev: false + + /@ethereumjs/tx@4.2.0: + resolution: {integrity: sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==} + engines: {node: '>=14'} + requiresBuild: true + dependencies: + '@ethereumjs/common': 3.2.0 + '@ethereumjs/rlp': 4.0.1 + '@ethereumjs/util': 8.1.0 + ethereum-cryptography: 2.2.1 + dev: false + + /@ethereumjs/util@8.1.0: + resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} + engines: {node: '>=14'} + requiresBuild: true + dependencies: + '@ethereumjs/rlp': 4.0.1 + ethereum-cryptography: 2.2.1 + micro-ftch: 0.3.1 + dev: false + + /@expressive-code/core@0.41.4: + resolution: {integrity: sha512-4eDiyq3hI3vJ0KnwIqonh9evy9p8aNixsf5wwnvDWcoPfYU3LGB6Nkb6WDdYS4z52tODCvN5gMRy1DtRopcxXg==} + dependencies: + '@ctrl/tinycolor': 4.2.0 + hast-util-select: 6.0.4 + hast-util-to-html: 9.0.5 + hast-util-to-text: 4.0.2 + hastscript: 9.0.1 + postcss: 8.5.6 + postcss-nested: 6.2.0(postcss@8.5.6) + unist-util-visit: 5.0.0 + unist-util-visit-parents: 6.0.2 + dev: false + + /@expressive-code/plugin-frames@0.41.4: + resolution: {integrity: sha512-W9jZW8LsPS8fW5T5CQyXUyyCrMxb7qfl6oxlLZB1rW74qM572Id4CWEXOM/7fFDcd1pW2fUxMoGzJMh0T2Awhg==} + dependencies: + '@expressive-code/core': 0.41.4 + dev: false + + /@expressive-code/plugin-line-numbers@0.41.4: + resolution: {integrity: sha512-h7P0OQBvz4vikkV/XXyMecFsMPHZldm4Sx/AlZVsYFLMFTJ212M40bC1BTWupFw4Rd6mfDGimSNlK4EQuENaHA==} + dependencies: + '@expressive-code/core': 0.41.4 + dev: false + + /@expressive-code/plugin-shiki@0.41.4: + resolution: {integrity: sha512-zOc0tfWISODHnnpfRJyssTvSWVVe+gj08GcFYiR2a6M8fKF1w5CJkpgf7tTvnoUTuVmL1DHRmiQFUnpGjtRGog==} + dependencies: + '@expressive-code/core': 0.41.4 + shiki: 3.19.0 + dev: false + + /@expressive-code/plugin-text-markers@0.41.4: + resolution: {integrity: sha512-lGqbjtIuiY+UZ+z61kKIJAZtF7H5xoT8lkxANmeoVaat+H47O5A+rr5WLmD45ezprO/NTogxHsaMfqRCuQ4vlw==} + dependencies: + '@expressive-code/core': 0.41.4 + dev: false + + /@floating-ui/core@1.7.3: + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + dependencies: + '@floating-ui/utils': 0.2.10 + dev: false + + /@floating-ui/dom@1.7.4: + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 + dev: false + + /@floating-ui/utils@0.2.10: + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + dev: false + + /@gemini-wallet/core@0.2.0(viem@2.38.5): + resolution: {integrity: sha512-vv9aozWnKrrPWQ3vIFcWk7yta4hQW1Ie0fsNNPeXnjAxkbXr2hqMagEptLuMxpEP2W3mnRu05VDNKzcvAuuZDw==} + peerDependencies: + viem: '>=2.0.0' + dependencies: + '@metamask/rpc-errors': 7.0.2 + eventemitter3: 5.0.1 + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + transitivePeerDependencies: + - supports-color + dev: false + + /@img/colour@1.0.0: + resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + engines: {node: '>=18'} + requiresBuild: true + + /@img/sharp-darwin-arm64@0.34.5: + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + /@img/sharp-darwin-x64@0.34.5: + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + /@img/sharp-libvips-darwin-arm64@1.2.4: + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optional: true + + /@img/sharp-libvips-darwin-x64@1.2.4: + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + requiresBuild: true + optional: true + + /@img/sharp-libvips-linux-arm64@1.2.4: + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@img/sharp-libvips-linux-arm@1.2.4: + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + requiresBuild: true + optional: true + + /@img/sharp-libvips-linux-ppc64@1.2.4: + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + requiresBuild: true + optional: true + + /@img/sharp-libvips-linux-riscv64@1.2.4: + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + optional: true + + /@img/sharp-libvips-linux-s390x@1.2.4: + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + requiresBuild: true + optional: true + + /@img/sharp-libvips-linux-x64@1.2.4: + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@img/sharp-libvips-linuxmusl-arm64@1.2.4: + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@img/sharp-libvips-linuxmusl-x64@1.2.4: + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@img/sharp-linux-arm64@0.34.5: + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + /@img/sharp-linux-arm@0.34.5: + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + /@img/sharp-linux-ppc64@0.34.5: + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + /@img/sharp-linux-riscv64@0.34.5: + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + /@img/sharp-linux-s390x@0.34.5: + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + /@img/sharp-linux-x64@0.34.5: + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + /@img/sharp-linuxmusl-arm64@0.34.5: + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + /@img/sharp-linuxmusl-x64@0.34.5: + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + /@img/sharp-wasm32@0.34.5: + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + requiresBuild: true + dependencies: + '@emnapi/runtime': 1.7.1 + optional: true + + /@img/sharp-win32-arm64@0.34.5: + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + requiresBuild: true + optional: true + + /@img/sharp-win32-ia32@0.34.5: + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + requiresBuild: true + optional: true + + /@img/sharp-win32-x64@0.34.5: + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + requiresBuild: true + optional: true + + /@internationalized/date@3.10.0: + resolution: {integrity: sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw==} + dependencies: + '@swc/helpers': 0.5.17 + dev: false + + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.2 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + + /@jridgewell/gen-mapping@0.3.13: + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + /@jridgewell/remapping@2.3.5: + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + /@jridgewell/sourcemap-codec@1.5.5: + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + /@jridgewell/trace-mapping@0.3.31: + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + /@lit-labs/ssr-dom-shim@1.4.0: + resolution: {integrity: sha512-ficsEARKnmmW5njugNYKipTm4SFnbik7CXtoencDZzmzo/dQ+2Q0bgkzJuoJP20Aj0F+izzJjOqsnkd6F/o1bw==} + dev: false + + /@lit/react@1.0.8(@types/react@19.2.2): + resolution: {integrity: sha512-p2+YcF+JE67SRX3mMlJ1TKCSTsgyOVdAwd/nxp3NuV1+Cb6MWALbN6nT7Ld4tpmYofcE5kcaSY1YBB9erY+6fw==} + requiresBuild: true + peerDependencies: + '@types/react': 17 || 18 || 19 + dependencies: + '@types/react': 19.2.2 + dev: false + optional: true + + /@lit/reactive-element@2.1.1: + resolution: {integrity: sha512-N+dm5PAYdQ8e6UlywyyrgI2t++wFGXfHx+dSJ1oBrg6FAxUj40jId++EaRm80MKX5JnlH1sBsyZ5h0bcZKemCg==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.4.0 + dev: false + + /@mdx-js/mdx@3.1.1: + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + dependencies: + '@types/estree': 1.0.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdx': 2.0.13 + acorn: 8.15.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.15.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@melt-ui/svelte@0.86.6(svelte@5.42.3): + resolution: {integrity: sha512-Jer+M7DgIwT5IHfTayb4Iw/fkkxWNmC/mqn/nMh9JrbPbkxmyabfLQnhJ+JDn5HK77f84j34lubO3iqFtYAfMg==} + peerDependencies: + svelte: ^3.0.0 || ^4.0.0 || ^5.0.0-next.118 + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/dom': 1.7.4 + '@internationalized/date': 3.10.0 + dequal: 2.0.3 + focus-trap: 7.6.6 + nanoid: 5.1.6 + svelte: 5.42.3 + dev: false + + /@metamask/eth-json-rpc-provider@1.0.1: + resolution: {integrity: sha512-whiUMPlAOrVGmX8aKYVPvlKyG4CpQXiNNyt74vE1xb5sPvmx5oA7B/kOi/JdBvhGQq97U1/AVdXEdk2zkP8qyA==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@metamask/json-rpc-engine': 7.3.3 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 5.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@metamask/json-rpc-engine@7.3.3: + resolution: {integrity: sha512-dwZPq8wx9yV3IX2caLi9q9xZBw2XeIoYqdyihDDDpuHVCEiqadJLwqM3zy+uwf6F1QYQ65A8aOMQg1Uw7LMLNg==} + engines: {node: '>=16.0.0'} + requiresBuild: true + dependencies: + '@metamask/rpc-errors': 6.4.0 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 8.5.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@metamask/json-rpc-engine@8.0.2: + resolution: {integrity: sha512-IoQPmql8q7ABLruW7i4EYVHWUbF74yrp63bRuXV5Zf9BQwcn5H9Ww1eLtROYvI1bUXwOiHZ6qT5CWTrDc/t/AA==} + engines: {node: '>=16.0.0'} + requiresBuild: true + dependencies: + '@metamask/rpc-errors': 6.4.0 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 8.5.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@metamask/json-rpc-middleware-stream@7.0.2: + resolution: {integrity: sha512-yUdzsJK04Ev98Ck4D7lmRNQ8FPioXYhEUZOMS01LXW8qTvPGiRVXmVltj2p4wrLkh0vW7u6nv0mNl5xzC5Qmfg==} + engines: {node: '>=16.0.0'} + requiresBuild: true + dependencies: + '@metamask/json-rpc-engine': 8.0.2 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 8.5.0 + readable-stream: 3.6.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@metamask/object-multiplex@2.1.0: + resolution: {integrity: sha512-4vKIiv0DQxljcXwfpnbsXcfa5glMj5Zg9mqn4xpIWqkv6uJ2ma5/GtUfLFSxhlxnR8asRMv8dDmWya1Tc1sDFA==} + engines: {node: ^16.20 || ^18.16 || >=20} + requiresBuild: true + dependencies: + once: 1.4.0 + readable-stream: 3.6.2 + dev: false + + /@metamask/onboarding@1.0.1: + resolution: {integrity: sha512-FqHhAsCI+Vacx2qa5mAFcWNSrTcVGMNjzxVgaX8ECSny/BJ9/vgXP9V7WF/8vb9DltPeQkxr+Fnfmm6GHfmdTQ==} + requiresBuild: true + dependencies: + bowser: 2.12.1 + dev: false + + /@metamask/providers@16.1.0: + resolution: {integrity: sha512-znVCvux30+3SaUwcUGaSf+pUckzT5ukPRpcBmy+muBLC0yaWnBcvDqGfcsw6CBIenUdFrVoAFa8B6jsuCY/a+g==} + engines: {node: ^18.18 || >=20} + requiresBuild: true + dependencies: + '@metamask/json-rpc-engine': 8.0.2 + '@metamask/json-rpc-middleware-stream': 7.0.2 + '@metamask/object-multiplex': 2.1.0 + '@metamask/rpc-errors': 6.4.0 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 8.5.0 + detect-browser: 5.3.0 + extension-port-stream: 3.0.0 + fast-deep-equal: 3.1.3 + is-stream: 2.0.1 + readable-stream: 3.6.2 + webextension-polyfill: 0.10.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@metamask/rpc-errors@6.4.0: + resolution: {integrity: sha512-1ugFO1UoirU2esS3juZanS/Fo8C8XYocCuBpfZI5N7ECtoG+zu0wF+uWZASik6CkO6w9n/Iebt4iI4pT0vptpg==} + engines: {node: '>=16.0.0'} + requiresBuild: true + dependencies: + '@metamask/utils': 9.3.0 + fast-safe-stringify: 2.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@metamask/rpc-errors@7.0.2: + resolution: {integrity: sha512-YYYHsVYd46XwY2QZzpGeU4PSdRhHdxnzkB8piWGvJW2xbikZ3R+epAYEL4q/K8bh9JPTucsUdwRFnACor1aOYw==} + engines: {node: ^18.20 || ^20.17 || >=22} + requiresBuild: true + dependencies: + '@metamask/utils': 11.8.1 + fast-safe-stringify: 2.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@metamask/safe-event-emitter@2.0.0: + resolution: {integrity: sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==} + requiresBuild: true + dev: false + + /@metamask/safe-event-emitter@3.1.2: + resolution: {integrity: sha512-5yb2gMI1BDm0JybZezeoX/3XhPDOtTbcFvpTXM9kxsoZjPZFh4XciqRbpD6N86HYZqWDhEaKUDuOyR0sQHEjMA==} + engines: {node: '>=12.0.0'} + requiresBuild: true + dev: false + + /@metamask/sdk-analytics@0.0.5: + resolution: {integrity: sha512-fDah+keS1RjSUlC8GmYXvx6Y26s3Ax1U9hGpWb6GSY5SAdmTSIqp2CvYy6yW0WgLhnYhW+6xERuD0eVqV63QIQ==} + requiresBuild: true + dependencies: + openapi-fetch: 0.13.8 + dev: false + + /@metamask/sdk-communication-layer@0.33.1(cross-fetch@4.1.0)(eciesjs@0.4.16)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1): + resolution: {integrity: sha512-0bI9hkysxcfbZ/lk0T2+aKVo1j0ynQVTuB3sJ5ssPWlz+Z3VwveCkP1O7EVu1tsVVCb0YV5WxK9zmURu2FIiaA==} + requiresBuild: true + peerDependencies: + cross-fetch: ^4.0.0 + eciesjs: '*' + eventemitter2: ^6.4.9 + readable-stream: ^3.6.2 + socket.io-client: ^4.5.1 + dependencies: + '@metamask/sdk-analytics': 0.0.5 + bufferutil: 4.0.9 + cross-fetch: 4.1.0 + date-fns: 2.30.0 + debug: 4.3.4 + eciesjs: 0.4.16 + eventemitter2: 6.4.9 + readable-stream: 3.6.2 + socket.io-client: 4.8.1 + utf-8-validate: 5.0.10 + uuid: 8.3.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@metamask/sdk-install-modal-web@0.32.1: + resolution: {integrity: sha512-MGmAo6qSjf1tuYXhCu2EZLftq+DSt5Z7fsIKr2P+lDgdTPWgLfZB1tJKzNcwKKOdf6q9Qmmxn7lJuI/gq5LrKw==} + requiresBuild: true + dependencies: + '@paulmillr/qr': 0.2.1 + dev: false + + /@metamask/sdk@0.33.1: + resolution: {integrity: sha512-1mcOQVGr9rSrVcbKPNVzbZ8eCl1K0FATsYH3WJ/MH4WcZDWGECWrXJPNMZoEAkLxWiMe8jOQBumg2pmcDa9zpQ==} + dependencies: + '@babel/runtime': 7.28.4 + '@metamask/onboarding': 1.0.1 + '@metamask/providers': 16.1.0 + '@metamask/sdk-analytics': 0.0.5 + '@metamask/sdk-communication-layer': 0.33.1(cross-fetch@4.1.0)(eciesjs@0.4.16)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.1) + '@metamask/sdk-install-modal-web': 0.32.1 + '@paulmillr/qr': 0.2.1 + bowser: 2.12.1 + cross-fetch: 4.1.0 + debug: 4.3.4 + eciesjs: 0.4.16 + eth-rpc-errors: 4.0.3 + eventemitter2: 6.4.9 + obj-multiplex: 1.0.0 + pump: 3.0.3 + readable-stream: 3.6.2 + socket.io-client: 4.8.1 + tslib: 2.8.1 + util: 0.12.5 + uuid: 8.3.2 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /@metamask/superstruct@3.2.1: + resolution: {integrity: sha512-fLgJnDOXFmuVlB38rUN5SmU7hAFQcCjrg3Vrxz67KTY7YHFnSNEKvX4avmEBdOI0yTCxZjwMCFEqsC8k2+Wd3g==} + engines: {node: '>=16.0.0'} + requiresBuild: true + dev: false + + /@metamask/utils@11.8.1: + resolution: {integrity: sha512-DIbsNUyqWLFgqJlZxi1OOCMYvI23GqFCvNJAtzv8/WXWzJfnJnvp1M24j7VvUe3URBi3S86UgQ7+7aWU9p/cnQ==} + engines: {node: ^18.18 || ^20.14 || >=22} + requiresBuild: true + dependencies: + '@ethereumjs/tx': 4.2.0 + '@metamask/superstruct': 3.2.1 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + '@types/debug': 4.1.12 + '@types/lodash': 4.17.20 + debug: 4.4.3 + lodash: 4.17.21 + pony-cause: 2.1.11 + semver: 7.7.3 + uuid: 9.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@metamask/utils@5.0.2: + resolution: {integrity: sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@ethereumjs/tx': 4.2.0 + '@types/debug': 4.1.12 + debug: 4.4.3 + semver: 7.7.3 + superstruct: 1.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@metamask/utils@8.5.0: + resolution: {integrity: sha512-I6bkduevXb72TIM9q2LRO63JSsF9EXduh3sBr9oybNX2hNNpr/j1tEjXrsG0Uabm4MJ1xkGAQEMwifvKZIkyxQ==} + engines: {node: '>=16.0.0'} + requiresBuild: true + dependencies: + '@ethereumjs/tx': 4.2.0 + '@metamask/superstruct': 3.2.1 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + '@types/debug': 4.1.12 + debug: 4.4.3 + pony-cause: 2.1.11 + semver: 7.7.3 + uuid: 9.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@metamask/utils@9.3.0: + resolution: {integrity: sha512-w8CVbdkDrVXFJbfBSlDfafDR6BAkpDmv1bC1UJVCoVny5tW2RKAdn9i68Xf7asYT4TnUhl/hN4zfUiKQq9II4g==} + engines: {node: '>=16.0.0'} + requiresBuild: true + dependencies: + '@ethereumjs/tx': 4.2.0 + '@metamask/superstruct': 3.2.1 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + '@types/debug': 4.1.12 + debug: 4.4.3 + pony-cause: 2.1.11 + semver: 7.7.3 + uuid: 9.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@msgpack/msgpack@3.1.2: + resolution: {integrity: sha512-JEW4DEtBzfe8HvUYecLU9e6+XJnKDlUAIve8FvPzF3Kzs6Xo/KuZkZJsDH0wJXl/qEZbeeE7edxDNY3kMs39hQ==} + engines: {node: '>= 18'} + dev: false + + /@noble/ciphers@1.2.1: + resolution: {integrity: sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA==} + engines: {node: ^14.21.3 || >=16} + requiresBuild: true + dev: false + + /@noble/ciphers@1.3.0: + resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} + engines: {node: ^14.21.3 || >=16} + dev: false + + /@noble/curves@1.4.2: + resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} + requiresBuild: true + dependencies: + '@noble/hashes': 1.4.0 + dev: false + + /@noble/curves@1.8.0: + resolution: {integrity: sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ==} + engines: {node: ^14.21.3 || >=16} + requiresBuild: true + dependencies: + '@noble/hashes': 1.7.0 + dev: false + + /@noble/curves@1.8.1: + resolution: {integrity: sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==} + engines: {node: ^14.21.3 || >=16} + requiresBuild: true + dependencies: + '@noble/hashes': 1.7.1 + dev: false + + /@noble/curves@1.9.1: + resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==} + engines: {node: ^14.21.3 || >=16} + dependencies: + '@noble/hashes': 1.8.0 + dev: false + + /@noble/curves@1.9.7: + resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} + engines: {node: ^14.21.3 || >=16} + dependencies: + '@noble/hashes': 1.8.0 + dev: false + + /@noble/hashes@1.4.0: + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + requiresBuild: true + dev: false + + /@noble/hashes@1.7.0: + resolution: {integrity: sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w==} + engines: {node: ^14.21.3 || >=16} + requiresBuild: true + dev: false + + /@noble/hashes@1.7.1: + resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==} + engines: {node: ^14.21.3 || >=16} + requiresBuild: true + dev: false + + /@noble/hashes@1.8.0: + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + dev: false + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + /@oslojs/encoding@1.1.0: + resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + + /@pagefind/darwin-arm64@1.4.0: + resolution: {integrity: sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@pagefind/darwin-x64@1.4.0: + resolution: {integrity: sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@pagefind/freebsd-x64@1.4.0: + resolution: {integrity: sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@pagefind/linux-arm64@1.4.0: + resolution: {integrity: sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@pagefind/linux-x64@1.4.0: + resolution: {integrity: sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@pagefind/windows-x64@1.4.0: + resolution: {integrity: sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@paulmillr/qr@0.2.1: + resolution: {integrity: sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ==} + deprecated: 'The package is now available as "qr": npm install qr' + requiresBuild: true + dev: false + + /@phosphor-icons/webcomponents@2.1.5: + resolution: {integrity: sha512-JcvQkZxvcX2jK+QCclm8+e8HXqtdFW9xV4/kk2aL9Y3dJA2oQVt+pzbv1orkumz3rfx4K9mn9fDoMr1He1yr7Q==} + dependencies: + lit: 3.3.0 + dev: false + + /@pinojs/redact@0.4.0: + resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + dev: false + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + optional: true + + /@polka/url@1.0.0-next.29: + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + dev: false + + /@posthog/core@1.4.0: + resolution: {integrity: sha512-jmW8/I//YOHAfjzokqas+Qtc2T57Ux8d2uIJu7FLcMGxywckHsl6od59CD18jtUzKToQdjQhV6Y3429qj+KeNw==} + dev: false + + /@reown/appkit-adapter-wagmi@1.8.12(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(@wagmi/core@2.22.1)(react@16.14.0)(typescript@5.9.3)(viem@2.38.5)(wagmi@2.19.0)(zod@3.25.76): + resolution: {integrity: sha512-Nub0t4sNi3s6v/UXJmo7w1AGFHRWliTg+82mAKMxo67LPLsHHXII1zDcTgU2zNe7tyGlrABkqFhmFoGdVlTgEQ==} + peerDependencies: + '@wagmi/core': '>=2.21.2' + viem: '>=2.37.9' + wagmi: '>=2.17.5' + dependencies: + '@reown/appkit': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-common': 1.8.12(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-polyfills': 1.8.12 + '@reown/appkit-scaffold-ui': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(valtio@2.1.7)(zod@3.25.76) + '@reown/appkit-utils': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(valtio@2.1.7)(zod@3.25.76) + '@reown/appkit-wallet': 1.8.12(typescript@5.9.3) + '@wagmi/core': 2.22.1(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(viem@2.38.5) + '@walletconnect/universal-provider': 2.22.4(typescript@5.9.3)(zod@3.25.76) + valtio: 2.1.7(@types/react@19.2.2)(react@16.14.0) + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + wagmi: 2.19.0(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(viem@2.38.5)(zod@3.25.76) + optionalDependencies: + '@wagmi/connectors': 6.1.1(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(@wagmi/core@2.22.1)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(viem@2.38.5)(wagmi@2.19.0)(zod@3.25.76) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@tanstack/react-query' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - expo-auth-session + - expo-crypto + - expo-web-browser + - immer + - ioredis + - react + - react-native + - supports-color + - typescript + - uploadthing + - use-sync-external-store + - utf-8-validate + - zod + dev: false + + /@reown/appkit-common@1.7.8(typescript@5.9.3)(zod@3.22.4): + resolution: {integrity: sha512-ridIhc/x6JOp7KbDdwGKY4zwf8/iK8EYBl+HtWrruutSLwZyVi5P8WaZa+8iajL6LcDcDF7LoyLwMTym7SRuwQ==} + requiresBuild: true + dependencies: + big.js: 6.2.2 + dayjs: 1.11.13 + viem: 2.38.5(typescript@5.9.3)(zod@3.22.4) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + dev: false + + /@reown/appkit-common@1.7.8(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-ridIhc/x6JOp7KbDdwGKY4zwf8/iK8EYBl+HtWrruutSLwZyVi5P8WaZa+8iajL6LcDcDF7LoyLwMTym7SRuwQ==} + requiresBuild: true + dependencies: + big.js: 6.2.2 + dayjs: 1.11.13 + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + dev: false + + /@reown/appkit-common@1.8.12(typescript@5.9.3)(zod@3.22.4): + resolution: {integrity: sha512-rYJe4FbHA/vJT9OsvmkqKw2UCeFWcILXRDiSkM/wPatm1fbD1ZMxqlo9uNGdxJ15XzCKYZy+wAIrFtupTz12eg==} + dependencies: + big.js: 6.2.2 + dayjs: 1.11.13 + viem: 2.38.5(typescript@5.9.3)(zod@3.22.4) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + dev: false + + /@reown/appkit-common@1.8.12(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-rYJe4FbHA/vJT9OsvmkqKw2UCeFWcILXRDiSkM/wPatm1fbD1ZMxqlo9uNGdxJ15XzCKYZy+wAIrFtupTz12eg==} + dependencies: + big.js: 6.2.2 + dayjs: 1.11.13 + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + dev: false + + /@reown/appkit-controllers@1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-IdXlJlivrlj6m63VsGLsjtPHHsTWvKGVzWIP1fXZHVqmK+rZCBDjCi9j267Rb9/nYRGHWBtlFQhO8dK35WfeDA==} + requiresBuild: true + dependencies: + '@reown/appkit-common': 1.7.8(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-wallet': 1.7.8(typescript@5.9.3) + '@walletconnect/universal-provider': 2.21.0(typescript@5.9.3)(zod@3.25.76) + valtio: 1.13.2(@types/react@19.2.2)(react@16.14.0) + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@reown/appkit-controllers@1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-D63A5n6VCdm6wGFqfcmUI9T66CD6rrynTPV2GGjMWKNTgf/uiNJSDwJaSPncd3S3fQh32x6WZxUsM/c3eBzyeQ==} + dependencies: + '@reown/appkit-common': 1.8.12(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-wallet': 1.8.12(typescript@5.9.3) + '@walletconnect/universal-provider': 2.22.4(typescript@5.9.3)(zod@3.25.76) + valtio: 2.1.7(@types/react@19.2.2)(react@16.14.0) + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@reown/appkit-pay@1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-OSGQ+QJkXx0FEEjlpQqIhT8zGJKOoHzVnyy/0QFrl3WrQTjCzg0L6+i91Ad5Iy1zb6V5JjqtfIFpRVRWN4M3pw==} + requiresBuild: true + dependencies: + '@reown/appkit-common': 1.7.8(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(valtio@1.13.2)(zod@3.25.76) + lit: 3.3.0 + valtio: 1.13.2(@types/react@19.2.2)(react@16.14.0) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@reown/appkit-pay@1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-rjuJvxXu+6l7AAk6gLY49h7+19/zRVwDaZb9XZimDqy9TE/ASB5TG0sECLxKcqi2Ov7PkSdWyvha5dubjDkLHQ==} + dependencies: + '@reown/appkit-common': 1.8.12(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-ui': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-utils': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(valtio@2.1.7)(zod@3.25.76) + lit: 3.3.0 + valtio: 2.1.7(@types/react@19.2.2)(react@16.14.0) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@reown/appkit-polyfills@1.7.8: + resolution: {integrity: sha512-W/kq786dcHHAuJ3IV2prRLEgD/2iOey4ueMHf1sIFjhhCGMynMkhsOhQMUH0tzodPqUgAC494z4bpIDYjwWXaA==} + requiresBuild: true + dependencies: + buffer: 6.0.3 + dev: false + + /@reown/appkit-polyfills@1.8.12: + resolution: {integrity: sha512-ieGi0vDnXzsL0h0p6Xk8+5D1xouIFbMitmLcccTeO4UEZfvp7PNYJvBvRaq3F184E11CmKz9mey+b7JYLykPyQ==} + dependencies: + buffer: 6.0.3 + dev: false + + /@reown/appkit-scaffold-ui@1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(valtio@1.13.2)(zod@3.25.76): + resolution: {integrity: sha512-RCeHhAwOrIgcvHwYlNWMcIDibdI91waaoEYBGw71inE0kDB8uZbE7tE6DAXJmDkvl0qPh+DqlC4QbJLF1FVYdQ==} + requiresBuild: true + dependencies: + '@reown/appkit-common': 1.7.8(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(valtio@1.13.2)(zod@3.25.76) + '@reown/appkit-wallet': 1.7.8(typescript@5.9.3) + lit: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - valtio + - zod + dev: false + + /@reown/appkit-scaffold-ui@1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(valtio@2.1.7)(zod@3.25.76): + resolution: {integrity: sha512-XGmy6s9bTb3lOz+chsB/WFPVbOIX6KjawOTBr2zaLJZbbmoQszfret4IlDCxLe069p5zbTvyPAiw43w5pXTefw==} + dependencies: + '@reown/appkit-common': 1.8.12(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-ui': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-utils': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(valtio@2.1.7)(zod@3.25.76) + '@reown/appkit-wallet': 1.8.12(typescript@5.9.3) + lit: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - valtio + - zod + dev: false + + /@reown/appkit-ui@1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-1hjCKjf6FLMFzrulhl0Y9Vb9Fu4royE+SXCPSWh4VhZhWqlzUFc7kutnZKx8XZFVQH4pbBvY62SpRC93gqoHow==} + requiresBuild: true + dependencies: + '@reown/appkit-common': 1.7.8(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-wallet': 1.7.8(typescript@5.9.3) + lit: 3.3.0 + qrcode: 1.5.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@reown/appkit-ui@1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-Ozn5JRkWpLDJLLIHMqgJzgsTla0g1jdn423SvYL3IuoUeJdaLFkO7DfbnezFJlpZJkgSckWEnrrQFHlMDXdzMQ==} + dependencies: + '@phosphor-icons/webcomponents': 2.1.5 + '@reown/appkit-common': 1.8.12(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-wallet': 1.8.12(typescript@5.9.3) + lit: 3.3.0 + qrcode: 1.5.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@reown/appkit-utils@1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(valtio@1.13.2)(zod@3.25.76): + resolution: {integrity: sha512-8X7UvmE8GiaoitCwNoB86pttHgQtzy4ryHZM9kQpvjQ0ULpiER44t1qpVLXNM4X35O0v18W0Dk60DnYRMH2WRw==} + requiresBuild: true + peerDependencies: + valtio: 1.13.2 + dependencies: + '@reown/appkit-common': 1.7.8(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-polyfills': 1.7.8 + '@reown/appkit-wallet': 1.7.8(typescript@5.9.3) + '@walletconnect/logger': 2.1.2 + '@walletconnect/universal-provider': 2.21.0(typescript@5.9.3)(zod@3.25.76) + valtio: 1.13.2(@types/react@19.2.2)(react@16.14.0) + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@reown/appkit-utils@1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(valtio@2.1.7)(zod@3.25.76): + resolution: {integrity: sha512-XSzq42sHO9aP/YUwhrwtGd7poWFgCwgLH4OUmLdZkiTLB5+c7fp/sR4CbmaEDxkyX7O6VMxaAYDaUOBomdhRyw==} + peerDependencies: + valtio: 2.1.7 + dependencies: + '@reown/appkit-common': 1.8.12(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-polyfills': 1.8.12 + '@reown/appkit-wallet': 1.8.12(typescript@5.9.3) + '@wallet-standard/wallet': 1.1.0 + '@walletconnect/logger': 3.0.0 + '@walletconnect/universal-provider': 2.22.4(typescript@5.9.3)(zod@3.25.76) + valtio: 2.1.7(@types/react@19.2.2)(react@16.14.0) + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@reown/appkit-wallet@1.7.8(typescript@5.9.3): + resolution: {integrity: sha512-kspz32EwHIOT/eg/ZQbFPxgXq0B/olDOj3YMu7gvLEFz4xyOFd/wgzxxAXkp5LbG4Cp++s/elh79rVNmVFdB9A==} + requiresBuild: true + dependencies: + '@reown/appkit-common': 1.7.8(typescript@5.9.3)(zod@3.22.4) + '@reown/appkit-polyfills': 1.7.8 + '@walletconnect/logger': 2.1.2 + zod: 3.22.4 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + dev: false + + /@reown/appkit-wallet@1.8.12(typescript@5.9.3): + resolution: {integrity: sha512-HvRyHvCFZlVYfzO1viXYKk8mPxZUrrQuFV3DjfARGZdhoSJ2BmR3qLcpAy+1waTLIlBUmhPggYnEnKpUwCfQGw==} + dependencies: + '@reown/appkit-common': 1.8.12(typescript@5.9.3)(zod@3.22.4) + '@reown/appkit-polyfills': 1.8.12 + '@walletconnect/logger': 3.0.0 + zod: 3.22.4 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + dev: false + + /@reown/appkit@1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-51kTleozhA618T1UvMghkhKfaPcc9JlKwLJ5uV+riHyvSoWPKPRIa5A6M1Wano5puNyW0s3fwywhyqTHSilkaA==} + requiresBuild: true + dependencies: + '@reown/appkit-common': 1.7.8(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-pay': 1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-polyfills': 1.7.8 + '@reown/appkit-scaffold-ui': 1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(valtio@1.13.2)(zod@3.25.76) + '@reown/appkit-ui': 1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-utils': 1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(valtio@1.13.2)(zod@3.25.76) + '@reown/appkit-wallet': 1.7.8(typescript@5.9.3) + '@walletconnect/types': 2.21.0 + '@walletconnect/universal-provider': 2.21.0(typescript@5.9.3)(zod@3.25.76) + bs58: 6.0.0 + valtio: 1.13.2(@types/react@19.2.2)(react@16.14.0) + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@reown/appkit@1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-DnIaJ+LEDXAd55o1wdBB8CSKLR4MLCoHQW32KkiRHmSuOsUKxjfpvtbjgl95cVXG7Co8J6Hg9tXOYLtdJDZeTQ==} + requiresBuild: true + dependencies: + '@reown/appkit-common': 1.8.12(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-pay': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-polyfills': 1.8.12 + '@reown/appkit-scaffold-ui': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(valtio@2.1.7)(zod@3.25.76) + '@reown/appkit-ui': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-utils': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(valtio@2.1.7)(zod@3.25.76) + '@reown/appkit-wallet': 1.8.12(typescript@5.9.3) + '@walletconnect/universal-provider': 2.22.4(typescript@5.9.3)(zod@3.25.76) + bs58: 6.0.0 + semver: 7.7.2 + valtio: 2.1.7(@types/react@19.2.2)(react@16.14.0) + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + optionalDependencies: + '@lit/react': 1.0.8(@types/react@19.2.2) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@rollup/plugin-commonjs@28.0.9(rollup@4.52.5): + resolution: {integrity: sha512-PIR4/OHZ79romx0BVVll/PkwWpJ7e5lsqFa3gFfcrFPWwLXLV39JVUzQV9RKjWerE7B845Hqjj9VYlQeieZ2dA==} + engines: {node: '>=16.0.0 || 14 >= 14.17'} + peerDependencies: + rollup: ^2.68.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.52.5) + commondir: 1.0.1 + estree-walker: 2.0.2 + fdir: 6.5.0(picomatch@4.0.3) + is-reference: 1.2.1 + magic-string: 0.30.21 + picomatch: 4.0.3 + rollup: 4.52.5 + dev: false + + /@rollup/plugin-json@6.1.0(rollup@4.52.5): + resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.52.5) + rollup: 4.52.5 + dev: false + + /@rollup/plugin-node-resolve@16.0.3(rollup@4.52.5): + resolution: {integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.52.5) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.11 + rollup: 4.52.5 + dev: false + + /@rollup/plugin-replace@6.0.2: + resolution: {integrity: sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.52.5) + magic-string: 0.30.21 + dev: false + + /@rollup/pluginutils@5.3.0(rollup@4.52.5): + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + rollup: 4.52.5 + + /@rollup/rollup-android-arm-eabi@4.52.5: + resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} + cpu: [arm] + os: [android] + requiresBuild: true + optional: true + + /@rollup/rollup-android-arm64@4.52.5: + resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} + cpu: [arm64] + os: [android] + requiresBuild: true + optional: true + + /@rollup/rollup-darwin-arm64@4.52.5: + resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optional: true + + /@rollup/rollup-darwin-x64@4.52.5: + resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} + cpu: [x64] + os: [darwin] + requiresBuild: true + optional: true + + /@rollup/rollup-freebsd-arm64@4.52.5: + resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + optional: true + + /@rollup/rollup-freebsd-x64@4.52.5: + resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} + cpu: [x64] + os: [freebsd] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.52.5: + resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} + cpu: [arm] + os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-arm-musleabihf@4.52.5: + resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} + cpu: [arm] + os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.52.5: + resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.52.5: + resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-loong64-gnu@4.52.5: + resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} + cpu: [loong64] + os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-ppc64-gnu@4.52.5: + resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} + cpu: [ppc64] + os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.52.5: + resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-riscv64-musl@4.52.5: + resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-s390x-gnu@4.52.5: + resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} + cpu: [s390x] + os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.52.5: + resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.52.5: + resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-openharmony-arm64@4.52.5: + resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} + cpu: [arm64] + os: [openharmony] + requiresBuild: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.52.5: + resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} + cpu: [arm64] + os: [win32] + requiresBuild: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.52.5: + resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} + cpu: [ia32] + os: [win32] + requiresBuild: true + optional: true + + /@rollup/rollup-win32-x64-gnu@4.52.5: + resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} + cpu: [x64] + os: [win32] + requiresBuild: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.52.5: + resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} + cpu: [x64] + os: [win32] + requiresBuild: true + optional: true + + /@safe-global/safe-apps-provider@0.18.6(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-4LhMmjPWlIO8TTDC2AwLk44XKXaK6hfBTWyljDm0HQ6TWlOEijVWNrt2s3OCVMSxlXAcEzYfqyu1daHZooTC2Q==} + dependencies: + '@safe-global/safe-apps-sdk': 9.1.0(typescript@5.9.3)(zod@3.25.76) + events: 3.3.0 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + dev: false + + /@safe-global/safe-apps-sdk@9.1.0(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-N5p/ulfnnA2Pi2M3YeWjULeWbjo7ei22JwU/IXnhoHzKq3pYCN6ynL9mJBOlvDVv892EgLPCWCOwQk/uBT2v0Q==} + dependencies: + '@safe-global/safe-gateway-typescript-sdk': 3.23.1 + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + dev: false + + /@safe-global/safe-gateway-typescript-sdk@3.23.1: + resolution: {integrity: sha512-6ORQfwtEJYpalCeVO21L4XXGSdbEMfyp2hEv6cP82afKXSwvse6d3sdelgaPWUxHIsFRkWvHDdzh8IyyKHZKxw==} + engines: {node: '>=16'} + requiresBuild: true + dev: false + + /@santiment-network/ui@0.5.282(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-i9b60WGxnFA90bLI/jtL6uPSl06AkO/RYhMV9Nxrp9vbiNmOSdoLrDrvJIjqoHIQVCNefDTakYWT+kI/Ko/+eA==} + peerDependencies: + react: ^16.8.0 + react-dom: ^16.8.0 + dependencies: + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + dev: false + + /@scure/base@1.1.9: + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} + requiresBuild: true + dev: false + + /@scure/base@1.2.6: + resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} + dev: false + + /@scure/bip32@1.4.0: + resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} + requiresBuild: true + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.9 + dev: false + + /@scure/bip32@1.6.2: + resolution: {integrity: sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==} + requiresBuild: true + dependencies: + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@scure/base': 1.2.6 + dev: false + + /@scure/bip32@1.7.0: + resolution: {integrity: sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==} + dependencies: + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + dev: false + + /@scure/bip39@1.3.0: + resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} + requiresBuild: true + dependencies: + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.9 + dev: false + + /@scure/bip39@1.5.4: + resolution: {integrity: sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==} + requiresBuild: true + dependencies: + '@noble/hashes': 1.7.1 + '@scure/base': 1.2.6 + dev: false + + /@scure/bip39@1.6.0: + resolution: {integrity: sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==} + dependencies: + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + dev: false + + /@shikijs/core@3.19.0: + resolution: {integrity: sha512-L7SrRibU7ZoYi1/TrZsJOFAnnHyLTE1SwHG1yNWjZIVCqjOEmCSuK2ZO9thnRbJG6TOkPp+Z963JmpCNw5nzvA==} + dependencies: + '@shikijs/types': 3.19.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + /@shikijs/engine-javascript@3.19.0: + resolution: {integrity: sha512-ZfWJNm2VMhKkQIKT9qXbs76RRcT0SF/CAvEz0+RkpUDAoDaCx0uFdCGzSRiD9gSlhm6AHkjdieOBJMaO2eC1rQ==} + dependencies: + '@shikijs/types': 3.19.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.4 + + /@shikijs/engine-oniguruma@3.19.0: + resolution: {integrity: sha512-1hRxtYIJfJSZeM5ivbUXv9hcJP3PWRo5prG/V2sWwiubUKTa+7P62d2qxCW8jiVFX4pgRHhnHNp+qeR7Xl+6kg==} + dependencies: + '@shikijs/types': 3.19.0 + '@shikijs/vscode-textmate': 10.0.2 + + /@shikijs/langs@3.19.0: + resolution: {integrity: sha512-dBMFzzg1QiXqCVQ5ONc0z2ebyoi5BKz+MtfByLm0o5/nbUu3Iz8uaTCa5uzGiscQKm7lVShfZHU1+OG3t5hgwg==} + dependencies: + '@shikijs/types': 3.19.0 + + /@shikijs/themes@3.19.0: + resolution: {integrity: sha512-H36qw+oh91Y0s6OlFfdSuQ0Ld+5CgB/VE6gNPK+Hk4VRbVG/XQgkjnt4KzfnnoO6tZPtKJKHPjwebOCfjd6F8A==} + dependencies: + '@shikijs/types': 3.19.0 + + /@shikijs/types@3.19.0: + resolution: {integrity: sha512-Z2hdeEQlzuntf/BZpFG8a+Fsw9UVXdML7w0o3TgSXV3yNESGon+bs9ITkQb3Ki7zxoXOOu5oJWqZ2uto06V9iQ==} + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + /@shikijs/vscode-textmate@10.0.2: + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + /@socket.io/component-emitter@3.1.2: + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + requiresBuild: true + dev: false + + /@standard-schema/spec@1.0.0: + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + dev: false + + /@stripe/stripe-js@4.10.0: + resolution: {integrity: sha512-KrMOL+sH69htCIXCaZ4JluJ35bchuCCznyPyrbN8JXSGQfwBI1SuIEMZNwvy8L8ykj29t6sa5BAAiL7fNoLZ8A==} + engines: {node: '>=12.16'} + dev: false + + /@sveltejs/acorn-typescript@1.0.6(acorn@8.15.0): + resolution: {integrity: sha512-4awhxtMh4cx9blePWl10HRHj8Iivtqj+2QdDCSMDzxG+XKa9+VCNupQuCuvzEhYPzZSrX+0gC+0lHA/0fFKKQQ==} + peerDependencies: + acorn: ^8.9.0 + dependencies: + acorn: 8.15.0 + + /@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.48.2): + resolution: {integrity: sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ==} + peerDependencies: + '@sveltejs/kit': ^2.0.0 + dependencies: + '@sveltejs/kit': 2.48.2(@sveltejs/vite-plugin-svelte@5.1.1)(svelte@5.42.3)(vite@7.1.12) + import-meta-resolve: 4.2.0 + dev: false + + /@sveltejs/adapter-node@5.4.0(@sveltejs/kit@2.48.2): + resolution: {integrity: sha512-NMsrwGVPEn+J73zH83Uhss/hYYZN6zT3u31R3IHAn3MiKC3h8fjmIAhLfTSOeNHr5wPYfjjMg8E+1gyFgyrEcQ==} + peerDependencies: + '@sveltejs/kit': ^2.4.0 + dependencies: + '@rollup/plugin-commonjs': 28.0.9(rollup@4.52.5) + '@rollup/plugin-json': 6.1.0(rollup@4.52.5) + '@rollup/plugin-node-resolve': 16.0.3(rollup@4.52.5) + '@sveltejs/kit': 2.48.2(@sveltejs/vite-plugin-svelte@5.1.1)(svelte@5.42.3)(vite@7.1.12) + rollup: 4.52.5 + dev: false + + /@sveltejs/kit@2.48.2(@sveltejs/vite-plugin-svelte@5.1.1)(svelte@5.42.3)(vite@7.1.12): + resolution: {integrity: sha512-WIgVMGt+b9OxPDtu0Txow28RsBrLoV3wr2QoUxEHd4CHbpxbqKQf2SIEzd+SE+bqrUL2D5MxBeQBdY+t7o6n1A==} + engines: {node: '>=18.13'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 + svelte: ^4.0.0 || ^5.0.0-next.0 + vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + dependencies: + '@standard-schema/spec': 1.0.0 + '@sveltejs/acorn-typescript': 1.0.6(acorn@8.15.0) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.42.3)(vite@7.1.12) + '@types/cookie': 0.6.0 + acorn: 8.15.0 + cookie: 0.6.0 + devalue: 5.6.0 + esm-env: 1.2.2 + kleur: 4.1.5 + magic-string: 0.30.21 + mrmime: 2.0.1 + sade: 1.8.1 + set-cookie-parser: 2.7.2 + sirv: 3.0.2 + svelte: 5.42.3 + vite: 7.1.12 + dev: false + + /@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1)(svelte@5.42.3)(vite@6.4.1): + resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^5.0.0 + svelte: ^5.0.0 + vite: ^6.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.42.3)(vite@6.4.1) + debug: 4.4.3 + svelte: 5.42.3 + vite: 6.4.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1)(svelte@5.42.3)(vite@7.1.12): + resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^5.0.0 + svelte: ^5.0.0 + vite: ^6.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.42.3)(vite@7.1.12) + debug: 4.4.3 + svelte: 5.42.3 + vite: 7.1.12 + transitivePeerDependencies: + - supports-color + dev: false + + /@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.42.3)(vite@6.4.1): + resolution: {integrity: sha512-Y1Cs7hhTc+a5E9Va/xwKlAJoariQyHY+5zBgCZg4PFWNYQ1nMN9sjK1zhw1gK69DuqVP++sht/1GZg1aRwmAXQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} + peerDependencies: + svelte: ^5.0.0 + vite: ^6.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1)(svelte@5.42.3)(vite@6.4.1) + debug: 4.4.3 + deepmerge: 4.3.1 + kleur: 4.1.5 + magic-string: 0.30.21 + svelte: 5.42.3 + vite: 6.4.1 + vitefu: 1.1.1(vite@6.4.1) + transitivePeerDependencies: + - supports-color + dev: true + + /@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.42.3)(vite@7.1.12): + resolution: {integrity: sha512-Y1Cs7hhTc+a5E9Va/xwKlAJoariQyHY+5zBgCZg4PFWNYQ1nMN9sjK1zhw1gK69DuqVP++sht/1GZg1aRwmAXQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} + peerDependencies: + svelte: ^5.0.0 + vite: ^6.0.0 + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1)(svelte@5.42.3)(vite@7.1.12) + debug: 4.4.3 + deepmerge: 4.3.1 + kleur: 4.1.5 + magic-string: 0.30.21 + svelte: 5.42.3 + vite: 7.1.12 + vitefu: 1.1.1(vite@7.1.12) + transitivePeerDependencies: + - supports-color + dev: false + + /@swc/helpers@0.5.17: + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + dependencies: + tslib: 2.8.1 + + /@tanstack/query-core@5.90.5: + resolution: {integrity: sha512-wLamYp7FaDq6ZnNehypKI5fNvxHPfTYylE0m/ZpuuzJfJqhR5Pxg9gvGBHZx4n7J+V5Rg5mZxHHTlv25Zt5u+w==} + dev: false + + /@tanstack/react-query@5.90.5(react@16.14.0): + resolution: {integrity: sha512-pN+8UWpxZkEJ/Rnnj2v2Sxpx1WFlaa9L6a4UO89p6tTQbeo+m0MS8oYDjbggrR8QcTyjKoYWKS3xJQGr3ExT8Q==} + peerDependencies: + react: ^18 || ^19 + dependencies: + '@tanstack/query-core': 5.90.5 + react: 16.14.0 + dev: false + + /@trivago/prettier-plugin-sort-imports@6.0.0(prettier-plugin-svelte@3.4.0)(prettier@3.7.2)(svelte@5.42.3): + resolution: {integrity: sha512-Xarx55ow0R8oC7ViL5fPmDsg1EBa1dVhyZFVbFXNtPPJyW2w9bJADIla8YFSaNG9N06XfcklA9O9vmw4noNxkQ==} + engines: {node: '>= 20'} + peerDependencies: + '@vue/compiler-sfc': 3.x + prettier: 2.x - 3.x + prettier-plugin-ember-template-tag: '>= 2.0.0' + prettier-plugin-svelte: 3.x + svelte: 4.x || 5.x + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + prettier-plugin-ember-template-tag: + optional: true + prettier-plugin-svelte: + optional: true + svelte: + optional: true + dependencies: + '@babel/generator': 7.28.5 + '@babel/parser': 7.28.5 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + javascript-natural-sort: 0.7.1 + lodash-es: 4.17.22 + minimatch: 9.0.5 + parse-imports-exports: 0.2.4 + prettier: 3.7.2 + prettier-plugin-svelte: 3.4.0(prettier@3.7.2)(svelte@5.42.3) + svelte: 5.42.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@types/cookie@0.6.0: + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + dev: false + + /@types/css-font-loading-module@0.0.7: + resolution: {integrity: sha512-nl09VhutdjINdWyXxHWN/w9zlNCfr60JUqJbd24YXUuCwgeL0TpFSdElCwb6cxfB6ybE19Gjj4g0jsgkXxKv1Q==} + dev: false + + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + dependencies: + '@types/ms': 2.1.0 + + /@types/estree-jsx@1.0.5: + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + dependencies: + '@types/estree': 1.0.8 + dev: true + + /@types/estree@1.0.8: + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + /@types/fontkit@2.0.8: + resolution: {integrity: sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew==} + dependencies: + '@types/node': 24.9.2 + + /@types/hast@3.0.4: + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + dependencies: + '@types/unist': 3.0.3 + + /@types/katex@0.16.7: + resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} + dev: true + + /@types/lodash@4.17.20: + resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} + requiresBuild: true + dev: false + + /@types/mdast@4.0.4: + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + dependencies: + '@types/unist': 3.0.3 + + /@types/mdx@2.0.13: + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + dev: true + + /@types/ms@2.1.0: + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + requiresBuild: true + + /@types/nlcst@2.0.3: + resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} + dependencies: + '@types/unist': 3.0.3 + + /@types/node@17.0.45: + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + dev: false + + /@types/node@24.9.2: + resolution: {integrity: sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==} + dependencies: + undici-types: 7.16.0 + + /@types/pug@2.0.10: + resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} + dev: true + + /@types/react@19.2.2: + resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} + dependencies: + csstype: 3.1.3 + dev: false + + /@types/resolve@1.20.2: + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + dev: false + + /@types/sax@1.2.7: + resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} + dependencies: + '@types/node': 24.9.2 + dev: false + + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + dev: false + + /@types/unist@2.0.11: + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + dev: true + + /@types/unist@3.0.3: + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + /@ungap/structured-clone@1.3.0: + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + /@volar/language-core@2.4.23: + resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==} + dependencies: + '@volar/source-map': 2.4.23 + dev: true + + /@volar/source-map@2.4.23: + resolution: {integrity: sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==} + dev: true + + /@volar/typescript@2.4.23: + resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==} + dependencies: + '@volar/language-core': 2.4.23 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + dev: true + + /@wagmi/connectors@5.11.2(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(@wagmi/core@2.22.1)(react@16.14.0)(typescript@5.9.3)(viem@2.38.5)(wagmi@2.19.0)(zod@3.25.76): + resolution: {integrity: sha512-OkiElOI8xXGPDZE5UdG6NgDT3laSkEh9llX1DDapUnfnKecK3Tr/HUf5YzgwDhEoox8mdxp+8ZCjtnTKz56SdA==} + peerDependencies: + '@wagmi/core': 2.21.2 + typescript: '>=5.0.4' + viem: 2.x + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@base-org/account': 1.1.1(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(zod@3.25.76) + '@coinbase/wallet-sdk': 4.3.6(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(zod@3.25.76) + '@gemini-wallet/core': 0.2.0(viem@2.38.5) + '@metamask/sdk': 0.33.1 + '@safe-global/safe-apps-provider': 0.18.6(typescript@5.9.3)(zod@3.25.76) + '@safe-global/safe-apps-sdk': 9.1.0(typescript@5.9.3)(zod@3.25.76) + '@wagmi/core': 2.22.1(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(viem@2.38.5) + '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + cbw-sdk: /@coinbase/wallet-sdk@3.9.3 + porto: 0.2.19(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(@wagmi/core@2.22.1)(react@16.14.0)(typescript@5.9.3)(viem@2.38.5)(wagmi@2.19.0) + typescript: 5.9.3 + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@tanstack/react-query' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - immer + - ioredis + - react + - supports-color + - uploadthing + - use-sync-external-store + - utf-8-validate + - wagmi + - zod + dev: false + + /@wagmi/connectors@6.1.1(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(@wagmi/core@2.22.1)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(viem@2.38.5)(wagmi@2.19.0)(zod@3.25.76): + resolution: {integrity: sha512-T5orLdX6Kz+UnJxy88aRnlSohnNCkP3KqWI3Hadho2uhFUqA87VWkE6+fD0TI4XA/pDA5wjI2EjCaGTmAxqDtQ==} + peerDependencies: + '@wagmi/core': 2.22.1 + typescript: '>=5.0.4' + viem: 2.x + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@base-org/account': 1.1.1(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(zod@3.25.76) + '@coinbase/wallet-sdk': 4.3.6(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(zod@3.25.76) + '@gemini-wallet/core': 0.2.0(viem@2.38.5) + '@metamask/sdk': 0.33.1 + '@safe-global/safe-apps-provider': 0.18.6(typescript@5.9.3)(zod@3.25.76) + '@safe-global/safe-apps-sdk': 9.1.0(typescript@5.9.3)(zod@3.25.76) + '@wagmi/core': 2.22.1(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(viem@2.38.5) + '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + cbw-sdk: /@coinbase/wallet-sdk@3.9.3 + porto: 0.2.34(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(@wagmi/core@2.22.1)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(viem@2.38.5)(wagmi@2.19.0) + typescript: 5.9.3 + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@tanstack/react-query' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - expo-auth-session + - expo-crypto + - expo-web-browser + - immer + - ioredis + - react + - react-native + - supports-color + - uploadthing + - use-sync-external-store + - utf-8-validate + - wagmi + - zod + dev: false + + /@wagmi/core@2.22.1(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(viem@2.38.5): + resolution: {integrity: sha512-cG/xwQWsBEcKgRTkQVhH29cbpbs/TdcUJVFXCyri3ZknxhMyGv0YEjTcrNpRgt2SaswL1KrvslSNYKKo+5YEAg==} + peerDependencies: + '@tanstack/query-core': '>=5.0.0' + typescript: '>=5.0.4' + viem: 2.x + peerDependenciesMeta: + '@tanstack/query-core': + optional: true + typescript: + optional: true + dependencies: + eventemitter3: 5.0.1 + mipd: 0.0.7(typescript@5.9.3) + typescript: 5.9.3 + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + zustand: 5.0.0(@types/react@19.2.2)(react@16.14.0)(use-sync-external-store@1.4.0) + transitivePeerDependencies: + - '@types/react' + - immer + - react + - use-sync-external-store + dev: false + + /@wallet-standard/base@1.1.0: + resolution: {integrity: sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==} + engines: {node: '>=16'} + dev: false + + /@wallet-standard/wallet@1.1.0: + resolution: {integrity: sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg==} + engines: {node: '>=16'} + dependencies: + '@wallet-standard/base': 1.1.0 + dev: false + + /@walletconnect/core@2.21.0(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-o6R7Ua4myxR8aRUAJ1z3gT9nM+jd2B2mfamu6arzy1Cc6vi10fIwFWb6vg3bC8xJ6o9H3n/cN5TOW3aA9Y1XVw==} + engines: {node: '>=18'} + requiresBuild: true + dependencies: + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.16 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.0 + '@walletconnect/utils': 2.21.0(typescript@5.9.3)(zod@3.25.76) + '@walletconnect/window-getters': 1.0.1 + es-toolkit: 1.33.0 + events: 3.3.0 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@walletconnect/core@2.21.1(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-Tp4MHJYcdWD846PH//2r+Mu4wz1/ZU/fr9av1UWFiaYQ2t2TPLDiZxjLw54AAEpMqlEHemwCgiRiAmjR1NDdTQ==} + engines: {node: '>=18'} + requiresBuild: true + dependencies: + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.16 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.1 + '@walletconnect/utils': 2.21.1(typescript@5.9.3)(zod@3.25.76) + '@walletconnect/window-getters': 1.0.1 + es-toolkit: 1.33.0 + events: 3.3.0 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@walletconnect/core@2.22.4(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-ZQnyDDpqDPAk5lyLV19BRccQ3wwK3LmAwibuIv3X+44aT/dOs2kQGu9pla3iW2LgZ5qRMYvgvvfr5g3WlDGceQ==} + engines: {node: '>=18.20.8'} + dependencies: + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.16 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 3.0.0 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.22.4 + '@walletconnect/utils': 2.22.4(typescript@5.9.3)(zod@3.25.76) + '@walletconnect/window-getters': 1.0.1 + es-toolkit: 1.39.3 + events: 3.3.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@walletconnect/environment@1.0.1: + resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} + requiresBuild: true + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/ethereum-provider@2.21.1(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-SSlIG6QEVxClgl1s0LMk4xr2wg4eT3Zn/Hb81IocyqNSGfXpjtawWxKxiC5/9Z95f1INyBD6MctJbL/R1oBwIw==} + dependencies: + '@reown/appkit': 1.7.8(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/sign-client': 2.21.1(typescript@5.9.3)(zod@3.25.76) + '@walletconnect/types': 2.21.1 + '@walletconnect/universal-provider': 2.21.1(typescript@5.9.3)(zod@3.25.76) + '@walletconnect/utils': 2.21.1(typescript@5.9.3)(zod@3.25.76) + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@walletconnect/events@1.0.1: + resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} + dependencies: + keyvaluestorage-interface: 1.0.0 + tslib: 1.14.1 + dev: false + + /@walletconnect/heartbeat@1.2.2: + resolution: {integrity: sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw==} + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/time': 1.0.2 + events: 3.3.0 + dev: false + + /@walletconnect/jsonrpc-http-connection@1.0.8: + resolution: {integrity: sha512-+B7cRuaxijLeFDJUq5hAzNyef3e3tBDIxyaCNmFtjwnod5AGis3RToNqzFU33vpVcxFhofkpE7Cx+5MYejbMGw==} + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + cross-fetch: 3.2.0 + events: 3.3.0 + transitivePeerDependencies: + - encoding + dev: false + + /@walletconnect/jsonrpc-provider@1.0.14: + resolution: {integrity: sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow==} + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + events: 3.3.0 + dev: false + + /@walletconnect/jsonrpc-types@1.0.4: + resolution: {integrity: sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ==} + dependencies: + events: 3.3.0 + keyvaluestorage-interface: 1.0.0 + dev: false + + /@walletconnect/jsonrpc-utils@1.0.8: + resolution: {integrity: sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==} + dependencies: + '@walletconnect/environment': 1.0.1 + '@walletconnect/jsonrpc-types': 1.0.4 + tslib: 1.14.1 + dev: false + + /@walletconnect/jsonrpc-ws-connection@1.0.16: + resolution: {integrity: sha512-G81JmsMqh5nJheE1mPst1W0WfVv0SG3N7JggwLLGnI7iuDZJq8cRJvQwLGKHn5H1WTW7DEPCo00zz5w62AbL3Q==} + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + events: 3.3.0 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@walletconnect/keyvaluestorage@1.1.1: + resolution: {integrity: sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==} + peerDependencies: + '@react-native-async-storage/async-storage': 1.x + peerDependenciesMeta: + '@react-native-async-storage/async-storage': + optional: true + dependencies: + '@walletconnect/safe-json': 1.0.2 + idb-keyval: 6.2.2 + unstorage: 1.17.1(idb-keyval@6.2.2) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + dev: false + + /@walletconnect/logger@2.1.2: + resolution: {integrity: sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw==} + requiresBuild: true + dependencies: + '@walletconnect/safe-json': 1.0.2 + pino: 7.11.0 + dev: false + + /@walletconnect/logger@3.0.0: + resolution: {integrity: sha512-DDktPBFdmt5d7U3sbp4e3fQHNS1b6amsR8FmtOnt6L2SnV7VfcZr8VmAGL12zetAR+4fndegbREmX0P8Mw6eDg==} + dependencies: + '@walletconnect/safe-json': 1.0.2 + pino: 10.0.0 + dev: false + + /@walletconnect/relay-api@1.0.11: + resolution: {integrity: sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q==} + dependencies: + '@walletconnect/jsonrpc-types': 1.0.4 + dev: false + + /@walletconnect/relay-auth@1.1.0: + resolution: {integrity: sha512-qFw+a9uRz26jRCDgL7Q5TA9qYIgcNY8jpJzI1zAWNZ8i7mQjaijRnWFKsCHAU9CyGjvt6RKrRXyFtFOpWTVmCQ==} + dependencies: + '@noble/curves': 1.8.0 + '@noble/hashes': 1.7.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + uint8arrays: 3.1.1 + dev: false + + /@walletconnect/safe-json@1.0.2: + resolution: {integrity: sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/sign-client@2.21.0(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-z7h+PeLa5Au2R591d/8ZlziE0stJvdzP9jNFzFolf2RG/OiXulgFKum8PrIyXy+Rg2q95U9nRVUF9fWcn78yBA==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' + requiresBuild: true + dependencies: + '@walletconnect/core': 2.21.0(typescript@5.9.3)(zod@3.25.76) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.0 + '@walletconnect/utils': 2.21.0(typescript@5.9.3)(zod@3.25.76) + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@walletconnect/sign-client@2.21.1(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-QaXzmPsMnKGV6tc4UcdnQVNOz4zyXgarvdIQibJ4L3EmLat73r5ZVl4c0cCOcoaV7rgM9Wbphgu5E/7jNcd3Zg==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' + requiresBuild: true + dependencies: + '@walletconnect/core': 2.21.1(typescript@5.9.3)(zod@3.25.76) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.1 + '@walletconnect/utils': 2.21.1(typescript@5.9.3)(zod@3.25.76) + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@walletconnect/sign-client@2.22.4(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-la+sol0KL33Fyx5DRlupHREIv8wA6W33bRfuLAfLm8pINRTT06j9rz0IHIqJihiALebFxVZNYzJnF65PhV0q3g==} + dependencies: + '@walletconnect/core': 2.22.4(typescript@5.9.3)(zod@3.25.76) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 3.0.0 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.22.4 + '@walletconnect/utils': 2.22.4(typescript@5.9.3)(zod@3.25.76) + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@walletconnect/time@1.0.2: + resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/types@2.21.0: + resolution: {integrity: sha512-ll+9upzqt95ZBWcfkOszXZkfnpbJJ2CmxMfGgE5GmhdxxxCcO5bGhXkI+x8OpiS555RJ/v/sXJYMSOLkmu4fFw==} + requiresBuild: true + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + dev: false + + /@walletconnect/types@2.21.1: + resolution: {integrity: sha512-UeefNadqP6IyfwWC1Yi7ux+ljbP2R66PLfDrDm8izmvlPmYlqRerJWJvYO4t0Vvr9wrG4Ko7E0c4M7FaPKT/sQ==} + requiresBuild: true + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + dev: false + + /@walletconnect/types@2.22.4: + resolution: {integrity: sha512-KJdiS9ezXzx1uASanldYaaenDwb42VOQ6Rj86H7FRwfYddhNnYnyEaDjDKOdToGRGcpt5Uzom6qYUOnrWEbp5g==} + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 3.0.0 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + dev: false + + /@walletconnect/universal-provider@2.21.0(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-mtUQvewt+X0VBQay/xOJBvxsB3Xsm1lTwFjZ6WUwSOTR1X+FNb71hSApnV5kbsdDIpYPXeQUbGt2se1n5E5UBg==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' + requiresBuild: true + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.21.0(typescript@5.9.3)(zod@3.25.76) + '@walletconnect/types': 2.21.0 + '@walletconnect/utils': 2.21.0(typescript@5.9.3)(zod@3.25.76) + es-toolkit: 1.33.0 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@walletconnect/universal-provider@2.21.1(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-Wjx9G8gUHVMnYfxtasC9poGm8QMiPCpXpbbLFT+iPoQskDDly8BwueWnqKs4Mx2SdIAWAwuXeZ5ojk5qQOxJJg==} + deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' + requiresBuild: true + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.21.1(typescript@5.9.3)(zod@3.25.76) + '@walletconnect/types': 2.21.1 + '@walletconnect/utils': 2.21.1(typescript@5.9.3)(zod@3.25.76) + es-toolkit: 1.33.0 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@walletconnect/universal-provider@2.22.4(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-TF2RNX13qxa0rrBAhVDs5+C2G8CHX7L0PH5hF2uyQHdGyxZ3pFbXf8rxmeW1yKlB76FSbW80XXNrUes6eK/xHg==} + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 3.0.0 + '@walletconnect/sign-client': 2.22.4(typescript@5.9.3)(zod@3.25.76) + '@walletconnect/types': 2.22.4 + '@walletconnect/utils': 2.22.4(typescript@5.9.3)(zod@3.25.76) + es-toolkit: 1.39.3 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@walletconnect/utils@2.21.0(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-zfHLiUoBrQ8rP57HTPXW7rQMnYxYI4gT9yTACxVW6LhIFROTF6/ytm5SKNoIvi4a5nX5dfXG4D9XwQUCu8Ilig==} + requiresBuild: true + dependencies: + '@noble/ciphers': 1.2.1 + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.0 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + bs58: 6.0.0 + detect-browser: 5.3.0 + query-string: 7.1.3 + uint8arrays: 3.1.0 + viem: 2.23.2(typescript@5.9.3)(zod@3.25.76) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@walletconnect/utils@2.21.1(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-VPZvTcrNQCkbGOjFRbC24mm/pzbRMUq2DSQoiHlhh0X1U7ZhuIrzVtAoKsrzu6rqjz0EEtGxCr3K1TGRqDG4NA==} + requiresBuild: true + dependencies: + '@noble/ciphers': 1.2.1 + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.21.1 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + bs58: 6.0.0 + detect-browser: 5.3.0 + query-string: 7.1.3 + uint8arrays: 3.1.0 + viem: 2.23.2(typescript@5.9.3)(zod@3.25.76) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + dev: false + + /@walletconnect/utils@2.22.4(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-coAPrNiTiD+snpiXQyXakMVeYcddqVqII7aLU39TeILdPoXeNPc2MAja+MF7cKNM/PA3tespljvvxck/oTm4+Q==} + dependencies: + '@msgpack/msgpack': 3.1.2 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 3.0.0 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.22.4 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + blakejs: 1.2.1 + bs58: 6.0.0 + detect-browser: 5.3.0 + ox: 0.9.3(typescript@5.9.3)(zod@3.25.76) + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - typescript + - uploadthing + - zod + dev: false + + /@walletconnect/window-getters@1.0.1: + resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} + dependencies: + tslib: 1.14.1 + dev: false + + /@walletconnect/window-metadata@1.0.1: + resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} + dependencies: + '@walletconnect/window-getters': 1.0.1 + tslib: 1.14.1 + dev: false + + /@xstate/fsm@1.6.5: + resolution: {integrity: sha512-b5o1I6aLNeYlU/3CPlj/Z91ybk1gUsKT+5NAJI+2W4UjvS5KLG28K9v5UvNoFVjHV8PajVZ00RH3vnjyQO7ZAw==} + dev: false + + /abitype@1.0.8(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==} + requiresBuild: true + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.9.3 + zod: 3.25.76 + dev: false + + /abitype@1.1.0(typescript@5.9.3)(zod@3.22.4): + resolution: {integrity: sha512-6Vh4HcRxNMLA0puzPjM5GBgT4aAcFGKZzSgAXvuZ27shJP6NEpielTuqbBmZILR5/xd0PizkBGy5hReKz9jl5A==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3.22.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.9.3 + zod: 3.22.4 + dev: false + + /abitype@1.1.0(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-6Vh4HcRxNMLA0puzPjM5GBgT4aAcFGKZzSgAXvuZ27shJP6NEpielTuqbBmZILR5/xd0PizkBGy5hReKz9jl5A==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3.22.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.9.3 + zod: 3.25.76 + dev: false + + /abitype@1.1.1(typescript@5.9.3)(zod@3.22.4): + resolution: {integrity: sha512-Loe5/6tAgsBukY95eGaPSDmQHIjRZYQq8PB1MpsNccDIK8WiV+Uw6WzaIXipvaxTEL2yEB0OpEaQv3gs8pkS9Q==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3.22.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.9.3 + zod: 3.22.4 + dev: false + + /abitype@1.1.1(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-Loe5/6tAgsBukY95eGaPSDmQHIjRZYQq8PB1MpsNccDIK8WiV+Uw6WzaIXipvaxTEL2yEB0OpEaQv3gs8pkS9Q==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3.22.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.9.3 + zod: 3.25.76 + dev: false + + /abitype@1.1.1(typescript@5.9.3)(zod@4.1.12): + resolution: {integrity: sha512-Loe5/6tAgsBukY95eGaPSDmQHIjRZYQq8PB1MpsNccDIK8WiV+Uw6WzaIXipvaxTEL2yEB0OpEaQv3gs8pkS9Q==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3.22.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.9.3 + zod: 4.1.12 + dev: false + + /acorn-jsx@5.3.2(acorn@8.15.0): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.15.0 + dev: true + + /acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + /ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + dependencies: + string-width: 4.2.3 + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + /aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + /array-iterate@2.0.1: + resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + + /astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + dev: true + + /astro-expressive-code@0.41.4(astro@5.16.4): + resolution: {integrity: sha512-LK6EcK/hIHfOSo9zqapzu4CbTC0YBtMOVdvWjInpB2SgYtxiF22aZDqdpejN8J28mWPqPLQwSqdl2lWuirNXmw==} + peerDependencies: + astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 + dependencies: + astro: 5.16.4(typescript@5.9.3) + rehype-expressive-code: 0.41.4 + dev: false + + /astro@5.16.4(typescript@5.9.3): + resolution: {integrity: sha512-rgXI/8/tnO3Y9tfAaUyg/8beKhlIMltbiC8Q6jCoAfEidOyaue4KYKzbe0gJIb6qEdEaG3Kf3BY3EOSLkbWOLg==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} + hasBin: true + dependencies: + '@astrojs/compiler': 2.13.0 + '@astrojs/internal-helpers': 0.7.5 + '@astrojs/markdown-remark': 6.3.9 + '@astrojs/telemetry': 3.3.0 + '@capsizecss/unpack': 3.0.1 + '@oslojs/encoding': 1.1.0 + '@rollup/pluginutils': 5.3.0(rollup@4.52.5) + acorn: 8.15.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + boxen: 8.0.1 + ci-info: 4.3.1 + clsx: 2.1.1 + common-ancestor-path: 1.0.1 + cookie: 1.0.2 + cssesc: 3.0.0 + debug: 4.4.3 + deterministic-object-hash: 2.0.2 + devalue: 5.6.0 + diff: 5.2.0 + dlv: 1.1.3 + dset: 3.1.4 + es-module-lexer: 1.7.0 + esbuild: 0.25.11 + estree-walker: 3.0.3 + flattie: 1.1.1 + fontace: 0.3.1 + github-slugger: 2.0.0 + html-escaper: 3.0.3 + http-cache-semantics: 4.2.0 + import-meta-resolve: 4.2.0 + js-yaml: 4.1.1 + magic-string: 0.30.21 + magicast: 0.5.1 + mrmime: 2.0.1 + neotraverse: 0.6.18 + p-limit: 6.2.0 + p-queue: 8.1.1 + package-manager-detector: 1.5.0 + piccolore: 0.1.3 + picomatch: 4.0.3 + prompts: 2.4.2 + rehype: 13.0.2 + semver: 7.7.3 + shiki: 3.19.0 + smol-toml: 1.5.2 + svgo: 4.0.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tsconfck: 3.1.6(typescript@5.9.3) + ultrahtml: 1.6.0 + unifont: 0.6.0 + unist-util-visit: 5.0.0 + unstorage: 1.17.3 + vfile: 6.0.3 + vite: 6.4.1 + vitefu: 1.1.1(vite@6.4.1) + xxhash-wasm: 1.1.0 + yargs-parser: 21.1.1 + yocto-spinner: 0.2.3 + zod: 3.25.76 + zod-to-json-schema: 3.25.0(zod@3.25.76) + zod-to-ts: 1.2.0(typescript@5.9.3)(zod@3.25.76) + optionalDependencies: + sharp: 0.34.5 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@types/node' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - idb-keyval + - ioredis + - jiti + - less + - lightningcss + - rollup + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - uploadthing + - yaml + + /async-mutex@0.2.6: + resolution: {integrity: sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==} + requiresBuild: true + dependencies: + tslib: 2.8.1 + dev: false + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + + /atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + dev: false + + /autoprefixer@10.4.21(postcss@8.5.6): + resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.27.0 + caniuse-lite: 1.0.30001751 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + dev: true + + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + possible-typed-array-names: 1.1.0 + dev: false + + /axios@1.13.2(debug@4.4.3): + resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} + dependencies: + follow-redirects: 1.15.11(debug@4.4.3) + form-data: 4.0.5 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + + /axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + /bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /base-64@1.0.0: + resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} + + /base-x@5.0.1: + resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} + dev: false + + /base64-arraybuffer@1.0.2: + resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==} + engines: {node: '>= 0.6.0'} + dev: false + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + /baseline-browser-mapping@2.8.20: + resolution: {integrity: sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==} + hasBin: true + dev: true + + /bcp-47-match@2.0.3: + resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==} + dev: false + + /big.js@6.2.2: + resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} + + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + /bits-ui@1.8.0(svelte@5.42.3): + resolution: {integrity: sha512-CXD6Orp7l8QevNDcRPLXc/b8iMVgxDWT2LyTwsdLzJKh9CxesOmPuNePSPqAxKoT59FIdU4aFPS1k7eBdbaCxg==} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.11.0 + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/dom': 1.7.4 + '@internationalized/date': 3.10.0 + css.escape: 1.5.1 + esm-env: 1.2.2 + runed: 0.23.4(svelte@5.42.3) + svelte: 5.42.3 + svelte-toolbelt: 0.7.1(svelte@5.42.3) + tabbable: 6.3.0 + dev: false + + /blakejs@1.2.1: + resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + dev: false + + /bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + requiresBuild: true + dev: false + + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + /bowser@2.12.1: + resolution: {integrity: sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==} + requiresBuild: true + dev: false + + /boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} + dependencies: + ansi-align: 3.0.1 + camelcase: 8.0.0 + chalk: 5.6.2 + cli-boxes: 3.0.0 + string-width: 7.2.0 + type-fest: 4.41.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.2 + + /brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + dependencies: + balanced-match: 1.0.2 + + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.1.1 + + /brotli@1.3.3: + resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} + dependencies: + base64-js: 1.5.1 + + /browserslist@4.27.0: + resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + baseline-browser-mapping: 2.8.20 + caniuse-lite: 1.0.30001751 + electron-to-chromium: 1.5.241 + node-releases: 2.0.26 + update-browserslist-db: 1.1.4(browserslist@4.27.0) + dev: true + + /bs58@6.0.0: + resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + dependencies: + base-x: 5.0.1 + dev: false + + /buffer-crc32@1.0.0: + resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} + engines: {node: '>=8.0.0'} + dev: true + + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + + /bufferutil@4.0.9: + resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.4 + dev: false + + /call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + dev: false + + /call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + dev: false + + /call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + dev: false + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: false + + /camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + + /caniuse-lite@1.0.30001751: + resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} + dev: true + + /ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + /chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + /character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + /character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + /character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + /character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + dev: true + + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + /chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + dependencies: + readdirp: 4.1.2 + + /ci-info@4.3.1: + resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} + engines: {node: '>=8'} + + /cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + /cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: false + + /clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + + /clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + requiresBuild: true + dev: false + + /clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + /collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + + /comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + /commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + /commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + dev: true + + /common-ancestor-path@1.0.1: + resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} + + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: false + + /complex.js@2.4.2: + resolution: {integrity: sha512-qtx7HRhPGSCBtGiST4/WGHuW+zeaND/6Ld+db6PbrulIB1i2Ev/2UPiqcmpQNPSyfBKraC0EOvOKCB5dGZKt3g==} + dev: false + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /cookie-es@1.2.2: + resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + + /cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + dev: false + + /cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + + /core-js@3.46.0: + resolution: {integrity: sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==} + requiresBuild: true + dev: false + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + requiresBuild: true + dev: false + + /crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + requiresBuild: true + dev: false + + /cross-fetch@3.2.0: + resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + requiresBuild: true + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: false + + /cross-fetch@4.1.0: + resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} + requiresBuild: true + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: false + + /cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + /crossws@0.3.5: + resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + dependencies: + uncrypto: 0.1.3 + + /css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + /css-selector-parser@3.2.0: + resolution: {integrity: sha512-L1bdkNKUP5WYxiW5dW6vA2hd3sL8BdRNLy2FCX0rLVise4eNw9nBdeBuJHxlELieSE2H1f6bYQFfwVUwWCV9rQ==} + dev: false + + /css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + /css-tree@3.1.0: + resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + dependencies: + mdn-data: 2.12.2 + source-map-js: 1.2.1 + + /css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + + /css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + dev: false + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + /csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + dependencies: + css-tree: 2.2.1 + + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dev: false + + /date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + requiresBuild: true + dependencies: + '@babel/runtime': 7.28.4 + dev: false + + /dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + dev: false + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + requiresBuild: true + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: false + + /debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + + /decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: false + + /decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + dev: false + + /decode-named-character-reference@1.2.0: + resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} + dependencies: + character-entities: 2.0.2 + + /decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + requiresBuild: true + dev: false + + /dedent-js@1.0.1: + resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} + dev: true + + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + dev: false + + /defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + /derive-valtio@0.1.0(valtio@1.13.2): + resolution: {integrity: sha512-OCg2UsLbXK7GmmpzMXhYkdO64vhJ1ROUUGaTFyHjVwEdMEcTTRj7W1TxLbSBxdY8QLBPCcp66MTyaSy0RpO17A==} + requiresBuild: true + peerDependencies: + valtio: '*' + dependencies: + valtio: 1.13.2(@types/react@19.2.2)(react@16.14.0) + dev: false + + /destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + /detect-browser@5.3.0: + resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} + dev: false + + /detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + dev: true + + /detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + requiresBuild: true + + /deterministic-object-hash@2.0.2: + resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==} + engines: {node: '>=18'} + dependencies: + base-64: 1.0.0 + + /devalue@5.6.0: + resolution: {integrity: sha512-BaD1s81TFFqbD6Uknni42TrolvEWA1Ih5L+OiHWmi4OYMJVwAYPGtha61I9KxTf52OvVHozHyjPu8zljqdF3uA==} + + /devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dependencies: + dequal: 2.0.3 + + /dfa@1.2.0: + resolution: {integrity: sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==} + + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + /diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + + /dijkstrajs@1.0.3: + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} + dev: false + + /direction@2.0.1: + resolution: {integrity: sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==} + hasBin: true + dev: false + + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + /dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + /domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + /domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + + /domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + /drawer-svelte@0.1.3(@melt-ui/svelte@0.86.6)(esm-env@1.2.2)(svelte-runes@0.0.7)(svelte@5.42.3): + resolution: {integrity: sha512-Y+nv0rd1evgbaExbNn7qHqzx8mLajIBC2ZOrluyDQpYMar502pOBSJ6/AtyUkoDgA3aEf5PI9fnvxEZ2HXgrvA==} + peerDependencies: + '@melt-ui/svelte': ^0.83.0 + esm-env: ^1.0.0 + svelte: ^5.0.0-next.1 + svelte-runes: ^0.0.4 + dependencies: + '@melt-ui/svelte': 0.86.6(svelte@5.42.3) + esm-env: 1.2.2 + svelte: 5.42.3 + svelte-runes: 0.0.7(svelte@5.42.3) + dev: false + + /dset@3.1.4: + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} + engines: {node: '>=4'} + + /dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + dev: false + + /duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + requiresBuild: true + dependencies: + end-of-stream: 1.4.5 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.3 + dev: false + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + /eciesjs@0.4.16: + resolution: {integrity: sha512-dS5cbA9rA2VR4Ybuvhg6jvdmp46ubLn3E+px8cG/35aEDNclrqoCjg6mt0HYZ/M+OoESS3jSkCrqk1kWAEhWAw==} + engines: {bun: '>=1', deno: '>=2', node: '>=16'} + requiresBuild: true + dependencies: + '@ecies/ciphers': 0.2.4(@noble/ciphers@1.3.0) + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + dev: false + + /electron-to-chromium@1.5.241: + resolution: {integrity: sha512-ILMvKX/ZV5WIJzzdtuHg8xquk2y0BOGlFOxBVwTpbiXqWIH0hamG45ddU4R3PQ0gYu+xgo0vdHXHli9sHIGb4w==} + dev: true + + /emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + /encode-utf8@1.0.3: + resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} + dev: false + + /end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + requiresBuild: true + dependencies: + once: 1.4.0 + dev: false + + /engine.io-client@6.6.3: + resolution: {integrity: sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==} + requiresBuild: true + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.4 + engine.io-parser: 5.2.3 + ws: 8.17.1 + xmlhttprequest-ssl: 2.1.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /engine.io-parser@5.2.3: + resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dev: false + + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + /entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + /es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + requiresBuild: true + dev: false + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + requiresBuild: true + dev: false + + /es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + /es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + es-errors: 1.3.0 + dev: false + + /es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: false + + /es-toolkit@1.33.0: + resolution: {integrity: sha512-X13Q/ZSc+vsO1q600bvNK4bxgXMkHcf//RxCmYDaRY5DAcT+eoXjY5hoAPGMdRnWQjvyLEcyauG3b6hz76LNqg==} + requiresBuild: true + dev: false + + /es-toolkit@1.39.3: + resolution: {integrity: sha512-Qb/TCFCldgOy8lZ5uC7nLGdqJwSabkQiYQShmw4jyiPk1pZzaYWTwaYKYP7EgLccWYgZocMrtItrwh683voaww==} + dev: false + + /es6-promise@3.3.1: + resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} + dev: true + + /esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + dev: true + + /esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + dependencies: + '@types/estree-jsx': 1.0.5 + acorn: 8.15.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 + dev: true + + /esbuild@0.25.11: + resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} + engines: {node: '>=18'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.11 + '@esbuild/android-arm': 0.25.11 + '@esbuild/android-arm64': 0.25.11 + '@esbuild/android-x64': 0.25.11 + '@esbuild/darwin-arm64': 0.25.11 + '@esbuild/darwin-x64': 0.25.11 + '@esbuild/freebsd-arm64': 0.25.11 + '@esbuild/freebsd-x64': 0.25.11 + '@esbuild/linux-arm': 0.25.11 + '@esbuild/linux-arm64': 0.25.11 + '@esbuild/linux-ia32': 0.25.11 + '@esbuild/linux-loong64': 0.25.11 + '@esbuild/linux-mips64el': 0.25.11 + '@esbuild/linux-ppc64': 0.25.11 + '@esbuild/linux-riscv64': 0.25.11 + '@esbuild/linux-s390x': 0.25.11 + '@esbuild/linux-x64': 0.25.11 + '@esbuild/netbsd-arm64': 0.25.11 + '@esbuild/netbsd-x64': 0.25.11 + '@esbuild/openbsd-arm64': 0.25.11 + '@esbuild/openbsd-x64': 0.25.11 + '@esbuild/openharmony-arm64': 0.25.11 + '@esbuild/sunos-x64': 0.25.11 + '@esbuild/win32-arm64': 0.25.11 + '@esbuild/win32-ia32': 0.25.11 + '@esbuild/win32-x64': 0.25.11 + + /escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + dev: true + + /escape-latex@1.2.0: + resolution: {integrity: sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==} + dev: false + + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + /esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + + /esrap@2.1.1: + resolution: {integrity: sha512-ebTT9B6lOtZGMgJ3o5r12wBacHctG7oEWazIda8UlPfA3HD/Wrv8FdXoVo73vzdpwCxNyXjPauyN2bbJzMkB9A==} + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + /estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + dependencies: + '@types/estree': 1.0.8 + dev: true + + /estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 + dev: true + + /estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + dev: true + + /estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + dev: true + + /estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + dependencies: + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 + dev: true + + /estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 + dev: true + + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + /estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + dependencies: + '@types/estree': 1.0.8 + + /eth-block-tracker@7.1.0: + resolution: {integrity: sha512-8YdplnuE1IK4xfqpf4iU7oBxnOYAc35934o083G8ao+8WM8QQtt/mVlAY6yIAdY1eMeLqg4Z//PZjJGmWGPMRg==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@metamask/eth-json-rpc-provider': 1.0.1 + '@metamask/safe-event-emitter': 3.1.2 + '@metamask/utils': 5.0.2 + json-rpc-random-id: 1.0.1 + pify: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /eth-json-rpc-filters@6.0.1: + resolution: {integrity: sha512-ITJTvqoCw6OVMLs7pI8f4gG92n/St6x80ACtHodeS+IXmO0w+t1T5OOzfSt7KLSMLRkVUoexV7tztLgDxg+iig==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@metamask/safe-event-emitter': 3.1.2 + async-mutex: 0.2.6 + eth-query: 2.1.2 + json-rpc-engine: 6.1.0 + pify: 5.0.0 + dev: false + + /eth-query@2.1.2: + resolution: {integrity: sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==} + requiresBuild: true + dependencies: + json-rpc-random-id: 1.0.1 + xtend: 4.0.2 + dev: false + + /eth-rpc-errors@4.0.3: + resolution: {integrity: sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==} + requiresBuild: true + dependencies: + fast-safe-stringify: 2.1.1 + dev: false + + /ethereum-cryptography@2.2.1: + resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} + requiresBuild: true + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/bip32': 1.4.0 + '@scure/bip39': 1.3.0 + dev: false + + /eventemitter2@6.4.9: + resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==} + requiresBuild: true + dev: false + + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: false + + /expressive-code@0.41.4: + resolution: {integrity: sha512-A9aFLhgqLkL6VSfqYkPqkJVMtA90/bhCLmUO7L3/a1xWISNMcHoCS6d6i8ePwi8HvHr3xRLswHTNt6NheTjdXA==} + dependencies: + '@expressive-code/core': 0.41.4 + '@expressive-code/plugin-frames': 0.41.4 + '@expressive-code/plugin-shiki': 0.41.4 + '@expressive-code/plugin-text-markers': 0.41.4 + dev: false + + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + /extension-port-stream@3.0.0: + resolution: {integrity: sha512-an2S5quJMiy5bnZKEf6AkfH/7r8CzHvhchU40gxN+OM6HPhe7Z9T1FUychcf2M9PpPOO0Hf7BAEfJkw2TDIBDw==} + engines: {node: '>=12.0.0'} + requiresBuild: true + dependencies: + readable-stream: 3.6.2 + webextension-polyfill: 0.10.0 + dev: false + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + /fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + /fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + requiresBuild: true + dev: false + + /fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + requiresBuild: true + dev: false + + /fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + dependencies: + reusify: 1.1.0 + + /fdir@6.5.0(picomatch@4.0.3): + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + dependencies: + picomatch: 4.0.3 + + /fflate@0.4.8: + resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} + dev: false + + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + requiresBuild: true + dependencies: + to-regex-range: 5.0.1 + + /filter-obj@1.1.0: + resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} + engines: {node: '>=0.10.0'} + requiresBuild: true + dev: false + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: false + + /flattie@1.1.1: + resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} + engines: {node: '>=8'} + + /focus-trap@7.6.6: + resolution: {integrity: sha512-v/Z8bvMCajtx4mEXmOo7QEsIzlIOqRXTIwgUfsFOF9gEsespdbD0AkPIka1bSXZ8Y8oZ+2IVDQZePkTfEHZl7Q==} + dependencies: + tabbable: 6.3.0 + dev: false + + /follow-redirects@1.15.11(debug@4.4.3): + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dependencies: + debug: 4.4.3 + dev: false + + /fontace@0.3.1: + resolution: {integrity: sha512-9f5g4feWT1jWT8+SbL85aLIRLIXUaDygaM2xPXRmzPYxrOMNok79Lr3FGJoKVNKibE0WCunNiEVG2mwuE+2qEg==} + dependencies: + '@types/fontkit': 2.0.8 + fontkit: 2.0.4 + + /fontkit@2.0.4: + resolution: {integrity: sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==} + dependencies: + '@swc/helpers': 0.5.17 + brotli: 1.3.3 + clone: 2.1.2 + dfa: 1.2.0 + fast-deep-equal: 3.1.3 + restructure: 3.0.2 + tiny-inflate: 1.0.3 + unicode-properties: 1.4.1 + unicode-trie: 2.0.0 + + /for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + is-callable: 1.2.7 + dev: false + + /foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + /form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + dev: false + + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true + + /fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + dev: false + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + requiresBuild: true + + /gemoji@8.1.0: + resolution: {integrity: sha512-HA4Gx59dw2+tn+UAa7XEV4ufUKI4fH1KgcbenVA9YKSj1QJTT0xh5Mwv5HMFNN3l2OtUe3ZIfuRwSyZS5pLIWw==} + dev: false + + /generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + requiresBuild: true + dev: false + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: false + + /get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + + /get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + dev: false + + /get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + dev: false + + /github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + + /glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + hasBin: true + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + requiresBuild: true + dev: false + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /graphql@16.11.0: + resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + dev: false + + /h3@1.15.4: + resolution: {integrity: sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==} + dependencies: + cookie-es: 1.2.2 + crossws: 0.3.5 + defu: 6.1.4 + destr: 2.0.5 + iron-webcrypto: 1.2.1 + node-mock-http: 1.0.3 + radix3: 1.1.2 + ufo: 1.6.1 + uncrypto: 0.1.3 + + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + requiresBuild: true + dependencies: + es-define-property: 1.0.1 + dev: false + + /has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + requiresBuild: true + dev: false + + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + has-symbols: 1.1.0 + dev: false + + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + + /hast-util-from-dom@5.0.1: + resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==} + dependencies: + '@types/hast': 3.0.4 + hastscript: 9.0.1 + web-namespaces: 2.0.1 + dev: true + + /hast-util-from-html-isomorphic@2.0.0: + resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} + dependencies: + '@types/hast': 3.0.4 + hast-util-from-dom: 5.0.1 + hast-util-from-html: 2.0.3 + unist-util-remove-position: 5.0.0 + dev: true + + /hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.3 + parse5: 7.3.0 + vfile: 6.0.3 + vfile-message: 4.0.3 + + /hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.1.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + /hast-util-has-property@3.0.0: + resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} + dependencies: + '@types/hast': 3.0.4 + dev: false + + /hast-util-heading-rank@3.0.0: + resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} + dependencies: + '@types/hast': 3.0.4 + dev: false + + /hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + dependencies: + '@types/hast': 3.0.4 + + /hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + dependencies: + '@types/hast': 3.0.4 + + /hast-util-raw@9.1.0: + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.3.0 + hast-util-from-parse5: 8.0.3 + hast-util-to-parse5: 8.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + parse5: 7.3.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + /hast-util-select@6.0.4: + resolution: {integrity: sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==} + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + bcp-47-match: 2.0.3 + comma-separated-tokens: 2.0.3 + css-selector-parser: 3.2.0 + devlop: 1.1.0 + direction: 2.0.1 + hast-util-has-property: 3.0.0 + hast-util-to-string: 3.0.1 + hast-util-whitespace: 3.0.0 + nth-check: 2.1.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + dev: false + + /hast-util-to-estree@3.1.3: + resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + dependencies: + '@types/estree': 1.0.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.18 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + /hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + dependencies: + '@types/estree': 1.0.8 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.18 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /hast-util-to-parse5@8.0.0: + resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + /hast-util-to-string@3.0.1: + resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + dependencies: + '@types/hast': 3.0.4 + dev: false + + /hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 + + /hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + dependencies: + '@types/hast': 3.0.4 + + /hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + + /highlight.js@11.11.1: + resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} + engines: {node: '>=12.0.0'} + dev: false + + /hono@4.10.3: + resolution: {integrity: sha512-2LOYWUbnhdxdL8MNbNg9XZig6k+cZXm5IjHn2Aviv7honhBMOHb+jxrKIeJRZJRmn+htUCKhaicxwXuUDlchRA==} + engines: {node: '>=16.9.0'} + dev: false + + /html-escaper@3.0.3: + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + + /html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + /http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + + /idb-keyval@6.2.1: + resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} + requiresBuild: true + dev: false + + /idb-keyval@6.2.2: + resolution: {integrity: sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==} + dev: false + + /idb@8.0.0: + resolution: {integrity: sha512-l//qvlAKGmQO31Qn7xdzagVPPaHTxXx199MhrAFuVBTPqydcPYBWjkrbv4Y0ktB+GmWOiwHl237UUOrLmQxLvw==} + dev: false + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + requiresBuild: true + dev: false + + /import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + + /indicatorts@2.2.2: + resolution: {integrity: sha512-oJRe83n2zj826Mlp2RKQVfurqbq5dEHzAWgZidiYkS0mrx3GCbXlNj59YtwZvekRmNwi/d4NdeHGHd8Nspl6Xg==} + dev: false + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + requiresBuild: true + + /inline-style-parser@0.2.4: + resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + + /iron-webcrypto@1.2.1: + resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + + /is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + dev: true + + /is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + dev: true + + /is-arguments@1.2.0: + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + dev: false + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.3.0 + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + requiresBuild: true + dev: false + + /is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + dependencies: + hasown: 2.0.2 + + /is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + dev: true + + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + requiresBuild: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + /is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + dev: false + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + dev: true + + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + + /is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + dev: false + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + requiresBuild: true + + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + /is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + dependencies: + '@types/estree': 1.0.8 + dev: false + + /is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + dependencies: + '@types/estree': 1.0.8 + + /is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: false + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + requiresBuild: true + dev: false + + /is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + which-typed-array: 1.1.19 + dev: false + + /is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + dependencies: + is-inside-container: 1.0.0 + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + requiresBuild: true + dev: false + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + requiresBuild: true + dev: false + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + /isows@1.0.6(ws@8.18.0): + resolution: {integrity: sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw==} + requiresBuild: true + peerDependencies: + ws: '*' + dependencies: + ws: 8.18.0 + dev: false + + /isows@1.0.7(ws@8.18.3): + resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.18.3 + dev: false + + /jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + /javascript-natural-sort@0.7.1: + resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} + + /jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + /js-base64@3.7.8: + resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} + dev: false + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + dependencies: + argparse: 2.0.1 + + /jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /json-rpc-engine@6.1.0: + resolution: {integrity: sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + '@metamask/safe-event-emitter': 2.0.0 + eth-rpc-errors: 4.0.3 + dev: false + + /json-rpc-random-id@1.0.1: + resolution: {integrity: sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==} + requiresBuild: true + dev: false + + /katex@0.16.25: + resolution: {integrity: sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==} + hasBin: true + dependencies: + commander: 8.3.0 + dev: true + + /keccak@3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.4 + readable-stream: 3.6.2 + dev: false + + /keyvaluestorage-interface@1.0.0: + resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==} + requiresBuild: true + dev: false + + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + /lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + /lit-element@4.2.1: + resolution: {integrity: sha512-WGAWRGzirAgyphK2urmYOV72tlvnxw7YfyLDgQ+OZnM9vQQBQnumQ7jUJe6unEzwGU3ahFOjuz1iz1jjrpCPuw==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.4.0 + '@lit/reactive-element': 2.1.1 + lit-html: 3.3.1 + dev: false + + /lit-html@3.3.1: + resolution: {integrity: sha512-S9hbyDu/vs1qNrithiNyeyv64c9yqiW9l+DBgI18fL+MTvOtWoFR0FWiyq1TxaYef5wNlpEmzlXoBlZEO+WjoA==} + dependencies: + '@types/trusted-types': 2.0.7 + dev: false + + /lit@3.3.0: + resolution: {integrity: sha512-DGVsqsOIHBww2DqnuZzW7QsuCdahp50ojuDaBPC7jUDRpYoH0z7kHBBYZewRzer75FwtrkmkKk7iOAwSaWdBmw==} + dependencies: + '@lit/reactive-element': 2.1.1 + lit-element: 4.2.1 + lit-html: 3.3.1 + dev: false + + /locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: false + + /lodash-es@4.17.22: + resolution: {integrity: sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==} + dev: true + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + requiresBuild: true + dev: false + + /longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /lottie-web@5.13.0: + resolution: {integrity: sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ==} + dev: false + + /lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + /magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + /magicast@0.5.1: + resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==} + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + source-map-js: 1.2.1 + + /markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + dev: true + + /markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + /marked-highlight@2.2.2(marked@15.0.12): + resolution: {integrity: sha512-KlHOP31DatbtPPXPaI8nx1KTrG3EW0Z5zewCwpUj65swbtKOTStteK3sNAjBqV75Pgo3fNEVNHeptg18mDuWgw==} + peerDependencies: + marked: '>=4 <17' + dependencies: + marked: 15.0.12 + dev: false + + /marked@15.0.12: + resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==} + engines: {node: '>= 18'} + hasBin: true + dev: false + + /math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + requiresBuild: true + dev: false + + /mathjs@14.9.1: + resolution: {integrity: sha512-xhqv8Xjf+caWG3WlaPekg4v8QFOR3D5+8ycfcjMcPcnCNDgAONQLaLfyGgrggJrcHx2yUGCpACRpiD4GmXwX+Q==} + engines: {node: '>= 18'} + hasBin: true + dependencies: + '@babel/runtime': 7.28.4 + complex.js: 2.4.2 + decimal.js: 10.6.0 + escape-latex: 1.2.0 + fraction.js: 5.3.4 + javascript-natural-sort: 0.7.1 + seedrandom: 3.0.5 + tiny-emitter: 2.1.0 + typed-function: 4.2.1 + dev: false + + /mdast-util-definitions@6.0.0: + resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + unist-util-visit: 5.0.0 + + /mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + /mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + /mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + /mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + /mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + /mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + /mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + /mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + /mdast-util-math@3.0.0: + resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + longest-streak: 3.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + unist-util-remove-position: 5.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + /mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + + /mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + + /mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + dependencies: + '@types/mdast': 4.0.4 + + /mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + /mdn-data@2.12.2: + resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + /micro-ftch@0.3.1: + resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + requiresBuild: true + dev: false + + /micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + dependencies: + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + /micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + /micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + /micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + /micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + /micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + dependencies: + micromark-util-types: 2.0.2 + + /micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + /micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + /micromark-extension-math@3.1.0: + resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} + dependencies: + '@types/katex': 0.16.7 + devlop: 1.1.0 + katex: 0.16.25 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + dev: true + + /micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + dev: true + + /micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + dev: true + + /micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + dependencies: + micromark-util-types: 2.0.2 + dev: true + + /micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + dev: true + + /micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + dev: true + + /micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + /micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + /micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + dev: true + + /micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + /micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + /micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + /micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + /micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + dependencies: + micromark-util-symbol: 2.0.1 + + /micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + /micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + /micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + dependencies: + micromark-util-symbol: 2.0.1 + + /micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + dependencies: + decode-named-character-reference: 1.2.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + /micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + /micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + dependencies: + '@types/estree': 1.0.8 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + dev: true + + /micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + /micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + dependencies: + micromark-util-symbol: 2.0.1 + + /micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + dependencies: + micromark-util-types: 2.0.2 + + /micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + /micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + /micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + /micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + /micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + dependencies: + '@types/debug': 4.1.12 + debug: 4.4.3 + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + + /micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.12 + dev: true + + /minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.2 + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + /mipd@0.0.7(typescript@5.9.3): + resolution: {integrity: sha512-aAPZPNDQ3uMTdKbuO2YmAw2TxLHO0moa4YKAyETM/DTj5FloZo+a+8tU+iv4GmW+sOxKLSRwcSFuczk+Cpt6fg==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 5.9.3 + dev: false + + /mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + dev: false + + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /monaco-editor@0.52.2: + resolution: {integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==} + dev: false + + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: false + + /mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + requiresBuild: true + dev: false + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + /multiformats@9.9.0: + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} + requiresBuild: true + dev: false + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + /nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /nanoid@5.1.6: + resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==} + engines: {node: ^18 || >=20} + hasBin: true + dev: false + + /neotraverse@0.6.18: + resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} + engines: {node: '>= 10'} + + /nlcst-to-string@4.0.0: + resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} + dependencies: + '@types/nlcst': 2.0.3 + + /node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + requiresBuild: true + dev: false + + /node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + requiresBuild: true + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: false + + /node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + requiresBuild: true + dev: false + + /node-mock-http@1.0.3: + resolution: {integrity: sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==} + + /node-releases@2.0.26: + resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==} + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + + /obj-multiplex@1.0.0: + resolution: {integrity: sha512-0GNJAOsHoBHeNTvl5Vt6IWnpUEcc3uSRxzBri7EDyIcMgYvnY2JL2qdeV5zTMjWQX5OHcD5amcW2HFfDh0gjIA==} + requiresBuild: true + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + readable-stream: 2.3.8 + dev: false + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + /ofetch@1.5.0: + resolution: {integrity: sha512-A7llJ7eZyziA5xq9//3ZurA8OhFqtS99K5/V1sLBJ5j137CM/OAjlbA/TEJXBuOWwOfLqih+oH5U3ran4za1FQ==} + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.7 + ufo: 1.6.1 + + /ofetch@1.5.1: + resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.7 + ufo: 1.6.1 + + /ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + /on-exit-leak-free@0.2.0: + resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} + requiresBuild: true + dev: false + + /on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + dev: false + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + requiresBuild: true + dependencies: + wrappy: 1.0.2 + + /oniguruma-parser@0.12.1: + resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} + + /oniguruma-to-es@4.3.4: + resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==} + dependencies: + oniguruma-parser: 0.12.1 + regex: 6.0.1 + regex-recursion: 6.0.2 + + /openapi-fetch@0.13.8: + resolution: {integrity: sha512-yJ4QKRyNxE44baQ9mY5+r/kAzZ8yXMemtNAOFwOzRXJscdjSxxzWSNlyBAr+o5JjkUw9Lc3W7OIoca0cY3PYnQ==} + requiresBuild: true + dependencies: + openapi-typescript-helpers: 0.0.15 + dev: false + + /openapi-typescript-helpers@0.0.15: + resolution: {integrity: sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw==} + requiresBuild: true + dev: false + + /ox@0.6.7(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA==} + requiresBuild: true + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.1(typescript@5.9.3)(zod@3.25.76) + eventemitter3: 5.0.1 + typescript: 5.9.3 + transitivePeerDependencies: + - zod + dev: false + + /ox@0.6.9(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug==} + requiresBuild: true + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.1(typescript@5.9.3)(zod@3.25.76) + eventemitter3: 5.0.1 + typescript: 5.9.3 + transitivePeerDependencies: + - zod + dev: false + + /ox@0.9.14(typescript@5.9.3)(zod@4.1.12): + resolution: {integrity: sha512-lxZYCzGH00WtIPPrqXCrbSW/ZiKjigfII6R0Vu1eH2GpobmcwVheiivbCvsBZzmVZcNpwkabSamPP+ZNtdnKIQ==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.1(typescript@5.9.3)(zod@4.1.12) + eventemitter3: 5.0.1 + typescript: 5.9.3 + transitivePeerDependencies: + - zod + dev: false + + /ox@0.9.3(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-KzyJP+fPV4uhuuqrTZyok4DC7vFzi7HLUFiUNEmpbyh59htKWkOC98IONC1zgXJPbHAhQgqs6B0Z6StCGhmQvg==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.1(typescript@5.9.3)(zod@3.25.76) + eventemitter3: 5.0.1 + typescript: 5.9.3 + transitivePeerDependencies: + - zod + dev: false + + /ox@0.9.6(typescript@5.9.3)(zod@3.22.4): + resolution: {integrity: sha512-8SuCbHPvv2eZLYXrNmC0EC12rdzXQLdhnOMlHDW2wiCPLxBrOOJwX5L5E61by+UjTPOryqQiRSnjIKCI+GykKg==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.1(typescript@5.9.3)(zod@3.22.4) + eventemitter3: 5.0.1 + typescript: 5.9.3 + transitivePeerDependencies: + - zod + dev: false + + /ox@0.9.6(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-8SuCbHPvv2eZLYXrNmC0EC12rdzXQLdhnOMlHDW2wiCPLxBrOOJwX5L5E61by+UjTPOryqQiRSnjIKCI+GykKg==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.1(typescript@5.9.3)(zod@3.25.76) + eventemitter3: 5.0.1 + typescript: 5.9.3 + transitivePeerDependencies: + - zod + dev: false + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: false + + /p-limit@6.2.0: + resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} + engines: {node: '>=18'} + dependencies: + yocto-queue: 1.2.1 + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: false + + /p-queue@8.1.1: + resolution: {integrity: sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==} + engines: {node: '>=18'} + dependencies: + eventemitter3: 5.0.1 + p-timeout: 6.1.4 + + /p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: false + + /package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + /package-manager-detector@1.5.0: + resolution: {integrity: sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw==} + + /pagefind@1.4.0: + resolution: {integrity: sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==} + hasBin: true + optionalDependencies: + '@pagefind/darwin-arm64': 1.4.0 + '@pagefind/darwin-x64': 1.4.0 + '@pagefind/freebsd-x64': 1.4.0 + '@pagefind/linux-arm64': 1.4.0 + '@pagefind/linux-x64': 1.4.0 + '@pagefind/windows-x64': 1.4.0 + dev: false + + /pako@0.2.9: + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + + /parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.2.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + dev: true + + /parse-imports-exports@0.2.4: + resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==} + dependencies: + parse-statements: 1.0.11 + dev: true + + /parse-latin@7.0.0: + resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} + dependencies: + '@types/nlcst': 2.0.3 + '@types/unist': 3.0.3 + nlcst-to-string: 4.0.0 + unist-util-modify-children: 4.0.0 + unist-util-visit-children: 3.0.0 + vfile: 6.0.3 + + /parse-statements@1.0.11: + resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==} + dev: true + + /parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + dependencies: + entities: 6.0.1 + + /path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: false + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + /path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + /piccolore@0.1.3: + resolution: {integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==} + + /picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + /pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + requiresBuild: true + dev: false + + /pify@5.0.0: + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} + requiresBuild: true + dev: false + + /pino-abstract-transport@0.5.0: + resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} + requiresBuild: true + dependencies: + duplexify: 4.1.3 + split2: 4.2.0 + dev: false + + /pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + dependencies: + split2: 4.2.0 + dev: false + + /pino-std-serializers@4.0.0: + resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} + requiresBuild: true + dev: false + + /pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + dev: false + + /pino@10.0.0: + resolution: {integrity: sha512-eI9pKwWEix40kfvSzqEP6ldqOoBIN7dwD/o91TY5z8vQI12sAffpR/pOqAD1IVVwIVHDpHjkq0joBPdJD0rafA==} + hasBin: true + dependencies: + atomic-sleep: 1.0.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pino-std-serializers: 7.0.0 + process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + slow-redact: 0.3.2 + sonic-boom: 4.2.0 + thread-stream: 3.1.0 + dev: false + + /pino@10.1.0: + resolution: {integrity: sha512-0zZC2ygfdqvqK8zJIr1e+wT1T/L+LF6qvqvbzEQ6tiMAoTqEVK9a1K3YRu8HEUvGEvNqZyPJTtb2sNIoTkB83w==} + hasBin: true + dependencies: + '@pinojs/redact': 0.4.0 + atomic-sleep: 1.0.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pino-std-serializers: 7.0.0 + process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.0 + thread-stream: 3.1.0 + dev: false + + /pino@7.11.0: + resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} + hasBin: true + requiresBuild: true + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 0.2.0 + pino-abstract-transport: 0.5.0 + pino-std-serializers: 4.0.0 + process-warning: 1.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.1.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 2.8.0 + thread-stream: 0.15.2 + dev: false + + /pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + + /pngjs@5.0.0: + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} + engines: {node: '>=10.13.0'} + dev: false + + /pony-cause@2.1.11: + resolution: {integrity: sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==} + engines: {node: '>=12.0.0'} + requiresBuild: true + dev: false + + /porto@0.2.19(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(@wagmi/core@2.22.1)(react@16.14.0)(typescript@5.9.3)(viem@2.38.5)(wagmi@2.19.0): + resolution: {integrity: sha512-q1vEJgdtlEOf6byWgD31GHiMwpfLuxFSfx9f7Sw4RGdvpQs2ANBGfnzzardADZegr87ZXsebSp+3vaaznEUzPQ==} + hasBin: true + peerDependencies: + '@tanstack/react-query': '>=5.59.0' + '@wagmi/core': '>=2.16.3' + react: '>=18' + typescript: '>=5.4.0' + viem: '>=2.37.0' + wagmi: '>=2.0.0' + peerDependenciesMeta: + '@tanstack/react-query': + optional: true + react: + optional: true + typescript: + optional: true + wagmi: + optional: true + dependencies: + '@tanstack/react-query': 5.90.5(react@16.14.0) + '@wagmi/core': 2.22.1(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(viem@2.38.5) + hono: 4.10.3 + idb-keyval: 6.2.2 + mipd: 0.0.7(typescript@5.9.3) + ox: 0.9.14(typescript@5.9.3)(zod@4.1.12) + react: 16.14.0 + typescript: 5.9.3 + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + wagmi: 2.19.0(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(viem@2.38.5)(zod@3.25.76) + zod: 4.1.12 + zustand: 5.0.8(@types/react@19.2.2)(react@16.14.0)(use-sync-external-store@1.4.0) + transitivePeerDependencies: + - '@types/react' + - immer + - use-sync-external-store + dev: false + + /porto@0.2.34(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(@wagmi/core@2.22.1)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(viem@2.38.5)(wagmi@2.19.0): + resolution: {integrity: sha512-o+hK9r6a4j3EAFOkgNXtcwYc4vAMsmbVhRJHrBXXV/tGVLb2V2sVGLcCFFH3CLevRAyyUUKoT0KIaoQaro4saA==} + hasBin: true + requiresBuild: true + peerDependencies: + '@tanstack/react-query': '>=5.59.0' + '@wagmi/core': '>=2.16.3' + expo-auth-session: '>=7.0.8' + expo-crypto: '>=15.0.7' + expo-web-browser: '>=15.0.8' + react: '>=18' + react-native: '>=0.81.4' + typescript: '>=5.4.0' + viem: '>=2.37.0' + wagmi: '>=2.0.0' + peerDependenciesMeta: + '@tanstack/react-query': + optional: true + expo-auth-session: + optional: true + expo-crypto: + optional: true + expo-web-browser: + optional: true + react: + optional: true + react-native: + optional: true + typescript: + optional: true + wagmi: + optional: true + dependencies: + '@tanstack/react-query': 5.90.5(react@16.14.0) + '@wagmi/core': 2.22.1(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(viem@2.38.5) + hono: 4.10.3 + idb-keyval: 6.2.2 + mipd: 0.0.7(typescript@5.9.3) + ox: 0.9.14(typescript@5.9.3)(zod@4.1.12) + react: 16.14.0 + typescript: 5.9.3 + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + wagmi: 2.19.0(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(viem@2.38.5)(zod@3.25.76) + zod: 4.1.12 + zustand: 5.0.8(@types/react@19.2.2)(react@16.14.0)(use-sync-external-store@1.4.0) + transitivePeerDependencies: + - '@types/react' + - immer + - use-sync-external-store + dev: false + + /possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + requiresBuild: true + dev: false + + /postcss-import@15.1.0(postcss@8.5.6): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.11 + + /postcss-js@4.1.0(postcss@8.5.6): + resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.5.6 + + /postcss-load-config@4.0.2(postcss@8.5.6): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.1.3 + postcss: 8.5.6 + yaml: 2.8.1 + dev: true + + /postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6): + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + dependencies: + jiti: 1.21.7 + lilconfig: 3.1.3 + postcss: 8.5.6 + + /postcss-nested@6.2.0(postcss@8.5.6): + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + /postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + /postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + /posthog-js@1.281.0: + resolution: {integrity: sha512-t3sAlgVozpU1W1ppiF5zLG6eBRPUs0hmtxN8R1V7P0qZFmnECshAAk2cBxCsxEanadT3iUpS8Z7crBytATqWQQ==} + dependencies: + '@posthog/core': 1.4.0 + core-js: 3.46.0 + fflate: 0.4.8 + preact: 10.27.2 + web-vitals: 4.2.4 + dev: false + + /preact@10.24.2: + resolution: {integrity: sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==} + requiresBuild: true + dev: false + + /preact@10.27.2: + resolution: {integrity: sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==} + dev: false + + /prettier-plugin-astro@0.14.1: + resolution: {integrity: sha512-RiBETaaP9veVstE4vUwSIcdATj6dKmXljouXc/DDNwBSPTp8FRkLGDSGFClKsAFeeg+13SB0Z1JZvbD76bigJw==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@astrojs/compiler': 2.13.0 + prettier: 3.7.2 + sass-formatter: 0.7.9 + dev: true + + /prettier-plugin-svelte@3.4.0(prettier@3.7.2)(svelte@5.42.3): + resolution: {integrity: sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==} + peerDependencies: + prettier: ^3.0.0 + svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 + dependencies: + prettier: 3.7.2 + svelte: 5.42.3 + dev: true + + /prettier-plugin-tailwindcss@0.7.1(@trivago/prettier-plugin-sort-imports@6.0.0)(prettier-plugin-astro@0.14.1)(prettier-plugin-svelte@3.4.0)(prettier@3.7.2): + resolution: {integrity: sha512-Bzv1LZcuiR1Sk02iJTS1QzlFNp/o5l2p3xkopwOrbPmtMeh3fK9rVW5M3neBQzHq+kGKj/4LGQMTNcTH4NGPtQ==} + engines: {node: '>=20.19'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-hermes': '*' + '@prettier/plugin-oxc': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-multiline-arrays: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' + prettier-plugin-svelte: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-hermes': + optional: true + '@prettier/plugin-oxc': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + '@zackad/prettier-plugin-twig': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-multiline-arrays: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-sort-imports: + optional: true + prettier-plugin-svelte: + optional: true + dependencies: + '@trivago/prettier-plugin-sort-imports': 6.0.0(prettier-plugin-svelte@3.4.0)(prettier@3.7.2)(svelte@5.42.3) + prettier: 3.7.2 + prettier-plugin-astro: 0.14.1 + prettier-plugin-svelte: 3.4.0(prettier@3.7.2)(svelte@5.42.3) + dev: true + + /prettier@3.7.2: + resolution: {integrity: sha512-n3HV2J6QhItCXndGa3oMWvWFAgN1ibnS7R9mt6iokScBOC0Ul9/iZORmU2IWUMcyAQaMPjTlY3uT34TqocUxMA==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + requiresBuild: true + dev: false + + /process-warning@1.0.0: + resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + requiresBuild: true + dev: false + + /process-warning@5.0.0: + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + dev: false + + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: false + + /property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + + /property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + + /proxy-compare@2.6.0: + resolution: {integrity: sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw==} + requiresBuild: true + dev: false + + /proxy-compare@3.0.1: + resolution: {integrity: sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==} + dev: false + + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + + /pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + requiresBuild: true + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + dev: false + + /qrcode@1.5.3: + resolution: {integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + dijkstrajs: 1.0.3 + encode-utf8: 1.0.3 + pngjs: 5.0.0 + yargs: 15.4.1 + dev: false + + /query-string@7.1.3: + resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + decode-uri-component: 0.2.2 + filter-obj: 1.1.0 + split-on-first: 1.1.0 + strict-uri-encode: 2.0.0 + dev: false + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + /quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + dev: false + + /radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + + /react-dom@16.14.0(react@16.14.0): + resolution: {integrity: sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==} + peerDependencies: + react: ^16.14.0 + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + prop-types: 15.8.1 + react: 16.14.0 + scheduler: 0.19.1 + dev: false + + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: false + + /react@16.14.0: + resolution: {integrity: sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + prop-types: 15.8.1 + dev: false + + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + requiresBuild: true + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: false + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + requiresBuild: true + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + + /readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + requiresBuild: true + + /real-require@0.1.0: + resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} + engines: {node: '>= 12.13.0'} + requiresBuild: true + dev: false + + /real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + dev: false + + /recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + dependencies: + '@types/estree': 1.0.8 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 + dev: true + + /recma-jsx@1.0.1(acorn@8.15.0): + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + dev: true + + /recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + dependencies: + '@types/estree': 1.0.8 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + dev: true + + /recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + dependencies: + '@types/estree': 1.0.8 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 + dev: true + + /regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + dependencies: + regex-utilities: 2.3.0 + + /regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + /regex@6.0.1: + resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} + dependencies: + regex-utilities: 2.3.0 + + /rehype-expressive-code@0.41.4: + resolution: {integrity: sha512-qEUKfh/Aw9VZSUCXnJef41o7lpfnhXmQdXTkP2ZWGibSk4SoJVJ4ra1xN1t+hL1rp0d0GPKZ1CpM3q6bjV0xbg==} + dependencies: + expressive-code: 0.41.4 + dev: false + + /rehype-katex@7.0.1: + resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} + dependencies: + '@types/hast': 3.0.4 + '@types/katex': 0.16.7 + hast-util-from-html-isomorphic: 2.0.0 + hast-util-to-text: 4.0.2 + katex: 0.16.25 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + dev: true + + /rehype-parse@9.0.1: + resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} + dependencies: + '@types/hast': 3.0.4 + hast-util-from-html: 2.0.3 + unified: 11.0.5 + + /rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + dependencies: + '@types/hast': 3.0.4 + hast-util-raw: 9.1.0 + vfile: 6.0.3 + + /rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + dependencies: + '@types/estree': 1.0.8 + '@types/hast': 3.0.4 + hast-util-to-estree: 3.1.3 + transitivePeerDependencies: + - supports-color + dev: true + + /rehype-slug@6.0.0: + resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} + dependencies: + '@types/hast': 3.0.4 + github-slugger: 2.0.0 + hast-util-heading-rank: 3.0.0 + hast-util-to-string: 3.0.1 + unist-util-visit: 5.0.0 + dev: false + + /rehype-stringify@10.0.1: + resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + dependencies: + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + unified: 11.0.5 + + /rehype@13.0.2: + resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} + dependencies: + '@types/hast': 3.0.4 + rehype-parse: 9.0.1 + rehype-stringify: 10.0.1 + unified: 11.0.5 + + /remark-gemoji@8.0.0: + resolution: {integrity: sha512-/fL9rc72FYwFGtOKcT+QeQdx9Q9t5v4N6KLXSDOTEgaedzK85I9judBqB2eqz+g4b0ERMejlwSOuPK+wket6aA==} + dependencies: + '@types/mdast': 4.0.4 + gemoji: 8.1.0 + mdast-util-find-and-replace: 3.0.2 + dev: false + + /remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + /remark-math@6.0.0: + resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} + dependencies: + '@types/mdast': 4.0.4 + mdast-util-math: 3.0.0 + micromark-extension-math: 3.1.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + dev: true + + /remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + /remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.3 + + /remark-smartypants@3.0.2: + resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} + engines: {node: '>=16.0.0'} + dependencies: + retext: 9.0.0 + retext-smartypants: 6.2.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + + /remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: false + + /require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: false + + /resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} + hasBin: true + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + /restructure@3.0.2: + resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==} + + /retext-latin@4.0.0: + resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} + dependencies: + '@types/nlcst': 2.0.3 + parse-latin: 7.0.0 + unified: 11.0.5 + + /retext-smartypants@6.2.0: + resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unist-util-visit: 5.0.0 + + /retext-stringify@4.0.0: + resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unified: 11.0.5 + + /retext@9.0.0: + resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} + dependencies: + '@types/nlcst': 2.0.3 + retext-latin: 4.0.0 + retext-stringify: 4.0.0 + unified: 11.0.5 + + /reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + /rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rollup@4.52.5: + resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.52.5 + '@rollup/rollup-android-arm64': 4.52.5 + '@rollup/rollup-darwin-arm64': 4.52.5 + '@rollup/rollup-darwin-x64': 4.52.5 + '@rollup/rollup-freebsd-arm64': 4.52.5 + '@rollup/rollup-freebsd-x64': 4.52.5 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 + '@rollup/rollup-linux-arm-musleabihf': 4.52.5 + '@rollup/rollup-linux-arm64-gnu': 4.52.5 + '@rollup/rollup-linux-arm64-musl': 4.52.5 + '@rollup/rollup-linux-loong64-gnu': 4.52.5 + '@rollup/rollup-linux-ppc64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-musl': 4.52.5 + '@rollup/rollup-linux-s390x-gnu': 4.52.5 + '@rollup/rollup-linux-x64-gnu': 4.52.5 + '@rollup/rollup-linux-x64-musl': 4.52.5 + '@rollup/rollup-openharmony-arm64': 4.52.5 + '@rollup/rollup-win32-arm64-msvc': 4.52.5 + '@rollup/rollup-win32-ia32-msvc': 4.52.5 + '@rollup/rollup-win32-x64-gnu': 4.52.5 + '@rollup/rollup-win32-x64-msvc': 4.52.5 + fsevents: 2.3.3 + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + + /runed@0.23.4(svelte@5.42.3): + resolution: {integrity: sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==} + peerDependencies: + svelte: ^5.7.0 + dependencies: + esm-env: 1.2.2 + svelte: 5.42.3 + dev: false + + /rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + dependencies: + tslib: 2.8.1 + dev: false + + /s.color@0.0.15: + resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==} + dev: true + + /sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 + dev: false + + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + requiresBuild: true + dev: false + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + requiresBuild: true + dev: false + + /safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + dev: false + + /safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + dev: false + + /sander@0.5.1: + resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} + dependencies: + es6-promise: 3.3.1 + graceful-fs: 4.2.11 + mkdirp: 0.5.6 + rimraf: 2.7.1 + dev: true + + /sass-formatter@0.7.9: + resolution: {integrity: sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw==} + dependencies: + suf-log: 2.5.3 + dev: true + + /sax@1.4.3: + resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} + + /scheduler@0.19.1: + resolution: {integrity: sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + dev: false + + /scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + dev: true + + /seedrandom@3.0.5: + resolution: {integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==} + dev: false + + /semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + dev: false + + /semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + /set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: false + + /set-cookie-parser@2.7.2: + resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} + dev: false + + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + dev: false + + /sha.js@2.4.12: + resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==} + engines: {node: '>= 0.10'} + hasBin: true + requiresBuild: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + to-buffer: 1.2.2 + dev: false + + /sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + requiresBuild: true + dependencies: + '@img/colour': 1.0.0 + detect-libc: 2.1.2 + semver: 7.7.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + /shiki@3.19.0: + resolution: {integrity: sha512-77VJr3OR/VUZzPiStyRhADmO2jApMM0V2b1qf0RpfWya8Zr1PeZev5AEpPGAAKWdiYUtcZGBE4F5QvJml1PvWA==} + dependencies: + '@shikijs/core': 3.19.0 + '@shikijs/engine-javascript': 3.19.0 + '@shikijs/engine-oniguruma': 3.19.0 + '@shikijs/langs': 3.19.0 + '@shikijs/themes': 3.19.0 + '@shikijs/types': 3.19.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + /sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + dev: false + + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + /sitemap@8.0.2: + resolution: {integrity: sha512-LwktpJcyZDoa0IL6KT++lQ53pbSrx2c9ge41/SeLTyqy2XUNA6uR4+P9u5IVo5lPeL2arAcOKn1aZAxoYbCKlQ==} + engines: {node: '>=14.0.0', npm: '>=6.0.0'} + hasBin: true + dependencies: + '@types/node': 17.0.45 + '@types/sax': 1.2.7 + arg: 5.0.2 + sax: 1.4.3 + dev: false + + /slow-redact@0.3.2: + resolution: {integrity: sha512-MseHyi2+E/hBRqdOi5COy6wZ7j7DxXRz9NkseavNYSvvWC06D8a5cidVZX3tcG5eCW3NIyVU4zT63hw0Q486jw==} + dev: false + + /smol-toml@1.5.2: + resolution: {integrity: sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ==} + engines: {node: '>= 18'} + + /socket.io-client@4.8.1: + resolution: {integrity: sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.4 + engine.io-client: 6.6.3 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /sonic-boom@2.8.0: + resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} + requiresBuild: true + dependencies: + atomic-sleep: 1.0.0 + dev: false + + /sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + dependencies: + atomic-sleep: 1.0.0 + dev: false + + /sorcery@0.11.1: + resolution: {integrity: sha512-o7npfeJE6wi6J9l0/5LKshFzZ2rMatRiCDwYeDQaOzqdzRJwALhX7mk/A/ecg6wjMu7wdZbmXfD2S/vpOg0bdQ==} + hasBin: true + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + buffer-crc32: 1.0.0 + minimist: 1.2.8 + sander: 0.5.1 + dev: true + + /source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + /source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + dev: true + + /sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + dev: true + + /space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + /split-on-first@1.1.0: + resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} + engines: {node: '>=6'} + requiresBuild: true + dev: false + + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: false + + /stream-replace-string@2.0.0: + resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} + dev: false + + /stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + requiresBuild: true + dev: false + + /strict-uri-encode@2.0.0: + resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} + engines: {node: '>=4'} + requiresBuild: true + dev: false + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.2 + + /string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 + + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + requiresBuild: true + dependencies: + safe-buffer: 5.1.2 + dev: false + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + requiresBuild: true + dependencies: + safe-buffer: 5.2.1 + dev: false + + /stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.2.2 + + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: true + + /style-to-js@1.1.18: + resolution: {integrity: sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg==} + dependencies: + style-to-object: 1.0.11 + dev: true + + /style-to-object@1.0.11: + resolution: {integrity: sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow==} + dependencies: + inline-style-parser: 0.2.4 + + /sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + commander: 4.1.1 + glob: 10.5.0 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + ts-interface-checker: 0.1.13 + + /suf-log@2.5.3: + resolution: {integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==} + dependencies: + s.color: 0.0.15 + dev: true + + /superstruct@1.0.4: + resolution: {integrity: sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dev: false + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + /svelte-preprocess-cssmodules@3.0.1(svelte@5.42.3): + resolution: {integrity: sha512-3EKngJ8ydHiIj8cHQNaKx3uuvspvGM902wDNiDri8611QuxnDY5OemcP7k/QJjZ1s41PvLZHfsayLWyMRcMLIQ==} + peerDependencies: + svelte: ^5.15.0 + dependencies: + acorn: 8.15.0 + big.js: 6.2.2 + estree-walker: 2.0.2 + magic-string: 0.25.9 + svelte: 5.42.3 + dev: true + + /svelte-preprocess@5.1.4(postcss@8.5.6)(svelte@5.42.3)(typescript@5.9.3): + resolution: {integrity: sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==} + engines: {node: '>= 16.0.0'} + requiresBuild: true + peerDependencies: + '@babel/core': ^7.10.2 + coffeescript: ^2.5.1 + less: ^3.11.3 || ^4.0.0 + postcss: ^7 || ^8 + postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + pug: ^3.0.0 + sass: ^1.26.8 + stylus: ^0.55.0 + sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 + svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 + typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' + peerDependenciesMeta: + '@babel/core': + optional: true + coffeescript: + optional: true + less: + optional: true + postcss: + optional: true + postcss-load-config: + optional: true + pug: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + typescript: + optional: true + dependencies: + '@types/pug': 2.0.10 + detect-indent: 6.1.0 + magic-string: 0.30.21 + postcss: 8.5.6 + sorcery: 0.11.1 + strip-indent: 3.0.0 + svelte: 5.42.3 + typescript: 5.9.3 + dev: true + + /svelte-runes@0.0.7(svelte@5.42.3): + resolution: {integrity: sha512-EbXabAhdcz5T5lOyykphopNQZQ7qYWEaKnK5Tr46e/3ntyW60ZtVhvsjYRbtTmU6ts5J65wntuN2A/7kpp9A7g==} + peerDependencies: + svelte: 5.0.0 + dependencies: + esm-env: 1.2.2 + svelte: 5.42.3 + dev: false + + /svelte-sonner@0.3.28(svelte@5.42.3): + resolution: {integrity: sha512-K3AmlySeFifF/cKgsYNv5uXqMVNln0NBAacOYgmkQStLa/UoU0LhfAACU6Gr+YYC8bOCHdVmFNoKuDbMEsppJg==} + peerDependencies: + svelte: ^3.0.0 || ^4.0.0 || ^5.0.0-next.1 + dependencies: + svelte: 5.42.3 + dev: false + + /svelte-toolbelt@0.7.1(svelte@5.42.3): + resolution: {integrity: sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.0.0 + dependencies: + clsx: 2.1.1 + runed: 0.23.4(svelte@5.42.3) + style-to-object: 1.0.11 + svelte: 5.42.3 + dev: false + + /svelte2tsx@0.7.45(svelte@5.42.3)(typescript@5.9.3): + resolution: {integrity: sha512-cSci+mYGygYBHIZLHlm/jYlEc1acjAHqaQaDFHdEBpUueM9kSTnPpvPtSl5VkJOU1qSJ7h1K+6F/LIUYiqC8VA==} + peerDependencies: + svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 + typescript: ^4.9.4 || ^5.0.0 + dependencies: + dedent-js: 1.0.1 + scule: 1.3.0 + svelte: 5.42.3 + typescript: 5.9.3 + dev: true + + /svelte@5.42.3: + resolution: {integrity: sha512-+8dUmdJGvKSWEfbAgIaUmpD97s1bBAGxEf6s7wQonk+HNdMmrBZtpStzRypRqrYBFUmmhaUgBHUjraE8gLqWAw==} + engines: {node: '>=18'} + dependencies: + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 + '@sveltejs/acorn-typescript': 1.0.6(acorn@8.15.0) + '@types/estree': 1.0.8 + acorn: 8.15.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + clsx: 2.1.1 + esm-env: 1.2.2 + esrap: 2.1.1 + is-reference: 3.0.3 + locate-character: 3.0.0 + magic-string: 0.30.21 + zimmerframe: 1.1.4 + + /svgo@4.0.0: + resolution: {integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==} + engines: {node: '>=16'} + hasBin: true + dependencies: + commander: 11.1.0 + css-select: 5.2.2 + css-tree: 3.1.0 + css-what: 6.2.2 + csso: 5.0.5 + picocolors: 1.1.1 + sax: 1.4.3 + + /tabbable@6.3.0: + resolution: {integrity: sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==} + dev: false + + /tailwind-merge@2.5.4: + resolution: {integrity: sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==} + dev: false + + /tailwind-merge@2.6.0: + resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} + dev: false + + /tailwind-variants@0.3.1(tailwindcss@3.4.18): + resolution: {integrity: sha512-krn67M3FpPwElg4FsZrOQd0U26o7UDH/QOkK8RNaiCCrr052f6YJPBUfNKnPo/s/xRzNPtv1Mldlxsg8Tb46BQ==} + engines: {node: '>=16.x', pnpm: '>=7.x'} + peerDependencies: + tailwindcss: '*' + dependencies: + tailwind-merge: 2.5.4 + tailwindcss: 3.4.18 + dev: false + + /tailwindcss-animate@1.0.7(tailwindcss@3.4.18): + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + dependencies: + tailwindcss: 3.4.18 + dev: false + + /tailwindcss@3.4.18: + resolution: {integrity: sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-import: 15.1.0(postcss@8.5.6) + postcss-js: 4.1.0(postcss@8.5.6) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6) + postcss-nested: 6.2.0(postcss@8.5.6) + postcss-selector-parser: 6.1.2 + resolve: 1.22.11 + sucrase: 3.35.0 + transitivePeerDependencies: + - tsx + - yaml + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + + /thread-stream@0.15.2: + resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} + requiresBuild: true + dependencies: + real-require: 0.1.0 + dev: false + + /thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + dependencies: + real-require: 0.2.0 + dev: false + + /tiny-emitter@2.1.0: + resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==} + dev: false + + /tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + + /tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} + + /tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + /to-buffer@1.2.2: + resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + isarray: 2.0.5 + safe-buffer: 5.2.1 + typed-array-buffer: 1.0.3 + dev: false + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + requiresBuild: true + dependencies: + is-number: 7.0.0 + + /totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + dev: false + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + requiresBuild: true + dev: false + + /trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + /trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + /tsconfck@3.1.6(typescript@5.9.3): + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 5.9.3 + + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + requiresBuild: true + dev: false + + /tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + /type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + /typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + dev: false + + /typed-function@4.2.1: + resolution: {integrity: sha512-EGjWssW7Tsk4DGfE+5yluuljS1OGYWiI1J6e8puZz9nTMM51Oug8CD5Zo4gWMsOhq5BI+1bF+rWTm4Vbj3ivRA==} + engines: {node: '>= 18'} + dev: false + + /typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + /ua-parser-js@1.0.39: + resolution: {integrity: sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==} + hasBin: true + dev: false + + /ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + + /uint8arrays@3.1.0: + resolution: {integrity: sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==} + requiresBuild: true + dependencies: + multiformats: 9.9.0 + dev: false + + /uint8arrays@3.1.1: + resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} + dependencies: + multiformats: 9.9.0 + dev: false + + /ultrahtml@1.6.0: + resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} + + /uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + + /undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + /unicode-properties@1.4.1: + resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==} + dependencies: + base64-js: 1.5.1 + unicode-trie: 2.0.0 + + /unicode-trie@2.0.0: + resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} + dependencies: + pako: 0.2.9 + tiny-inflate: 1.0.3 + + /unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + /unifont@0.6.0: + resolution: {integrity: sha512-5Fx50fFQMQL5aeHyWnZX9122sSLckcDvcfFiBf3QYeHa7a1MKJooUy52b67moi2MJYkrfo/TWY+CoLdr/w0tTA==} + dependencies: + css-tree: 3.1.0 + ofetch: 1.5.0 + ohash: 2.0.11 + + /unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + /unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + dependencies: + '@types/unist': 3.0.3 + + /unist-util-modify-children@4.0.0: + resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} + dependencies: + '@types/unist': 3.0.3 + array-iterate: 2.0.1 + + /unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + dependencies: + '@types/unist': 3.0.3 + dev: true + + /unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + dependencies: + '@types/unist': 3.0.3 + + /unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.0.0 + + /unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + dependencies: + '@types/unist': 3.0.3 + + /unist-util-visit-children@3.0.0: + resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} + dependencies: + '@types/unist': 3.0.3 + + /unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + /unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + /unstorage@1.17.1(idb-keyval@6.2.2): + resolution: {integrity: sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==} + peerDependencies: + '@azure/app-configuration': ^1.8.0 + '@azure/cosmos': ^4.2.0 + '@azure/data-tables': ^13.3.0 + '@azure/identity': ^4.6.0 + '@azure/keyvault-secrets': ^4.9.0 + '@azure/storage-blob': ^12.26.0 + '@capacitor/preferences': ^6.0.3 || ^7.0.0 + '@deno/kv': '>=0.9.0' + '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 + '@planetscale/database': ^1.19.0 + '@upstash/redis': ^1.34.3 + '@vercel/blob': '>=0.27.1' + '@vercel/functions': ^2.2.12 || ^3.0.0 + '@vercel/kv': ^1.0.1 + aws4fetch: ^1.0.20 + db0: '>=0.2.1' + idb-keyval: ^6.2.1 + ioredis: ^5.4.2 + uploadthing: ^7.4.4 + peerDependenciesMeta: + '@azure/app-configuration': + optional: true + '@azure/cosmos': + optional: true + '@azure/data-tables': + optional: true + '@azure/identity': + optional: true + '@azure/keyvault-secrets': + optional: true + '@azure/storage-blob': + optional: true + '@capacitor/preferences': + optional: true + '@deno/kv': + optional: true + '@netlify/blobs': + optional: true + '@planetscale/database': + optional: true + '@upstash/redis': + optional: true + '@vercel/blob': + optional: true + '@vercel/functions': + optional: true + '@vercel/kv': + optional: true + aws4fetch: + optional: true + db0: + optional: true + idb-keyval: + optional: true + ioredis: + optional: true + uploadthing: + optional: true + dependencies: + anymatch: 3.1.3 + chokidar: 4.0.3 + destr: 2.0.5 + h3: 1.15.4 + idb-keyval: 6.2.2 + lru-cache: 10.4.3 + node-fetch-native: 1.6.7 + ofetch: 1.5.0 + ufo: 1.6.1 + dev: false + + /unstorage@1.17.3: + resolution: {integrity: sha512-i+JYyy0DoKmQ3FximTHbGadmIYb8JEpq7lxUjnjeB702bCPum0vzo6oy5Mfu0lpqISw7hCyMW2yj4nWC8bqJ3Q==} + peerDependencies: + '@azure/app-configuration': ^1.8.0 + '@azure/cosmos': ^4.2.0 + '@azure/data-tables': ^13.3.0 + '@azure/identity': ^4.6.0 + '@azure/keyvault-secrets': ^4.9.0 + '@azure/storage-blob': ^12.26.0 + '@capacitor/preferences': ^6.0.3 || ^7.0.0 + '@deno/kv': '>=0.9.0' + '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 + '@planetscale/database': ^1.19.0 + '@upstash/redis': ^1.34.3 + '@vercel/blob': '>=0.27.1' + '@vercel/functions': ^2.2.12 || ^3.0.0 + '@vercel/kv': ^1.0.1 + aws4fetch: ^1.0.20 + db0: '>=0.2.1' + idb-keyval: ^6.2.1 + ioredis: ^5.4.2 + uploadthing: ^7.4.4 + peerDependenciesMeta: + '@azure/app-configuration': + optional: true + '@azure/cosmos': + optional: true + '@azure/data-tables': + optional: true + '@azure/identity': + optional: true + '@azure/keyvault-secrets': + optional: true + '@azure/storage-blob': + optional: true + '@capacitor/preferences': + optional: true + '@deno/kv': + optional: true + '@netlify/blobs': + optional: true + '@planetscale/database': + optional: true + '@upstash/redis': + optional: true + '@vercel/blob': + optional: true + '@vercel/functions': + optional: true + '@vercel/kv': + optional: true + aws4fetch: + optional: true + db0: + optional: true + idb-keyval: + optional: true + ioredis: + optional: true + uploadthing: + optional: true + dependencies: + anymatch: 3.1.3 + chokidar: 4.0.3 + destr: 2.0.5 + h3: 1.15.4 + lru-cache: 10.4.3 + node-fetch-native: 1.6.7 + ofetch: 1.5.1 + ufo: 1.6.1 + + /update-browserslist-db@1.1.4(browserslist@4.27.0): + resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.27.0 + escalade: 3.2.0 + picocolors: 1.1.1 + dev: true + + /use-sync-external-store@1.2.0(react@16.14.0): + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + requiresBuild: true + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 16.14.0 + dev: false + + /use-sync-external-store@1.4.0(react@16.14.0): + resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + dependencies: + react: 16.14.0 + dev: false + + /utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.4 + dev: false + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + /util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + requiresBuild: true + dependencies: + inherits: 2.0.4 + is-arguments: 1.2.0 + is-generator-function: 1.1.2 + is-typed-array: 1.1.15 + which-typed-array: 1.1.19 + dev: false + + /uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + dev: false + + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + requiresBuild: true + dev: false + + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + requiresBuild: true + dev: false + + /valtio@1.13.2(@types/react@19.2.2)(react@16.14.0): + resolution: {integrity: sha512-Qik0o+DSy741TmkqmRfjq+0xpZBXi/Y6+fXZLn0xNF1z/waFMbE3rkivv5Zcf9RrMUp6zswf2J7sbh2KBlba5A==} + engines: {node: '>=12.20.0'} + requiresBuild: true + peerDependencies: + '@types/react': '>=16.8' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + dependencies: + '@types/react': 19.2.2 + derive-valtio: 0.1.0(valtio@1.13.2) + proxy-compare: 2.6.0 + react: 16.14.0 + use-sync-external-store: 1.2.0(react@16.14.0) + dev: false + + /valtio@2.1.7(@types/react@19.2.2)(react@16.14.0): + resolution: {integrity: sha512-DwJhCDpujuQuKdJ2H84VbTjEJJteaSmqsuUltsfbfdbotVfNeTE4K/qc/Wi57I9x8/2ed4JNdjEna7O6PfavRg==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + react: '>=18.0.0' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + dependencies: + '@types/react': 19.2.2 + proxy-compare: 3.0.1 + react: 16.14.0 + dev: false + + /vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + + /vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + /vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + /viem@2.23.2(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA==} + requiresBuild: true + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@scure/bip32': 1.6.2 + '@scure/bip39': 1.5.4 + abitype: 1.0.8(typescript@5.9.3)(zod@3.25.76) + isows: 1.0.6(ws@8.18.0) + ox: 0.6.7(typescript@5.9.3)(zod@3.25.76) + typescript: 5.9.3 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + + /viem@2.38.5(typescript@5.9.3)(zod@3.22.4): + resolution: {integrity: sha512-EU2olUnWd5kBK1t3BicwaamPHGUANRYetoDLSVzDy7XQ8o8UswItnkQbufe3xTcdRCtb2JYMwjlgHZZ7fUoLdA==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.0(typescript@5.9.3)(zod@3.22.4) + isows: 1.0.7(ws@8.18.3) + ox: 0.9.6(typescript@5.9.3)(zod@3.22.4) + typescript: 5.9.3 + ws: 8.18.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + + /viem@2.38.5(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-EU2olUnWd5kBK1t3BicwaamPHGUANRYetoDLSVzDy7XQ8o8UswItnkQbufe3xTcdRCtb2JYMwjlgHZZ7fUoLdA==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.0(typescript@5.9.3)(zod@3.25.76) + isows: 1.0.7(ws@8.18.3) + ox: 0.9.6(typescript@5.9.3)(zod@3.25.76) + typescript: 5.9.3 + ws: 8.18.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: false + + /virtua@0.41.5(react-dom@16.14.0)(react@16.14.0)(svelte@5.42.3): + resolution: {integrity: sha512-x1vsA9qIQNBFcCs1rzCjyYdMvDu/kT6o6zwwQnyqFOFdOyIzqyzU3WfR/hJC8WxUZXSCo2LkuoqapL8VDDMQPg==} + peerDependencies: + react: '>=16.14.0' + react-dom: '>=16.14.0' + solid-js: '>=1.0' + svelte: '>=5.0' + vue: '>=3.2' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + solid-js: + optional: true + svelte: + optional: true + vue: + optional: true + dependencies: + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + svelte: 5.42.3 + dev: false + + /vite-plugin-mkcert@1.17.9(vite@7.1.12): + resolution: {integrity: sha512-SwI7yqp2Cq4r2XItarnHRCj2uzHPqevbxFNMLpyN+LDXd5w1vmZeM4l5X/wCZoP4mjPQYN+9+4kmE6e3nPO5fg==} + engines: {node: '>=v16.7.0'} + peerDependencies: + vite: '>=3' + dependencies: + axios: 1.13.2(debug@4.4.3) + debug: 4.4.3 + picocolors: 1.1.1 + vite: 7.1.12 + transitivePeerDependencies: + - supports-color + dev: false + + /vite@6.4.1: + resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + dependencies: + esbuild: 0.25.11 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.52.5 + tinyglobby: 0.2.15 + optionalDependencies: + fsevents: 2.3.3 + + /vite@7.1.12: + resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + dependencies: + esbuild: 0.25.11 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.52.5 + tinyglobby: 0.2.15 + optionalDependencies: + fsevents: 2.3.3 + + /vitefu@1.1.1(vite@6.4.1): + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + peerDependenciesMeta: + vite: + optional: true + dependencies: + vite: 6.4.1 + + /vitefu@1.1.1(vite@7.1.12): + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + peerDependenciesMeta: + vite: + optional: true + dependencies: + vite: 7.1.12 + dev: false + + /vscode-languageserver-textdocument@1.0.12: + resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} + dev: true + + /vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + dev: true + + /wagmi@2.19.0(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(viem@2.38.5)(zod@3.25.76): + resolution: {integrity: sha512-0Ypzs5rkj1d6uBcz2PBGqAfk+r2TfsmPh4cMxoCJyFy5P1IL3FHY9lQLCu77NJZ8DlVl+dd9mdPZrQADb8sLcw==} + peerDependencies: + '@tanstack/react-query': '>=5.0.0' + react: '>=18' + typescript: '>=5.0.4' + viem: 2.x + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@tanstack/react-query': 5.90.5(react@16.14.0) + '@wagmi/connectors': 6.1.1(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(@wagmi/core@2.22.1)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(viem@2.38.5)(wagmi@2.19.0)(zod@3.25.76) + '@wagmi/core': 2.22.1(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(viem@2.38.5) + react: 16.14.0 + typescript: 5.9.3 + use-sync-external-store: 1.4.0(react@16.14.0) + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@tanstack/query-core' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - expo-auth-session + - expo-crypto + - expo-web-browser + - immer + - ioredis + - react-native + - supports-color + - uploadthing + - utf-8-validate + - zod + dev: false + + /web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + /web-vitals@4.2.4: + resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} + dev: false + + /web-vitals@5.1.0: + resolution: {integrity: sha512-ArI3kx5jI0atlTtmV0fWU3fjpLmq/nD3Zr1iFFlJLaqa5wLBkUSzINwBPySCX/8jRyjlmy1Volw1kz1g9XE4Jg==} + dev: false + + /webextension-polyfill@0.10.0: + resolution: {integrity: sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==} + requiresBuild: true + dev: false + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + requiresBuild: true + dev: false + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + requiresBuild: true + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: false + + /which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + dev: false + + /which-pm-runs@1.1.0: + resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} + engines: {node: '>=4'} + + /which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + requiresBuild: true + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + dev: false + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + + /widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + dependencies: + string-width: 7.2.0 + + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.1.2 + + /wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.1.2 + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + requiresBuild: true + + /ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + requiresBuild: true + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + requiresBuild: true + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + requiresBuild: true + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /xmlhttprequest-ssl@2.1.2: + resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==} + engines: {node: '>=0.4.0'} + requiresBuild: true + dev: false + + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + requiresBuild: true + dev: false + + /xxhash-wasm@1.1.0: + resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} + + /y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: false + + /yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + engines: {node: '>= 14.6'} + hasBin: true + dev: true + + /yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: false + + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + /yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + dev: false + + /yocto-queue@1.2.1: + resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} + engines: {node: '>=12.20'} + + /yocto-spinner@0.2.3: + resolution: {integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==} + engines: {node: '>=18.19'} + dependencies: + yoctocolors: 2.1.2 + + /yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + + /zimmerframe@1.1.4: + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} + + /zod-to-json-schema@3.25.0(zod@3.25.76): + resolution: {integrity: sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==} + peerDependencies: + zod: ^3.25 || ^4 + dependencies: + zod: 3.25.76 + + /zod-to-ts@1.2.0(typescript@5.9.3)(zod@3.25.76): + resolution: {integrity: sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==} + peerDependencies: + typescript: ^4.9.4 || ^5.0.2 + zod: ^3 + dependencies: + typescript: 5.9.3 + zod: 3.25.76 + + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + dev: false + + /zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + + /zod@4.1.12: + resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==} + dev: false + + /zustand@5.0.0(@types/react@19.2.2)(react@16.14.0)(use-sync-external-store@1.4.0): + resolution: {integrity: sha512-LE+VcmbartOPM+auOjCCLQOsQ05zUTp8RkgwRzefUk+2jISdMMFnxvyTjA4YNWr5ZGXYbVsEMZosttuxUBkojQ==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + dependencies: + '@types/react': 19.2.2 + react: 16.14.0 + use-sync-external-store: 1.4.0(react@16.14.0) + dev: false + + /zustand@5.0.3(@types/react@19.2.2)(react@16.14.0)(use-sync-external-store@1.4.0): + resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} + engines: {node: '>=12.20.0'} + requiresBuild: true + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + dependencies: + '@types/react': 19.2.2 + react: 16.14.0 + use-sync-external-store: 1.4.0(react@16.14.0) + dev: false + + /zustand@5.0.8(@types/react@19.2.2)(react@16.14.0)(use-sync-external-store@1.4.0): + resolution: {integrity: sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + dependencies: + '@types/react': 19.2.2 + react: 16.14.0 + use-sync-external-store: 1.4.0(react@16.14.0) + dev: false + + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + + github.com/santiment/san-webkit/95902f9e0fe3dcddccf60d69fa49f79fb1586d80(@amplitude/rrweb@2.0.0-alpha.33)(@melt-ui/svelte@0.86.6)(@sveltejs/adapter-auto@3.3.1)(@sveltejs/adapter-node@5.4.0)(@sveltejs/kit@2.48.2)(@sveltejs/vite-plugin-svelte@5.1.1)(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(@wagmi/connectors@5.11.2)(@wagmi/core@2.22.1)(bits-ui@1.8.0)(estree-walker@3.0.3)(graphql@16.11.0)(highlight.js@11.11.1)(indicatorts@2.2.2)(lottie-web@5.13.0)(marked-highlight@2.2.2)(marked@15.0.12)(mathjs@14.9.1)(monaco-editor@0.52.2)(react-dom@16.14.0)(react@16.14.0)(rxjs@7.8.2)(svelte@5.42.3)(tailwind-merge@2.6.0)(tailwindcss@3.4.18)(typescript@5.9.3)(uuid@11.1.0)(viem@2.38.5)(vite@7.1.12)(wagmi@2.19.0): + resolution: {tarball: https://codeload.github.com/santiment/san-webkit/tar.gz/95902f9e0fe3dcddccf60d69fa49f79fb1586d80} + id: github.com/santiment/san-webkit/95902f9e0fe3dcddccf60d69fa49f79fb1586d80 + name: san-webkit-next + version: 0.0.1 + hasBin: true + peerDependencies: + '@melt-ui/svelte': ^0.85.0 + '@santiment-network/chart-next': npm:@santiment-network/chart@^1.0.16 + '@sveltejs/adapter-auto': ^3.2.4 + '@sveltejs/adapter-node': ^5.2.2 + '@sveltejs/kit': ^2.5.27 + '@sveltejs/vite-plugin-svelte': ^5.0.3 + '@wagmi/connectors': ^5.1.10 + '@wagmi/core': ^2.13.5 + bits-ui: ^0.21.16 + estree-walker: ^3.0.3 + graphql: ^16.8.2 + highlight.js: ^11.11.1 + indicatorts: ^2.2.2 + lottie-web: ^5.13.0 + marked: ^15.0.12 + marked-highlight: ^2.2.2 + mathjs: ^14.5.2 + monaco-editor: ^0.52.2 + rxjs: ^7.8.1 + svelte: ^5.0.0-next.1 + tailwind-merge: ^2.3.0 + tailwindcss: ^3.4.3 + uuid: ^11.1.0 + viem: ~2.21.7 + vite: ^5.4.8 + wagmi: ^2.12.16 + dependencies: + '@amplitude/analytics-browser': 2.29.0 + '@amplitude/plugin-session-replay-browser': 1.23.0(@amplitude/rrweb@2.0.0-alpha.33) + '@internationalized/date': 3.10.0 + '@melt-ui/svelte': 0.86.6(svelte@5.42.3) + '@reown/appkit': 1.8.12(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(zod@3.25.76) + '@reown/appkit-adapter-wagmi': 1.8.12(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(@wagmi/core@2.22.1)(react@16.14.0)(typescript@5.9.3)(viem@2.38.5)(wagmi@2.19.0)(zod@3.25.76) + '@stripe/stripe-js': 4.10.0 + '@sveltejs/adapter-auto': 3.3.1(@sveltejs/kit@2.48.2) + '@sveltejs/adapter-node': 5.4.0(@sveltejs/kit@2.48.2) + '@sveltejs/kit': 2.48.2(@sveltejs/vite-plugin-svelte@5.1.1)(svelte@5.42.3)(vite@7.1.12) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.42.3)(vite@7.1.12) + '@wagmi/connectors': 5.11.2(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(@wagmi/core@2.22.1)(react@16.14.0)(typescript@5.9.3)(viem@2.38.5)(wagmi@2.19.0)(zod@3.25.76) + '@wagmi/core': 2.22.1(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(use-sync-external-store@1.4.0)(viem@2.38.5) + bits-ui: 1.8.0(svelte@5.42.3) + drawer-svelte: 0.1.3(@melt-ui/svelte@0.86.6)(esm-env@1.2.2)(svelte-runes@0.0.7)(svelte@5.42.3) + esm-env: 1.2.2 + estree-walker: 3.0.3 + fast-glob: 3.3.3 + graphql: 16.11.0 + highlight.js: 11.11.1 + indicatorts: 2.2.2 + lottie-web: 5.13.0 + marked: 15.0.12 + marked-highlight: 2.2.2(marked@15.0.12) + mathjs: 14.9.1 + monaco-editor: 0.52.2 + pino: 10.1.0 + posthog-js: 1.281.0 + rxjs: 7.8.2 + svelte: 5.42.3 + svelte-runes: 0.0.7(svelte@5.42.3) + svelte-sonner: 0.3.28(svelte@5.42.3) + tailwind-merge: 2.6.0 + tailwind-variants: 0.3.1(tailwindcss@3.4.18) + tailwindcss: 3.4.18 + tailwindcss-animate: 1.0.7(tailwindcss@3.4.18) + ua-parser-js: 1.0.39 + uuid: 11.1.0 + viem: 2.38.5(typescript@5.9.3)(zod@3.25.76) + virtua: 0.41.5(react-dom@16.14.0)(react@16.14.0)(svelte@5.42.3) + vite: 7.1.12 + wagmi: 2.19.0(@tanstack/react-query@5.90.5)(@types/react@19.2.2)(react@16.14.0)(typescript@5.9.3)(viem@2.38.5)(zod@3.25.76) + zod: 3.25.76 + transitivePeerDependencies: + - '@amplitude/rrweb' + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@tanstack/react-query' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - expo-auth-session + - expo-crypto + - expo-web-browser + - immer + - ioredis + - react + - react-dom + - react-native + - rollup + - solid-js + - supports-color + - typescript + - uploadthing + - use-sync-external-store + - utf-8-validate + - vue + dev: false diff --git a/pull_request_template.md b/pull_request_template.md deleted file mode 100644 index 2548f13ae..000000000 --- a/pull_request_template.md +++ /dev/null @@ -1,12 +0,0 @@ -## Changes - - - -## Checklist - - - -- [ ] My article available in Navigation sidebar and in root article of selected category ([how to do it in README](https://github.com/santiment/academy#add-an-article-into-navigation-sidebar)) -- [ ] My article have [metadata](https://github.com/santiment/academy#metadata) (title, description, date when updated and author) -- [ ] All added/updated links in article are exist, images shows correctly - diff --git a/scripts/webkit.js b/scripts/webkit.js deleted file mode 100644 index 48720d1e8..000000000 --- a/scripts/webkit.js +++ /dev/null @@ -1,3 +0,0 @@ -const { copyWebkitAssets } = require("san-webkit/scripts/assets") - -copyWebkitAssets("public/static/webkit") diff --git a/shell.nix b/shell.nix deleted file mode 100644 index dbbf3f3cf..000000000 --- a/shell.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ pkgs ? import {} }: - -pkgs.mkShell { - buildInputs = [ - pkgs.nodejs - pkgs.yarn - ]; - NODE_OPTIONS="--openssl-legacy-provider"; - - shellHook = '' - echo "Ready to code! You can start the app with 'yarn start'." - ''; -} diff --git a/src/apollo/client.js b/src/apollo/client.js deleted file mode 100644 index fc9260e5c..000000000 --- a/src/apollo/client.js +++ /dev/null @@ -1,30 +0,0 @@ -import ApolloClient from 'apollo-client' -import fetch from 'isomorphic-fetch' -import { createHttpLink } from 'apollo-link-http' -import { setContext } from 'apollo-link-context' -import { from } from 'apollo-link' -import { InMemoryCache } from 'apollo-cache-inmemory' - -const authLink = setContext((_, { headers }) => { - return { - headers: { - ...headers, - authorization: null, - }, - } -}) - -const httpLink = createHttpLink({ - uri: `${ - typeof window !== 'undefined' && window.env - ? window.env.BACKEND_URL - : 'https://api-stage.santiment.net' - }/graphql`, - credentials: 'include', -}) - -export const client = new ApolloClient({ - link: from([authLink, httpLink]), - cache: new InMemoryCache(), - fetch, -}) diff --git a/src/apollo/wrap-root-element.js b/src/apollo/wrap-root-element.js deleted file mode 100644 index 5a5c3ae6f..000000000 --- a/src/apollo/wrap-root-element.js +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react' -import { ApolloProvider } from 'react-apollo' -import { client } from './client' - -export const wrapRootElement = ({ element }) => ( - {element} -) diff --git a/src/app.css b/src/app.css new file mode 100644 index 000000000..48352e884 --- /dev/null +++ b/src/app.css @@ -0,0 +1,219 @@ +@import url('https://fonts.googleapis.com/css?family=Fira+Code&display=swap'); + +* { + scrollbar-width: thin; + scrollbar-color: var(--casper) var(--porcelain); +} + +html { + scroll-behavior: smooth; +} + +.wrapper { + scroll-behavior: smooth; + width: 100%; + max-width: 620px; + font-style: normal; + font-weight: normal; + color: var(--rhino); + word-break: break-word; + line-height: 28px; + + @apply text-lg md:text-base; +} + +.wrapper h1 { + @apply text-3xl text-rhino; + margin: 26px 0 32px; + font-weight: 500; +} + +.wrapper h2 { + @apply text-xl text-rhino; + margin: 56px 0 24px; + font-weight: 500; +} + +.wrapper h3 { + @apply text-xl text-rhino; + margin: 40px 0 24px; + font-size: 22px; +} + +.wrapper h4, +.wrapper h5 { + @apply text-lg font-semibold text-rhino; + margin: 12px 0 16px; +} + +.wrapper h1, +.wrapper h2, +.wrapper h3, +.wrapper h4, +.wrapper h5 { + scroll-margin-top: 100px; +} + +.wrapper img { + width: 100%; + border: 1px solid var(--porcelain); + border-radius: 4px; +} + +.wrapper img[alt$='noborder'] { + border: none; + border-radius: initial; + padding-top: 16px; +} + +.wrapper p { + margin: 10px 0; +} + +.wrapper hr { + border: none; + border-top: 1px solid var(--porcelain); + margin: 18px 0; +} + +.wrapper iframe { + width: 100%; + border: none !important; +} + +.wrapper a { + color: var(--green); + word-break: break-word; +} + +.wrapper a:hover { + color: var(--green-hover); + text-decoration: underline var(--green-light-3); + text-underline-offset: 4px; +} + +.wrapper ul > li::before { + position: absolute; + content: '•'; + color: var(--casper); + transform: scale(1.5); + display: inline-block; + vertical-align: top; + width: 1em; + margin-left: -1em; +} + +.wrapper ol { + list-style: none; + counter-reset: li; +} + +.wrapper ol > li { + counter-increment: li; +} + +.wrapper ol > li::before { + position: absolute; + content: '.' counter(li); + color: var(--casper); + display: inline-block; + vertical-align: top; + width: 1em; + margin-left: -1.5em; + margin-right: 0.5em; + text-align: right; + direction: rtl; +} + +.wrapper ul, +.wrapper ol { + padding-left: 18px; +} + +.wrapper ul > li, +.wrapper ol > li { + position: relative; + margin-bottom: 8px; +} + +.wrapper ul > li p, +.wrapper ol > li p { + display: inline-block; + margin: 0; +} + +.wrapper table { + border-collapse: collapse; + box-sizing: border-box; + border-radius: 4px; + width: 100%; + margin: 15px 0; + @apply sm:overflow-auto; +} + +.wrapper th { + background: var(--athens); + padding: 10px 14px; + text-align: center; + color: var(--rhino); + @apply text-sm font-semibold; +} + +.wrapper td { + color: var(--rhino); + text-align: center; + padding: 12px 16px 12px; + @apply text-sm; +} + +.wrapper table, +.wrapper th, +.wrapper td { + border: 1px solid #e7eaf3; + @apply sm:px-[5px] sm:py-1.5 sm:text-xs; +} + +.wrapper mark { + padding: 16px 24px 16px 48px; + border: 1px solid var(--porcelain, #e7eaf3); + border-radius: 8px; + display: block; + font-size: 18px; + line-height: 26px; + color: var(--rhino, #2f354d); + background-color: transparent; + position: relative; + margin-top: 24px; +} + +.wrapper mark strong { + margin-right: 4px; +} + +.wrapper mark:before { + content: '✅'; + position: absolute; + left: 12px; +} + +.wrapper code:not(pre code) { + background: var(--athens); + padding: 0 6px; + border-radius: 4px; + border: 1px solid var(--porcelain); + display: inline-block; + margin: 0 2px 2px 0; + line-height: 20px; + font-size: 16px; + font-family: + Fira Code, + Consolas, + Monaco, + 'Andale Mono', + 'Ubuntu Mono', + monospace; +} + +.expressive-code { + margin: 20px 0; +} diff --git a/src/components/AiInputWrapper/AiInputWrapper.module.scss b/src/components/AiInputWrapper/AiInputWrapper.module.scss deleted file mode 100644 index ab1e38658..000000000 --- a/src/components/AiInputWrapper/AiInputWrapper.module.scss +++ /dev/null @@ -1,23 +0,0 @@ -@import "~@santiment-network/ui/mixins.scss"; - -.container { - padding: 44px 20px 56px 20px; - background: url(./turtle-illustration.svg) bottom center / contain no-repeat; - - @include responsive("phone", "phone-xs", "tablet") { - background: none; - } -} - -.turtle { - margin: 0 auto; - margin-bottom: 24px; - width: 242px; - height: 152px; - - display: none; - - @include responsive("phone", "phone-xs", "tablet") { - display: block; - } -} diff --git a/src/components/AiInputWrapper/index.js b/src/components/AiInputWrapper/index.js deleted file mode 100644 index c36a40e2b..000000000 --- a/src/components/AiInputWrapper/index.js +++ /dev/null @@ -1,60 +0,0 @@ -import React, { useState, useEffect } from "react" -import cx from "classnames" -import styles from "./AiInputWrapper.module.scss" -import turleImg from "./tutle-waving.svg" - -const queries = [ - "What is Santiment known for", - "How can Santiment help me become profitable?", - "How can I use MVRV to identify tops and bottoms?", - "What is dev activity metric?", -] - -const AiInputPlaceholder = () => ( -
-

- Hi, I’m Turtoshi — your AI guide to Academy -

-
- - -
- {queries.map(query => ( - - ))} -
-
-
-) - -const AiInputWrapper = () => { - const [isHydrated, setIsHydrated] = useState(false) - - useEffect(() => { - setIsHydrated(true) - }, []) - - return ( -
- - - {isHydrated ? : } -
- ) -} - -export default AiInputWrapper diff --git a/src/components/AiInputWrapper/turtle-illustration.svg b/src/components/AiInputWrapper/turtle-illustration.svg deleted file mode 100644 index 3e64380d3..000000000 --- a/src/components/AiInputWrapper/turtle-illustration.svg +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/components/AiInputWrapper/tutle-waving.svg b/src/components/AiInputWrapper/tutle-waving.svg deleted file mode 100644 index 9b05612f5..000000000 --- a/src/components/AiInputWrapper/tutle-waving.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/components/ArticleFooter/ArticleFooter.module.scss b/src/components/ArticleFooter/ArticleFooter.module.scss deleted file mode 100644 index b50d36b54..000000000 --- a/src/components/ArticleFooter/ArticleFooter.module.scss +++ /dev/null @@ -1,59 +0,0 @@ -@import "~@santiment-network/ui/mixins.scss"; - -.article-last-update { - margin-top: 64px; - - span { - color: var(--fiord); - } -} - -.discordCTA { - background: var(--white); - border: 1px solid var(--porcelain); - border-radius: 8px; - padding: 28px 48px; - cursor: pointer; - - span { - font-size: 16px; - - svg { - margin-left: 9px; - transition: transform 0.3s ease-in-out; - transform: translateX(0); - } - } - - &:hover { - color: var(--jungle-green-hover); - fill: var(--jungle-green-hover); - - & span svg { - transform: translateX(4px); - } - } -} - -.small { - padding: 28px 24px; -} - -.discordlogo { - min-width: 56px; - height: 56px; - background: var(--athens); - border-radius: 40px; -} - -.discordinfo { - max-width: 360px; - - h4 { - color: var(--rhino); - } - - p { - color: var(--fiord); - } -} \ No newline at end of file diff --git a/src/components/ArticleFooter/index.js b/src/components/ArticleFooter/index.js deleted file mode 100644 index cd73da9b0..000000000 --- a/src/components/ArticleFooter/index.js +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react' -import withSizes from 'react-sizes' -import cx from 'classnames' -import { mapSizesToProps } from '../../utils/sizes' -import { ArrowRight } from '../ArticleHeadings/ArticleHeadings' -import styles from './ArticleFooter.module.scss' - -const ArticleLastUpdate = ({ lastUpdatedAt }) => ( -
- - - - Updated {lastUpdatedAt} -
-) - -const DiscordCTA = ({ isSmall }) => ( - - -
-

Talk to us in Discord

-

- Still have some questions left? Join our Discord and get help from the - Santiment team! -

- - Go to Discord - -
-
-) - -const DiscordLogo = () => ( -
- - - -
-) - -const ArticleFooter = ({ lastUpdatedAt, isTablet, isPhone }) => ( - <> - {lastUpdatedAt && } - - -) - -export default withSizes(mapSizesToProps)(ArticleFooter) diff --git a/src/components/ArticleHeadings/ArticleHeadings.js b/src/components/ArticleHeadings/ArticleHeadings.js deleted file mode 100644 index 5136f9a75..000000000 --- a/src/components/ArticleHeadings/ArticleHeadings.js +++ /dev/null @@ -1,86 +0,0 @@ -import React from 'react' -import { useSidenavItems } from './hooks' -import { usePageHash } from '../../utils/utils' -import cx from 'classnames' -import styles from './ArticleHeadings.module.scss' - -export const ArrowRight = () => ( - - - - -) - -const TOPICS = { - sanbase: { href: 'https://app.santiment.net/', title: 'Sanbase' }, - sanapi: { href: 'https://api.santiment.net/', title: 'Sanapi' }, - sansheets: { href: 'https://sheets.santiment.net/', title: 'Sansheets' }, - 'sql-editor': { - href: 'https://app.santiment.net/queries', - title: 'SQL Editor', - }, - 'youtube-videos': { - href: 'https://www.youtube.com/c/santimentnetwork', - title: 'Youtube channel', - }, -} - -const ArticleHeadings = ({ tableOfContents, crumbs = [], title }) => { - const { list, elementIDs } = useSidenavItems(tableOfContents, title) - const { pageHash, scrollToTargetAdjusted } = usePageHash(elementIDs) - const topic = crumbs.length > 1 && crumbs[1].crumbLabel - const appLink = topic && TOPICS[topic] - - return ( - - ) -} - -export default ArticleHeadings diff --git a/src/components/ArticleHeadings/ArticleHeadings.module.scss b/src/components/ArticleHeadings/ArticleHeadings.module.scss deleted file mode 100644 index 1232e41a2..000000000 --- a/src/components/ArticleHeadings/ArticleHeadings.module.scss +++ /dev/null @@ -1,113 +0,0 @@ -@import "~@santiment-network/ui/mixins.scss"; - -.list { - position: fixed; - margin-left: 660px; - top: 95px; - display: flex; - flex-direction: column; - max-height: 85vh; - max-width: 210px; - overflow-y: auto; - overflow-x: hidden; - padding-right: 8px; - - @include responsive("phone", "phone-xs", "laptop") { - display: none; - } - - @include responsive("tablet") { - margin-left: 650px; - } -} - -.item { - position: relative; - - &.hasBefore::before, - &:not(:last-child)::after { - content: ""; - display: block; - height: 4px; - border-left: 2px solid var(--porcelain); - } - - a { - border-left: 2px solid var(--porcelain); - display: block; - margin: 0; - padding-top: 0; - padding-bottom: 0; - } -} - -.current { - a { - border-left: 2px solid var(--green); - color: var(--green); - } -} - -.mt50 { - margin-top: 50px; -} - -.mt170 { - margin-top: 75px; -} - -.heading { - @include text("body-3"); - font-weight: normal; - - display: block; - margin: 4px 0; - padding: 4px 0 4px 16px; - cursor: pointer; -} - -.active { - &:before { - position: absolute; - display: block; - background: var(--jungle-green); - top: 0; - left: 0; - content: ""; - width: 2px; - height: 100%; - border-radius: 8px; - } -} - -.second { - padding-left: 32px; -} - -.third { - padding-left: 48px; -} - -.appLink { - a { - display: flex; - align-items: center; - color: var(--jungle-green); - font-size: 14px; - - svg { - margin-left: 9px; - transition: transform 0.3s ease-in-out; - transform: translateX(0); - } - } - - &:hover { - color: var(--jungle-green-hover); - fill: var(--jungle-green-hover); - - & a svg { - transform: translateX(4px); - } - } -} diff --git a/src/components/ArticleHeadings/hooks.js b/src/components/ArticleHeadings/hooks.js deleted file mode 100644 index 9fad1372a..000000000 --- a/src/components/ArticleHeadings/hooks.js +++ /dev/null @@ -1,59 +0,0 @@ -import { useState, useEffect } from 'react' -import { sluggify } from 'san-webkit/lib/utils/url' - -function getElements(tableOfContents, title) { - const parsedHtml = new DOMParser().parseFromString( - `
  • ${title}

    ${ - tableOfContents.replace(//g, '_').replace(/<\/em>/g, '_') - }
`, - 'text/html' - ) - const ul = parsedHtml.getElementsByTagName('ul') - const pCount = parsedHtml.getElementsByTagName('p').length - if (ul.length === 1 && pCount === 1) { - return - } - if (ul.length - pCount === 1) { - return [ul[1]] - } - return ul -} - -export function useSidenavItems(tableOfContents, title) { - const [list, setList] = useState([]) - const [elementIDs, setElementIDs] = useState([]) - - useEffect(() => { - const result = [] - const ids = [] - - function parseItems(elements, depth = 1) { - if (!elements || !elements[0] || !elements[0].children) return - for (let item of elements[0].children) { - if (item.firstElementChild.tagName === 'A') { - const slug = sluggify(item.innerText) - ids.push(slug) - result.push({ slug, value: item.textContent, depth }) - continue - } - if (item.firstElementChild.tagName === 'P') { - const slug = sluggify(item.firstElementChild.innerText) - ids.push(slug) - result.push({ - slug, - value: item.firstElementChild.textContent, - depth, - }) - parseItems(item.getElementsByTagName('ul'), depth + 1) - } - } - } - - parseItems(getElements(tableOfContents, title)) - - setList(result) - setElementIDs(ids) - }, [tableOfContents]) - - return { list, elementIDs } -} diff --git a/src/components/ArticleInfo/ArticleInfo.js b/src/components/ArticleInfo/ArticleInfo.js deleted file mode 100644 index cccdb8638..000000000 --- a/src/components/ArticleInfo/ArticleInfo.js +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react' -import cx from 'classnames' -import { getDateFormats } from '../../utils/dates' -import { PEOPLE } from './../../docs/people' -import logo from '../../images/logos/logo-sanbase.svg' -import styles from './ArticleInfo.module.scss' - -const DEFAULT_NAME = 'Santiment Team' - -const ArticleInfo = ({ title, author, date }) => { - const name = author || DEFAULT_NAME - const { description, imageUrl } = PEOPLE[name.toLowerCase()] || {} - - let dateString = undefined - if (date) { - const { DD, MMM, YYYY } = getDateFormats(new Date(date)) - dateString = `${MMM} ${DD}, ${YYYY}` - } - - return ( -
-

{title}

-
-
- author -
-
-

{name}

- - {dateString ? dateString : description} - -
-
-
- ) -} - -export default ArticleInfo diff --git a/src/components/ArticleInfo/ArticleInfo.module.scss b/src/components/ArticleInfo/ArticleInfo.module.scss deleted file mode 100644 index 72d279eee..000000000 --- a/src/components/ArticleInfo/ArticleInfo.module.scss +++ /dev/null @@ -1,58 +0,0 @@ -@import "~@santiment-network/ui/mixins.scss"; - -.imageWrapper { - width: 40px; - height: 40px; - border-radius: 50%; - margin-right: 12px; - display: flex; - align-items: center; - justify-content: center; - position: relative; - - &::after { - content: url('../../images/logos/logo-sanbase.svg'); - display: inline-block; - position: absolute; - width: 20px; - height: 20px; - border-radius: 50%; - // border: 0.5px solid var(--white); - background-color: $white; - bottom: -4px; - left: -1px; - } - - & img { - width: 100%; - height: auto; - } -} - -.onlyPhoto { - &::after { - display: none; - } -} - -.info { - display: flex; - align-items: center; - margin-bottom: 32px; -} - -.title { - @include text('h3', 'l'); - margin-bottom: 22px; - color: var(--rhino); -} - -.author { - color: var(--rhino); - @include text("body-3"); -} - -.description { - color: var(--waterloo); - @include text('caption'); -} diff --git a/src/components/Banner/SocialBanner.js b/src/components/Banner/SocialBanner.js deleted file mode 100644 index d33fb6034..000000000 --- a/src/components/Banner/SocialBanner.js +++ /dev/null @@ -1,60 +0,0 @@ -import React from 'react' -import styles from './SocialBanner.module.scss' - -const SocialBanner = () => ( -
- -
- - - -
-
-

Join our discord!

-

- Talk directly with the Santiment Team -

-
-
- -
- - - - - - - - -
-
-

Contact us

-

Reach out to us directly via email

-
-
-
-) - -export default SocialBanner diff --git a/src/components/Banner/SocialBanner.module.scss b/src/components/Banner/SocialBanner.module.scss deleted file mode 100644 index 7e436cdac..000000000 --- a/src/components/Banner/SocialBanner.module.scss +++ /dev/null @@ -1,80 +0,0 @@ -@import '~@santiment-network/ui/mixins'; - -.wrapper { - margin: 80px 0 0; - padding: 48px 20px; - background-color: var(--athens); - border-radius: 4px; - display: flex; - align-items: center; - justify-content: center; - position: relative; - - @include responsive('phone-xs') { - margin: 50px 0 0; - } - - &:after { - content: ''; - left: 50%; - position: absolute; - display: block; - width: 1px; - height: 104px; - background: var(--porcelain); - } - - @include responsive('phone', 'phone-xs') { - flex-direction: column; - padding: 20px; - - &:after { - display: none; - } - } -} - -.img { - margin: 0 24px 0 16px; - fill: var(--casper); -} - -.card { - border-radius: 4px; - transition: all .1s ease-in-out; - padding: 25px 17px; - display: flex; - width: 100%; - margin: 0 30px; - max-width: 458px; - align-items: center; - - &:hover, &:focus { - cursor: pointer; - transform: translateY(-2px); - background: var(--white); - - & .img { - fill: var(--rhino); - } - } - - @include responsive('phone', 'phone-xs') { - margin: 0; - &:first-child { - margin-bottom: 15px; - } - } -} - -.heading { - color: var(--rhino); - margin: 0 0 5px; - @include text("body-1"); -} - -.description { - color: var(--waterloo); - margin: 0; - @include text("body-3"); -} diff --git a/src/components/Breadcrumb/Breadcrumb.js b/src/components/Breadcrumb/Breadcrumb.js deleted file mode 100644 index 607fd0e9c..000000000 --- a/src/components/Breadcrumb/Breadcrumb.js +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react' -import cx from 'classnames' -import { Link } from 'gatsby' -import Icon from '@santiment-network/ui/Icon' -import styles from './Breadcrumb.module.scss' - -const Breadcrumb = ({ crumbs, crumbLabel, className }) => { - const crumbsWithoutLast = crumbs.map(({ pathname, crumbLabel }) => ({ - crumbLabel: crumbLabel.charAt(0).toUpperCase() + crumbLabel.slice(1), - pathname, - })) - crumbsWithoutLast.pop() - return ( - - ) -} - -export default Breadcrumb diff --git a/src/components/Breadcrumb/Breadcrumb.module.scss b/src/components/Breadcrumb/Breadcrumb.module.scss deleted file mode 100644 index 5d1130bd4..000000000 --- a/src/components/Breadcrumb/Breadcrumb.module.scss +++ /dev/null @@ -1,33 +0,0 @@ -@import '~@santiment-network/ui/mixins'; - -.wrapper { - margin: 18px 0 48px; - - @include responsive('phone', 'phone-xs') { - margin-bottom: 20px; - } -} - -.list { - list-style: none; - display: inline-block; -} - -.title { - @include text('body-3'); - color: $bali-hai; - display: inline-block; -} - -.last { - @include text('body-3'); - color: var(--rhino); - display: inline; - word-break: break-word; -} - -.icon { - margin: 0 14px; - transform: scale(1.2); - fill: $bali-hai; -} diff --git a/src/components/Category/Category.js b/src/components/Category/Category.js deleted file mode 100644 index 340cf82c7..000000000 --- a/src/components/Category/Category.js +++ /dev/null @@ -1,44 +0,0 @@ -import React, { useState } from 'react' -import { Link } from 'gatsby' -import cx from 'classnames' -import { titleToSlug } from '../../utils/docs' -import styles from './Category.module.scss' - -const Category = ({ wide, title, description, icon: Icon, maxWidth }) => { - const [isHover, setIsHover] = useState(false) - const slug = titleToSlug(title) - - const setHover = () => { - if (!isHover) { - setIsHover(true) - } - } - - const removeHover = () => { - if (isHover) { - setIsHover(false) - } - } - - return ( - -
- -
-
-

{title}

-

{description}

-
- - ) -} - -export default Category diff --git a/src/components/Category/Category.module.scss b/src/components/Category/Category.module.scss deleted file mode 100644 index fc74cccc6..000000000 --- a/src/components/Category/Category.module.scss +++ /dev/null @@ -1,170 +0,0 @@ -@import "~@santiment-network/ui/mixins"; - -.wrapper { - margin-bottom: 64px; - display: flex; - color: var(--rhino); - - @include responsive("phone", "phone-xs") { - flex-direction: column; - } -} - -.title { - @include text("h4"); - margin: 0 0 16px; -} - -.description { - @include text("body-2"); - color: var(--waterloo); - max-width: 255px; - margin: 0 35px 20px 0; - - @include responsive("phone", "phone-xs") { - max-width: 100%; - margin-right: 0; - } -} - -.block { - border: 1px solid var(--porcelain); - border-radius: 4px; - - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - position: relative; - overflow: hidden; - color: var(--rhino); - padding: 40px 16px 30px; - transition: all 0.1s ease-in-out; - - @media (hover: hover) { - &:hover { - transform: translateY(-4px); - cursor: pointer; - } - } - - @include responsive("phone-xs") { - flex-direction: row; - justify-content: flex-start; - padding: 20px; - } -} - -.icon { - fill: none; - display: flex; - align-items: center; - justify-content: center; - margin-bottom: 32px; - width: 64px; - height: 64px; - - @include responsive("phone-xs") { - margin: 0 8px 0 0; - } -} - -.title { - @include text("body-2"); - margin: 0 0 8px; - text-align: center; - - @include responsive("phone-xs") { - text-align: left; - margin-left: 8px; - } -} - -.length { - @include text("body-3"); - color: var(--casper); - text-align: center; - margin: 0 12px; - - @include responsive("phone-xs") { - text-align: left; - margin: 0 0 0 8px; - @include text("body-3"); - } -} - -.disable { - background-color: var(--athens); - - @media (hover: hover) { - &:hover { - transform: translateY(0); - cursor: not-allowed; - } - } - - & .icon { - background: var(--porcelain); - } - - & .title { - color: var(--rhino) !important; - } -} - -.wide { - padding: 32px 40px; - align-items: baseline; - - & .icon { - position: absolute; - right: 20px; - top: 0; - bottom: 0; - margin: 0; - width: auto; - height: auto; - z-index: -1; - - @include responsive("phone-xs") { - right: -10px; - transform: scale(0.8); - } - - @include responsive("tablet") { - right: -10px; - transform: scale(0.8); - } - } - - & .title { - text-align: left; - margin-bottom: 8px; - - @include responsive("phone-xs") { - margin-left: 0; - } - } - - & .length { - text-align: left; - margin: 0; - - @include responsive("phone-xs") { - max-width: 69%; - } - - } - - @include responsive("phone-xs") { - padding: 20px; - } -} - -.icon svg { - & path, - & rect, - & circle { - transition: fill 0.2s ease, stroke 0.2s ease; - } -} diff --git a/src/components/ChangelogList/ChangelogList.js b/src/components/ChangelogList/ChangelogList.js deleted file mode 100644 index 6e61928bf..000000000 --- a/src/components/ChangelogList/ChangelogList.js +++ /dev/null @@ -1,135 +0,0 @@ -import React from 'react' -import { Query, ApolloConsumer } from 'react-apollo' -import Button from '@santiment-network/ui/Button' -import markdownStyles from '../Markdown/Markdown.module.scss' -import { mergeEntries } from './utils' -import styles from './ChangelogList.module.scss' -import PageLoader from '../../components/Loader/PageLoader' - -const ChangelogList = ({ - title, - queryDocument, - queryRoot, - createdKey, - removedKey, - pageSize = 10, - variables, - renderCreatedItem, - renderRemovedItem, -}) => { - const baseVars = { page: 1, pageSize, ...(variables || {}) } - const [entries, setEntries] = React.useState(null) - const [pagination, setPagination] = React.useState(null) - const [loadingMore, setLoadingMore] = React.useState(false) - - const prime = data => { - const root = data && data[queryRoot] - - setEntries(root?.entries || []) - setPagination(root?.pagination || null) - } - - const loadMore = async client => { - if (!pagination?.hasMore || loadingMore) return - setLoadingMore(true) - - try { - const res = await client.query({ - query: queryDocument, - variables: { ...baseVars, page: (pagination.currentPage || 1) + 1 }, - fetchPolicy: 'no-cache', - }) - - const next = res?.data?.[queryRoot] - - if (next) { - setEntries(prev => - mergeEntries(prev || [], next.entries || [], createdKey, removedKey) - ) - setPagination(next.pagination || null) - } - } finally { - setLoadingMore(false) - } - } - - return ( -
-

{title}

- - - {client => ( - - {({ data, loading, error }) => { - const root = data && data[queryRoot] - const initialEntries = root?.entries || [] - const initialPag = root?.pagination || null - - const readyEntries = entries ?? initialEntries - const readyPag = pagination ?? initialPag - - if (loading && !entries) - return ( -
- -
- ) - - if (error) return
Error: {error.message}
- - return ( - <> - {!readyEntries || readyEntries.length === 0 ? ( -
No changes yet.
- ) : ( -
- {readyEntries.map(group => ( -
-

{new Date(group.date).toLocaleDateString()}

- -
    - {(group[createdKey] || []).map((item, i) => ( -
  • - {renderCreatedItem(item, group)} -
  • - ))} -
- -
    - {(group[removedKey] || []).map((item, i) => ( -
  • - {renderRemovedItem(item, group)} -
  • - ))} -
-
- ))} -
- )} - - {readyPag?.hasMore ? ( - - ) : null} - - ) - }} -
- )} -
-
- ) -} - -export default ChangelogList diff --git a/src/components/ChangelogList/ChangelogList.module.scss b/src/components/ChangelogList/ChangelogList.module.scss deleted file mode 100644 index 4e9f8035b..000000000 --- a/src/components/ChangelogList/ChangelogList.module.scss +++ /dev/null @@ -1,16 +0,0 @@ -@import '~@santiment-network/ui/mixins.scss'; - -.entriesWrapper { - margin-bottom: 30px; -} - -.loader { - @include responsive('phone', 'phone-xs') { - position: static !important; - margin-top: 0 !important; - } -} - -.loaderWrapper { - height: 50vh; -} diff --git a/src/components/ChangelogList/utils.js b/src/components/ChangelogList/utils.js deleted file mode 100644 index b3ec5b6b7..000000000 --- a/src/components/ChangelogList/utils.js +++ /dev/null @@ -1,23 +0,0 @@ -export function mergeEntries(prevEntries, nextEntries, createdKey, removedKey) { - const byDate = new Map() - - const cloneGroup = g => ({ - date: g.date, - [createdKey]: Array.isArray(g[createdKey]) ? [...g[createdKey]] : [], - [removedKey]: Array.isArray(g[removedKey]) ? [...g[removedKey]] : [], - }) - - prevEntries.forEach(e => byDate.set(e.date, cloneGroup(e))) - - nextEntries.forEach(e => { - if (byDate.has(e.date)) { - const ex = byDate.get(e.date) - ex[createdKey] = ex[createdKey].concat(e[createdKey] || []) - ex[removedKey] = ex[removedKey].concat(e[removedKey] || []) - } else { - byDate.set(e.date, cloneGroup(e)) - } - }) - - return Array.from(byDate.values()).sort((a, b) => (a.date < b.date ? 1 : -1)) -} diff --git a/src/components/Dialog.module.scss b/src/components/Dialog.module.scss deleted file mode 100644 index c0bb6a47f..000000000 --- a/src/components/Dialog.module.scss +++ /dev/null @@ -1,6 +0,0 @@ -.cancel { - margin-right: 16px; - &:hover { - color: var(--jungle-green); - } -} diff --git a/src/components/Dropdown/Dropdown.js b/src/components/Dropdown/Dropdown.js deleted file mode 100644 index 9a87984c5..000000000 --- a/src/components/Dropdown/Dropdown.js +++ /dev/null @@ -1,71 +0,0 @@ -import React, { useState } from 'react' -import cx from 'classnames' -import ContextMenu from '@santiment-network/ui/ContextMenu' -import Button from '@santiment-network/ui/Button' -import styles from './Dropdown.module.scss' - -const Dropdown = ({ title, children, isDesktop, position = 'bottom' }) => { - const [isOpen, setOpen] = useState(false) - const close = force => { - setTimeout( - () => { - setOpen(false) - }, - force ? 0 : 1000 - ) - } - const open = () => setOpen(true) - - return ( - <> - {isDesktop && ( -
- close(true)} - onOpen={open} - trigger={ -
- -
- } - position={position} - align="start" - > - {children} -
-
- )} - {!isDesktop && ( -
- <> - { - setOpen(!isOpen) - }} - /> - {isOpen && children} - -
- )} - - ) -} - -const Trigger = ({ title, onClick, isOpen }) => { - return ( - - ) -} - -export default Dropdown diff --git a/src/components/Dropdown/Dropdown.module.scss b/src/components/Dropdown/Dropdown.module.scss deleted file mode 100644 index d1220c3c1..000000000 --- a/src/components/Dropdown/Dropdown.module.scss +++ /dev/null @@ -1,74 +0,0 @@ -@import '~@santiment-network/ui/main.scss'; -@import '~@santiment-network/ui/mixins.scss'; - -.trigger { - display: flex; -} - -.btn { - font-size: 14px !important; - line-height: 24px !important;; - color: var(--waterloo) !important; - cursor: pointer; - - &:hover { - color: var(--jungle-green) !important; - } - - @include responsive('phone', 'phone-xs') { - font-size: 16px !important; - margin: 32px 0 0 0; - text-align: center; - background: var(--rhino); - color: var(--waterloo) !important; - - &:hover { - color: var(--waterloo) !important; - } - } -} - -.open { - color: var(--jungle-green) !important; - - @include responsive('phone', 'phone-xs') { - color: var(--white) !important; - } -} - -.arrow { - margin-left: 14px; -} - -.list { - display: flex; - flex-direction: column; - - @include responsive('desktop', 'laptop', 'tablet') { - background: var(--white); - border: 1px solid var(--porcelain); - padding: 8px 9px; - - @include border-box(); - - box-shadow: 0px 4px 8px rgba(24, 27, 43, 0.04), 0px 8px 16px rgba(24, 27, 43, 0.05), 0px 12px 32px rgba(24, 27, 43, 0.05); - border-radius: $border-radius; - min-width: 112px; - position: absolute; - } -} - -.menuItem { - @include responsive('desktop', 'laptop', 'tablet') { - padding: 6px 9px; - color: var(--rhino) !important; - margin: 0 !important; - - @include text('body-3') - } - - @include responsive('phone', 'phone-xs') { - margin: 24px 0 0 !important; - text-align: center; - } -} diff --git a/src/components/Footer/Footer.js b/src/components/Footer/Footer.js deleted file mode 100644 index 48f44d29a..000000000 --- a/src/components/Footer/Footer.js +++ /dev/null @@ -1,251 +0,0 @@ -import React from 'react' -import cx from 'classnames' -import { Mutation } from 'react-apollo' -import Button from '@santiment-network/ui/Button' -import Input from '@santiment-network/ui/Input' -import logo from './images/santiment.svg' -import { EMAIL_LOGIN_MUTATION } from '../../gql/user' -import { NotificationsContext } from '../Notifications/Notifications' -import { categories } from './links' -import styles from './Footer.module.scss' - -const Footer = ({ isMinified }) => { - const year = new Date() - return ( - - ) -} - -export default Footer diff --git a/src/components/Footer/Footer.module.scss b/src/components/Footer/Footer.module.scss deleted file mode 100644 index 9eb0f1cc8..000000000 --- a/src/components/Footer/Footer.module.scss +++ /dev/null @@ -1,345 +0,0 @@ -@import '~@santiment-network/ui/mixins.scss'; - -.footer { - width: 100%; - padding: 64px 24px 50px; - background-color: var(--athens); - margin: 60px 0 0; - - @include responsive('tablet', 'phone', 'phone-xs') { - padding: 56px 24px 46px; - } - - &__mini { - padding: 0 68px 24px 55px; - } -} - -.content { - max-width: 1140px; - margin: 0 auto; - - @include responsive('phone-xs') { - width: 100%; - } -} - -.top { - display: flex; - justify-content: space-between; - border-bottom: 1px solid var(--porcelain); - - @include responsive('tablet') { - justify-content: flex-start; - flex-wrap: wrap; - } - - @include responsive('phone', 'phone-xs') { - flex-direction: column; - } -} - -.logo { - width: 98px; - - @include responsive('phone-xs') { - width: 144px; - } -} - -.column__last { - min-width: 370px; - - @include responsive('phone-xs') { - min-width: auto; - } - - @include responsive('phone') { - margin-bottom: 20px; - } - - @include responsive('tablet') { - min-width: 100%; - display: flex; - margin-bottom: 40px; - } -} - -.subscribe { - min-width: 370px; - max-width: 370px; - - @include responsive('phone-xs') { - min-width: auto; - } - - @include responsive('tablet') { - margin-right: 118px; - } -} - -.desc { - @include text('body-3'); - color: var(--waterloo); - max-width: 124px; - margin: 14px 60px 40px 0; - - @include responsive('laptop') { - margin-right: 24px; - } - - @include responsive('phone', 'phone-xs') { - margin-right: 0; - max-width: 190px; - } -} - -.categories { - display: flex; - justify-content: space-between; - margin-bottom: 40px; - flex-wrap: wrap; - - @include responsive('phone-xs') { - display: none; - } -} - -.categories__mobile { - display: none; - - @include responsive('phone-xs') { - display: flex; - flex-direction: column; - max-height: 300px; - } -} - -.category { - display: flex; - flex-direction: column; - margin-right: 70px; - - @include responsive('laptop') { - width: 116px; - margin-right: 30px; - } - - @include responsive('desktop') { - width: 116px; - } - - &:last-child { - margin-right: 10px; - } - - &__item { - margin-bottom: 14px; - color: var(--waterloo) !important; - - &:hover { - color: var(--jungle-green-hover) !important; - } - - @include responsive('phone-xs') { - width: 50%; - display: block; - text-align: left; - } - } -} - -.text { - @include text('body-3'); - color: var(--casper); -} - -.bottom { - padding: 28px 0 0; - display: flex; - align-items: center; - justify-content: space-between; - position: relative; - - @include responsive('phone-xs', 'phone') { - text-align: center; - flex-direction: column-reverse; - border: none; - } - - @include responsive('tablet') { - flex-direction: row-reverse; - } -} - -.rights { - color: var(--casper); - @include responsive('phone-xs', 'phone') { - margin-top: 16px; - } - - @include responsive('tablet') { - display: none; - } - - &__additional { - display: none; - @include responsive('tablet') { - display: block; - text-align: right; - margin-top: 4px; - } - } -} - -.link { - margin-right: 32px; - display: inline-flex; - align-items: center; - - @include responsive('phone-xs') { - margin-right: 16px; - } - - &:last-child { - margin: 0; - } -} - -.heading { - @include text('body-3', 'm'); - color: var(--waterloo); - margin-bottom: 12px; - - @include responsive('phone-xs') { - margin-bottom: 16px; - @include text('body-2', 'm'); - text-align: left; - margin-right: auto; - } -} - -.social { - display: flex; - user-select: none; - -webkit-tap-highlight-color: transparent; - - @include responsive('phone-xs') { - width: 100%; - align-items: center; - justify-content: space-between; - padding-bottom: 40px; - border-bottom: 1px solid var(--porcelain); - margin-bottom: 40px; - } - - @include responsive('phone') { - align-items: center; - justify-content: space-between; - padding-bottom: 40px; - border-bottom: 1px solid var(--porcelain); - margin-bottom: 40px; - } - - &__img { - fill: var(--rhino); - } - - &__heading { - display: none; - - @include responsive('phone-xs', 'phone') { - display: block; - } - } - - &__link { - width: 40px; - height: 40px; - display: flex; - align-items: center; - justify-content: center; - margin-right: 10px; - - @include responsive('phone-xs', 'phone') { - border: 1px solid var(--porcelain); - border-radius: 4px; - } - - @include responsive('phone') { - margin-right: 32px; - } - - &:last-child { - margin-right: 0; - } - - &:hover { - .twitter { - fill: #1da1f2; - } - - .telegram { - fill: #0088cc; - } - - .discord { - fill: #7289da; - } - - .youtube { - fill: #ff0000; - } - - .github { - fill: #171515; - } - } - } -} - -.form { - margin-bottom: 24px; - border: none; - border-radius: 4px; - background: none; - display: flex; - position: relative; - - @include responsive('phone-xs') { - margin-bottom: 40px; - } - - &:hover, - &:focus { - .input { - border: 1px solid var(--jungle-green) !important; - } - } -} - -.input { - background: transparent !important; - border: 1px solid var(--porcelain) !important; - color: var(--rhino); - outline: none; - height: 40px; - padding-right: 138px; - - &:hover, - &:focus { - border: 1px solid var(--jungle-green) !important; - } -} - -.btn { - height: 32px !important; - padding: 6px 16px !important; - margin: 0; - width: auto; - position: absolute !important; - right: 4px; - top: 4px; - line-height: 20px !important; - font-size: 14px !important; -} diff --git a/src/components/Footer/images/google_play.svg b/src/components/Footer/images/google_play.svg deleted file mode 100644 index 1a9a84a3b..000000000 --- a/src/components/Footer/images/google_play.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/components/Footer/images/santiment.svg b/src/components/Footer/images/santiment.svg deleted file mode 100644 index bf1fa1d32..000000000 --- a/src/components/Footer/images/santiment.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/src/components/Footer/links.js b/src/components/Footer/links.js deleted file mode 100644 index 2d84c1ead..000000000 --- a/src/components/Footer/links.js +++ /dev/null @@ -1,77 +0,0 @@ -export const categories = [ - { - links: [ - { - children: 'about', - name: 'About us', - href: 'https://santiment.net/about/', - }, - { - children: 'pricing', - name: 'Pricing', - href: 'https://santiment.net/pricing/', - }, - { children: 'team', name: 'Team', href: 'https://santiment.net/team/' }, - { children: 'jobs', name: 'Jobs', href: 'https://santiment.net/jobs/' }, - { - children: 'contact', - name: 'Contact us', - onClick: evt => { - if (window.Intercom) { - evt.preventDefault() - window.Intercom('showNewMessage', 'Hello! I have a question') - } - }, - href: 'mailto:support@santiment.net', - }, - ], - }, - { - links: [ - { - children: 'academy', - name: 'Academy', - href: 'https://academy.santiment.net/', - }, - { - children: 'insights', - name: 'Insights', - href: 'https://insights.santiment.net/', - }, - { - children: 'trends', - name: 'Social trends', - href: 'https://app.santiment.net/dashboards/social-tool', - }, - { - children: 'balance', - name: 'Historical balance', - href: 'https://app.santiment.net/labs/balance', - }, - { - children: 'buy', - name: 'Buy SAN Tokens', - href: 'https://academy.santiment.net/san-tokens/how-to-buy-san-tokens/', - }, - ], - }, - { - links: [ - { - children: 'sanbase', - name: 'Sanbase', - href: 'https://app.santiment.net/', - }, - { - children: 'api', - name: 'SanAPI', - href: 'https://api.santiment.net/', - }, - { - children: 'Sansheets', - name: 'Sheets', - href: 'https://sheets.santiment.net/', - } - ], - }, -] diff --git a/src/components/GDPR/GDPR.js b/src/components/GDPR/GDPR.js deleted file mode 100644 index c52787e14..000000000 --- a/src/components/GDPR/GDPR.js +++ /dev/null @@ -1,56 +0,0 @@ -import React, { useState } from 'react' -import { replace } from 'gatsby' -import Panel from '@santiment-network/ui/Panel/Panel' -import Button from '@santiment-network/ui/Button' -import Checkboxes from '@santiment-network/ui/Checkboxes' -import styles from './GDPR.module.scss' - -const GDPRPage = ({ togglePrivacyPolicy, privacyPolicyAccepted }) => { - const [isGDPR, setGDPR] = useState(false) - const toggleGDPR = () => setGDPR(!isGDPR) - - if (privacyPolicyAccepted) { - replace('/account') - } - - return ( - -

Last step to your Santiment API key

-

- Please accept our updated Privacy Policy to gain access to your API key -

- - - - Santiment Privacy Policy - - -
- -
-
- ) -} - -export default GDPRPage diff --git a/src/components/GDPR/GDPR.module.scss b/src/components/GDPR/GDPR.module.scss deleted file mode 100644 index b7cf8b103..000000000 --- a/src/components/GDPR/GDPR.module.scss +++ /dev/null @@ -1,24 +0,0 @@ -.wrapper { - max-width: 500px; - margin: 0 auto; -} - -.title { - font-size: 20px; - margin-bottom: 10px; -} - -.checkbox { - margin: 20px 0 10px; -} - -.link { - color: var(--jungle-green); - text-decoration: underline; - font-size: 14px; - margin-left: 5px; -} - -.bottom { - text-align: right; -} diff --git a/src/components/GettingStarted/GettingStarted.js b/src/components/GettingStarted/GettingStarted.js deleted file mode 100644 index 03be07d5c..000000000 --- a/src/components/GettingStarted/GettingStarted.js +++ /dev/null @@ -1,44 +0,0 @@ -import React from 'react' -import cx from 'classnames' -import { Link } from 'gatsby' -import styles from './GettingStarted.module.scss' - -const GettingStarted = ({ className }) => ( -
-

Getting started

-
- -
-

Getting Started With Santiment

-

- Exploring the purpose and benefits of Santiment, this document - highlights the available tools and provides guidance on effectively utilizing them. -

-
- - -
-

For Traders

-

- Explanations, tutorials and use cases for Santiment metrics and - tools. Learn how to use our platform to better understand market - behavior, network activity and stakeholder trends. -

-
- - - -
-

For Developers

-

- Technical documentation on Santiment metrics and indicators. - Understand the calculations, logic and algorithms behind our metrics - - many of them custom-built by the Santiment Team. -

-
- -
-
-) - -export default GettingStarted diff --git a/src/components/GettingStarted/GettingStarted.module.scss b/src/components/GettingStarted/GettingStarted.module.scss deleted file mode 100644 index 29855bcd8..000000000 --- a/src/components/GettingStarted/GettingStarted.module.scss +++ /dev/null @@ -1,68 +0,0 @@ -@import '~@santiment-network/ui/mixins.scss'; - -.title { - @include text('h4'); - margin: 0 0 32px; - color: var(--rhino); -} - -.blocks { - @include grid-wrap(3); -} - -.block { - padding: 32px 40px 34px; - - - @include responsive('phone-xs') { - padding: 22px 20px 22px 20px; - } -} - -.heading { - @include text('body-1', 'm'); - margin: 0 0 16px; - color: var(--white); - -} - -.description { - @include text('body-2'); - margin: 0; - color: var(--porcelain); - - @include responsive('phone-xs') { - @include text('body-3'); - } -} - -.traders { - background-color: $rhino; -} - -.developers { - background-color: $rhino; -} - -.introduction { - background-color: var(--jungle-green); - - & .description { - color: var(--athens); - } -} -.block { - height: 100%; - border-radius: 4px; - transition: all ease-in-out 0.1s; - background-repeat: no-repeat; - background-size: contain; - background-position: 100% 100%; - - @media (hover: hover) { - &:hover { - transform: translateY(-4px); - cursor: pointer; - } - } -} diff --git a/src/components/Header/Header.js b/src/components/Header/Header.js deleted file mode 100644 index e5c462834..000000000 --- a/src/components/Header/Header.js +++ /dev/null @@ -1,41 +0,0 @@ -import React, { useState, useEffect } from "react" -import withSizes from "react-sizes" -import cx from "classnames" -import { mapSizesToProps } from "../../utils/sizes" -import Search from "../../components/Search/Search" -import Logo from "../SantimentProductsTooltip/Logo" -import SantimentProductsTooltip from "../SantimentProductsTooltip/SantimentProductsTooltip" -import styles from "./Header.module.scss" - -const Header = ({ isShowSearch, fixedHeader = true }) => { - const [isHydrated, setIsHydrated] = useState(false) - - useEffect(() => { - setIsHydrated(true) - }, []) - - return ( -
-
-
- - -
-
- {isShowSearch && } - {isHydrated ? ( - - ) : ( -
- -
- )} -
-
-
- ) -} - -export default withSizes(mapSizesToProps)(Header) diff --git a/src/components/Header/Header.module.scss b/src/components/Header/Header.module.scss deleted file mode 100644 index 33ef54b25..000000000 --- a/src/components/Header/Header.module.scss +++ /dev/null @@ -1,126 +0,0 @@ -@import "~@santiment-network/ui/mixins.scss"; -@import "~@santiment-network/ui/variables.scss"; - -.wrapper { - user-select: none; - width: 100%; - background: var(--white); - position: absolute; - top: 0; - z-index: 2; -} - -.aiButton { -} - -.headerLeft { - display: flex; -} - -.headerRight { - display: flex; - justify-content: flex-end; - gap: 16px; -} - -.fixed { - position: fixed; - top: 0; - z-index: 2; -} - -.header { - padding: 20px 15px; - display: flex; - align-items: center; - justify-content: space-between; - height: 70px; - position: relative; - - @include responsive("phone", "phone-xs") { - width: 100%; - padding: 20px 15px; - } -} - -.logo { - display: flex; - align-items: center; - - &:hover { - color: var(--rhino); - } - - &__icon { - width: 40px; - height: 40px; - } - - &__text { - display: flex; - flex-direction: column; - margin-left: 10px; - } - - &__title { - font-weight: bold; - font-size: 28px; - line-height: 0.8; - margin-bottom: 3px; - } - - &__desc { - color: var(--waterloo); - font-size: 13px; - line-height: 1; - } -} - -:global(#hamburger) { - display: none; -} - -:global([for="hamburger"]) { - @include responsive("desktop", "laptop", "tablet") { - display: none; - } -} - -.close { - position: absolute; - top: 24px; - right: 19px; - fill: var(--white); -} - -.nav { - @include responsive("phone", "phone-xs") { - display: none; - position: fixed; - z-index: 10; - top: 0; - left: 0; - bottom: 0; - right: 0; - background: rgba(0, 0, 0, 0.9); - flex-direction: column; - align-items: center; - justify-content: center; - - :global(#hamburger):checked + & { - display: flex; - } - } -} - -.link { - font-size: 14px; - color: var(--waterloo); - margin-right: 35px; - - @include responsive("phone", "phone-xs") { - margin-right: 0; - margin-bottom: 20px; - color: var(--athens); - } -} diff --git a/src/components/Intercom.js b/src/components/Intercom.js deleted file mode 100644 index 4f4937725..000000000 --- a/src/components/Intercom.js +++ /dev/null @@ -1,54 +0,0 @@ -import React from "react" -import { Query } from "react-apollo" -import { CURRENT_USER_QUERY } from "../gql/user" - -const updateIntercom = () => { - if (typeof window !== "undefined") { - window.Intercom("update") - - // Wait for the iframe to become ready (max 30 seconds) - const timeout = setTimeout(() => clearInterval(interval), 30000) - const interval = setInterval(() => { - const iframe = document.querySelector(".intercom-launcher-frame") - - if (iframe) { - const intercomLauncher = iframe.contentDocument.querySelector( - "#intercom-container .intercom-launcher" - ) - intercomLauncher.setAttribute( - "style", - "background: var(--sheets) !important;" - ) - - iframe.setAttribute("style", "background: var(--jungle-green);") - - clearInterval(interval) - clearTimeout(timeout) - } - }, 100) - } -} - -const Intercom = ({ children }) => { - updateIntercom() - return ( - - {({ data = {}, loading }) => { - if (!loading && typeof window !== "undefined") { - const { email, username: name } = data.currentUser || {} - - window.Intercom("boot", { - app_id: "cyjjko9u", - email, - name, - z_index: 10, - }) - } - - return children - }} - - ) -} - -export default Intercom diff --git a/src/components/IntercomWidget/IntercomWidget.module.scss b/src/components/IntercomWidget/IntercomWidget.module.scss deleted file mode 100644 index b7a9e11af..000000000 --- a/src/components/IntercomWidget/IntercomWidget.module.scss +++ /dev/null @@ -1,27 +0,0 @@ -@import '~@santiment-network/ui/variables'; - -.wrapper { - display: flex; - align-items: center; - user-select: none; - z-index: 23; - position: fixed; - right: 0; - top: 50%; - transform: rotate(90deg); - transform-origin: top right; - padding: 6px 12px; - color: $white; - fill: $white; - background: var(--jungle-green); - border-radius: 0 0 4px 4px; - cursor: pointer; - - &:hover { - background: var(--jungle-green-hover); - } -} - -.icon { - margin-right: 8px; -} diff --git a/src/components/IntercomWidget/index.js b/src/components/IntercomWidget/index.js deleted file mode 100644 index 91eb3ac26..000000000 --- a/src/components/IntercomWidget/index.js +++ /dev/null @@ -1,28 +0,0 @@ -import React, { useState, useEffect } from 'react' -import styles from './IntercomWidget.module.scss' - -const IntercomWidget = ({ isDesktop }) => { - const [isShown, setIsShown] = useState(true) - - useEffect(() => { - if (window.Intercom) { - window.Intercom('onHide', () => setIsShown(true)) - window.Intercom('onShow', () => setIsShown(false)) - } - }, []) - - return isDesktop && isShown ? ( -
window.Intercom('show')} - draggable="false" - > - - - - Help & Feedback -
- ) : null -} - -export default IntercomWidget diff --git a/src/components/Loader/Loader.js b/src/components/Loader/Loader.js deleted file mode 100644 index 07217159e..000000000 --- a/src/components/Loader/Loader.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react' -import cx from 'classnames' -import styles from './Loader.module.scss' - -const Loader = ({ className }) => { - return
Loading...
-} - -export default Loader diff --git a/src/components/Loader/Loader.module.scss b/src/components/Loader/Loader.module.scss deleted file mode 100644 index f28443672..000000000 --- a/src/components/Loader/Loader.module.scss +++ /dev/null @@ -1,33 +0,0 @@ -.loader { - border-radius: 50%; - display: inline-block; - vertical-align: middle; - font-size: 0; - position: relative; - width: 40px; - height: 40px; - border: 4px solid var(--mystic); - - &::after { - content: ""; - display: inline-block; - position: absolute; - border-radius: 50%; - border: 4px solid transparent; - border-top: 4px solid var(--casper); - top: -4px; - left: -4px; - right: -4px; - bottom: -4px; - animation: load 0.8s infinite; - } -} - -@keyframes load { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/src/components/Loader/PageLoader.js b/src/components/Loader/PageLoader.js deleted file mode 100644 index a2bdb1a29..000000000 --- a/src/components/Loader/PageLoader.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react' -import cx from 'classnames' -import logo from '../../images/logo-SAN.svg' -import styles from './PageLoader.module.scss' - -const PageLoader = ({ className, text = 'Loading' }) => ( -
-
- SANbase - {text}... -
-
-) - -export default PageLoader diff --git a/src/components/Loader/PageLoader.module.scss b/src/components/Loader/PageLoader.module.scss deleted file mode 100644 index a46249483..000000000 --- a/src/components/Loader/PageLoader.module.scss +++ /dev/null @@ -1,32 +0,0 @@ -@import '~@santiment-network/ui/mixins.scss'; - -.loader { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - height: 50vh; - - @include responsive('phone', 'phone-xs') { - position: fixed; - left: 0; - right: 0; - top: 50%; - margin-top: -25vh; - } - - &__img { - border: none !important; - animation: load 1s infinite alternate; - } -} - -@keyframes load { - from { - transform: scale(0.9); - } - - to { - transform: scale(1); - } -} diff --git a/src/components/Markdown/CodeBlockRenderer.js b/src/components/Markdown/CodeBlockRenderer.js deleted file mode 100644 index 421f7d021..000000000 --- a/src/components/Markdown/CodeBlockRenderer.js +++ /dev/null @@ -1,83 +0,0 @@ -import React, { useState } from "react" -import PropTypes from "prop-types" -import copy from "copy-to-clipboard" -import cx from "classnames" -import SyntaxHighlighter from "react-syntax-highlighter" -import Icon from "@santiment-network/ui/Icon" -import { foundation } from "react-syntax-highlighter/dist/esm/styles/hljs" -import styles from "./Markdown.module.scss" - -const EXPLORER_URL = "https://api.santiment.net/graphiql" - -const CodeBlockRenderer = ({ language, value }) => { - const [copiedShown, setCopiedShown] = useState(false) - - function showCopiedTooltip() { - setCopiedShown(true) - setTimeout(() => setCopiedShown(false), 1000) - } - - const onCopy = () => { - copy(value) - showCopiedTooltip() - } - - const rawLang = language || "" - const parts = rawLang.split("-") - const [lang, ...flags] = parts - const wantsExplorer = lang === "graphql" && flags.includes("explorer") - - const highlightLang = lang || null - - const explorerUrl = wantsExplorer - ? `${EXPLORER_URL}?query=${encodeURIComponent(value)}` - : null - - return ( - <> -
-
- -
- - - {value} - -
- {wantsExplorer && ( -

- - - Run in explorer - - -

- )} - - ) -} - -CodeBlockRenderer.propTypes = { - value: PropTypes.string.isRequired, - language: PropTypes.string, -} - -CodeBlockRenderer.defaultProps = { - language: null, -} - -export default CodeBlockRenderer diff --git a/src/components/Markdown/HeadingRenderer.js b/src/components/Markdown/HeadingRenderer.js deleted file mode 100644 index 859c0f923..000000000 --- a/src/components/Markdown/HeadingRenderer.js +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import { sluggify } from 'san-webkit/lib/utils/url' -import { flatten } from './utils' -import { usePageHash } from '../../utils/utils' -import Icon from '@santiment-network/ui/Icon' -import styles from './Markdown.module.scss' - -const HeadingRenderer = ({ level, children, scrollToTargetAdjusted }) => { - const content = React.Children.toArray(children) - const text = content.reduce(flatten, '') - const slug = sluggify(text) - - return React.createElement(`h${level}`, { id: slug }, [ - scrollToTargetAdjusted(e, slug, true)} - key={slug} - className={styles.anchor} - > - - , - children, - ]) -} - -HeadingRenderer.propTypes = { - children: PropTypes.node.isRequired, - level: PropTypes.number.isRequired, -} - -export default HeadingRenderer diff --git a/src/components/Markdown/LinkRenderer.js b/src/components/Markdown/LinkRenderer.js deleted file mode 100644 index d172aba10..000000000 --- a/src/components/Markdown/LinkRenderer.js +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react' -import { Link } from 'gatsby' - -const LinkRenderer = ({ href, children }) => { - let link = href.toString().toLowerCase() - const isLinkComponent = - (!href.includes('http') || href.includes('academy.santiment.net')) && - !href.startsWith('#') && - !href.includes('mailto') - if (isLinkComponent) { - link = href.replace(/https:\/\/academy.santiment.net/g, '') - if (!link.includes('#') && !link.endsWith('/')) { - link += '/' - } - - if (!link.startsWith('/')) { - link = '/' + link - } - } - - let props - - if (!isLinkComponent && !href.startsWith('#')) { - props = { target: '_blank', rel: 'noopener noreferrer' } - } - - return isLinkComponent ? ( - {children} - ) : ( - - {children} - - ) -} - -export default LinkRenderer diff --git a/src/components/Markdown/Markdown.js b/src/components/Markdown/Markdown.js deleted file mode 100644 index fdda90465..000000000 --- a/src/components/Markdown/Markdown.js +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import ReactMarkdown from 'react-markdown' -import HeadingRenderer from './HeadingRenderer' -import NoteRenderer from './NoteRenderer' -import CodeBlockRenderer from './CodeBlockRenderer' -import TextRenderer from './TextRenderer' -import LinkRenderer from './LinkRenderer' -import { MathRenderer, MathBlockRenderer } from './MathRenderer' -import styles from './Markdown.module.scss' -const RemarkMathPlugin = require('remark-math') - -const Markdown = ({ markdown, ...rest }) => ( - , - code: CodeBlockRenderer, - math: MathBlockRenderer, - inlineMath: MathRenderer, - blockquote: NoteRenderer, - }} - /> -) - -Markdown.propTypes = { - markdown: PropTypes.string.isRequired, -} - -export default Markdown diff --git a/src/components/Markdown/Markdown.module.scss b/src/components/Markdown/Markdown.module.scss deleted file mode 100644 index 96fff8420..000000000 --- a/src/components/Markdown/Markdown.module.scss +++ /dev/null @@ -1,352 +0,0 @@ -@import "~@santiment-network/ui/mixins.scss"; -@import url("https://fonts.googleapis.com/css?family=Fira+Code&display=swap"); - -.wrapper { - scroll-behavior: smooth; - width: 100%; - max-width: 620px; - font-style: normal; - font-weight: normal; - color: var(--rhino); - word-break: break-word; - - @include text('body-1'); - line-height: 28px; - - @include responsive('phone', 'phone-xs', 'tablet') { - @include text('body-2'); - } - - h1 { - color: var(--rhino); - @include text("h3"); - margin: 26px 0 32px; - font-weight: 500; - } - - h2 { - color: var(--rhino); - @include text("h4"); - margin: 56px 0 24px; - font-weight: 500; - } - - h3 { - color: var(--rhino); - @include text("h4"); - margin: 40px 0 24px; - font-size: 22px; - } - - h4, - h5 { - color: var(--rhino); - @include text("body-1", "l"); - margin: 12px 0 16px; - } - - h1, - h2, - h3, - h4 { - position: relative; - - &:hover>.anchor { - opacity: 1; - } - } - - .blockquote { - padding: 8px 18px; - border-radius: 8px; - border: 1px solid var(--porcelain); - margin: 20px 0; - border-left: 3px solid var(--jungle-green); - - &__warning { - border-left: 3px solid var(--texas-rose); - } - - &__error { - border-left: 3px solid var(--persimmon); - } - } - - - .anchor { - opacity: 0; - fill: var(--waterloo); - position: absolute; - width: 1em; - left: -1em; - top: -1px; - color: inherit; - text-decoration: none; - border-bottom: none; - - &:hover { - fill: var(--jungle-green); - } - - @include responsive('phone-xs', 'phone', 'tablet') { - display: none; - } - } - - img { - width: 100%; - border: 1px solid var(--porcelain); - border-radius: 4px; - - &[alt$='noborder'] { - border: none; - border-radius: initial; - padding-top: 16px; - } - } - - p { - margin: 10px 0; - } - - hr { - border: none; - border-top: 1px solid var(--porcelain); - margin: 18px 0; - } - - code { - background: var(--athens); - padding: 0 6px; - border-radius: 4px; - border: 1px solid var(--porcelain); - display: inline-block; - margin: 0 2px 2px 0; - line-height: 20px; - font-family: Fira Code, Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; - } - - pre { - border: 1px solid var(--porcelain); - border-radius: 4px; - background: var(--white) !important; - overflow-x: auto; - overflow-y: hidden; - margin: 20px 0; - padding: 0 !important; - - code { - white-space: pre; - border: none; - overflow-y: hidden; - padding: 10px; - margin-bottom: -10px; - font-size: 16px; - background: inherit; - } - - span { - font-family: Fira Code, Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; - } - - code:first-child { - position: absolute; - top: 0; - left: 0; - bottom: 10px; - border: 1px solid var(--porcelain); - } - - code:last-child { - padding: 10px 40px; - } - } - - iframe { - width: 100%; - border: none !important; - } - - a { - color: var(--jungle-green); - word-break: break-word; - - &:hover { - color: var(--jungle-green-hover); - text-decoration: underline var(--jungle-green-light-3); - text-underline-offset: 4px; - } - } - - ul>li::before { - content: "•"; - color: var(--casper); - transform: scale(1.5); - display: inline-block; - vertical-align: top; - width: 1em; - margin-left: -1em; - } - - ol { - list-style: none; - counter-reset: li; - - &>li { - counter-increment: li; - - &::before { - content: "." counter(li); - color: var(--casper); - display: inline-block; - vertical-align: top; - width: 1em; - margin-left: -1.5em; - margin-right: 0.5em; - text-align: right; - direction: rtl; - } - } - } - - ul, - ol { - padding-left: 18px; - - &>li { - margin-bottom: 8px; - - P { - display: inline-block; - margin: 0; - } - } - } - - table { - border-collapse: collapse; - box-sizing: border-box; - border-radius: 4px; - width: 100%; - margin: 15px 0; - - @include responsive('phone-xs') { - overflow: auto; - } - } - - th { - background: var(--athens); - padding: 10px 14px; - text-align: center; - color: var(--rhino); - - @include text("body-3", "l"); - } - - td { - color: var(--rhino); - @include text("body-3"); - text-align: center; - padding: 12px 16px 12px; - } - - table, - th, - td { - border: 1px solid #e7eaf3; - - @include responsive('phone-xs') { - font-size: 12px; - padding: 6px 5px; - } - } - - mark { - padding: 16px 24px 16px 48px; - border: 1px solid var(--porcelain, #E7EAF3); - border-radius: 8px; - display: block; - font-size: 18px; - line-height: 26px; - color: var(--rhino, #2F354D); - background-color: transparent; - position: relative; - margin-top: 24px; - - strong { - margin-right: 4px; - } - } - - mark:before { - content: '✅'; - position: absolute; - left: 12px; - } -} - -.codeWrapper { - position: relative; -} - -.copy { - -webkit-tap-highlight-color: transparent; - position: absolute; - right: 1px; - top: 10px; - width: 44px; - text-align: center; - fill: var(--casper); - background: linear-gradient(270deg, #fff, #fff 60%, hsla(0, 0%, 100%, 0)); - - &:hover { - fill: var(--waterloo); - cursor: pointer; - } -} - -.copied::before { - @include text('caption'); - - display: block; - content: 'Copied!'; - position: absolute; - right: 0; - bottom: 120%; - padding: 3px 10px; - border-radius: 4px; - background: $fiord; - color: $white; -} - -.checkmark { - fill: var(--lima); - background: var(--lima-light); -} - -.cross { - fill: var(--persimmon); - background: var(--persimmon-light); -} - -.icon { - width: 24px; - height: 24px; - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - margin: 0 auto; - - @include responsive('phone-xs') { - width: auto; - height: auto; - background: transparent; - } -} - -:global(.san-tokens h2) { - font-weight: 400; - margin: 32px 0 12px; -} \ No newline at end of file diff --git a/src/components/Markdown/MathRenderer.js b/src/components/Markdown/MathRenderer.js deleted file mode 100644 index 183cb803b..000000000 --- a/src/components/Markdown/MathRenderer.js +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import TeX from '@matejmazur/react-katex' -import 'katex/dist/katex.min.css' - -export const MathRenderer = ({ value }) => {value} - -export const MathBlockRenderer = ({ value }) => {value} - -MathRenderer.propTypes = { - value: PropTypes.string.isRequired, -} - -MathBlockRenderer.propTypes = { - value: PropTypes.string.isRequired, -} diff --git a/src/components/Markdown/NoteRenderer.js b/src/components/Markdown/NoteRenderer.js deleted file mode 100644 index 22c60da97..000000000 --- a/src/components/Markdown/NoteRenderer.js +++ /dev/null @@ -1,34 +0,0 @@ -import React from 'react' -import cx from 'classnames' -import { flatten } from './utils' -import styles from './Markdown.module.scss' - -const TYPES = ['ORANGE_TYPE', 'RED_TYPE'] - -const TYPES_STYLES = { - ORANGE_TYPE: styles.blockquote__warning, - RED_TYPE: styles.blockquote__error, -} - -const NoteRenderer = ({ children }) => { - let content = React.Children.toArray(children) - const text = content.reduce(flatten, '') - - const hasSpecialType = TYPES.find(type => text.includes(type)) - if (hasSpecialType) { - content = content[0].props.children.slice(1) - } - - return ( -
- {content} -
- ) -} - -export default NoteRenderer diff --git a/src/components/Markdown/TextRenderer.js b/src/components/Markdown/TextRenderer.js deleted file mode 100644 index 27801e3b1..000000000 --- a/src/components/Markdown/TextRenderer.js +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react' -import cx from 'classnames' -import PropTypes from 'prop-types' -import Emoji from 'react-emoji-render' -import Icon from '@santiment-network/ui/Icon' -import styles from './Markdown.module.scss' - -const TextRenderer = ({ value }) => { - if (value === '❌' || value === ':x:') { - return ( -
- -
- ) - } - - if (value === ':white_check_mark:' || value === '✔') { - return ( -
- -
- ) - } - - return -} - -TextRenderer.propTypes = { - value: PropTypes.string.isRequired, -} - -export default TextRenderer diff --git a/src/components/Markdown/utils.js b/src/components/Markdown/utils.js deleted file mode 100644 index 8b7d7be8e..000000000 --- a/src/components/Markdown/utils.js +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react' - -export const flatten = (text, child) => { - return typeof child === 'string' - ? text + child - : React.Children.toArray(child.props.children).reduce(flatten, text) -} - -export const sluggify = text => - text - .toString() - .toLowerCase() - .replace(/\s+/g, '-') // Replace spaces with - - .replace(/&/g, '-and-') // Replace & with 'and' - .replace(/[^A-Za-z_0-9]+/g, '-') // Remove all non-word chars - .replace(/-+/g, '-') // Replace multiple - with single - - .replace(/^-+/, '') // Trim - from start of text - .replace(/-+$/, '') diff --git a/src/components/MarkdownCustomComponents/Details.js b/src/components/MarkdownCustomComponents/Details.js deleted file mode 100644 index 620397b1b..000000000 --- a/src/components/MarkdownCustomComponents/Details.js +++ /dev/null @@ -1,10 +0,0 @@ -import React from "react" -import "./Details.module.scss" - -const Details = ({ children }) => { - return
{children}
-} - -export const Summary = ({ children }) => {children} - -export default Details diff --git a/src/components/MarkdownCustomComponents/Details.module.scss b/src/components/MarkdownCustomComponents/Details.module.scss deleted file mode 100644 index c108f0618..000000000 --- a/src/components/MarkdownCustomComponents/Details.module.scss +++ /dev/null @@ -1,10 +0,0 @@ -:global(summary) { - cursor: pointer; - list-style-type: disclosure-closed; - display: list-item; - margin-left: 18px; -} - -:global(details[open]) :global(summary) { - list-style-type: disclosure-open; -} diff --git a/src/components/MarkdownCustomComponents/Notebox.js b/src/components/MarkdownCustomComponents/Notebox.js deleted file mode 100644 index 1cd7e7398..000000000 --- a/src/components/MarkdownCustomComponents/Notebox.js +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react' -import cx from 'classnames' -import styles from './Notebox.module.scss' - -const ICONS = { - hand: '👋', - pin: '📌', - note: '⚠️', - none: '', - openBook: '📖 ', - exclamation: '❗', - pointRight: '👉', - arrowRight: '➡️ ', - dart: '🎯', - brain: '🧠' -} - -const Notebox = ({ type = 'note', children }) => { - const icon = ICONS[type] ?? '⚠️ ' - const style = styles[type] ?? styles.note - - return ( -
-
{icon}
- {children} -
- ) -} - -export default Notebox diff --git a/src/components/MarkdownCustomComponents/Notebox.module.scss b/src/components/MarkdownCustomComponents/Notebox.module.scss deleted file mode 100644 index f141f65fe..000000000 --- a/src/components/MarkdownCustomComponents/Notebox.module.scss +++ /dev/null @@ -1,49 +0,0 @@ -.noteBox { - display: flex; - border-radius: 8px; - padding: 16px 24px; - margin: 16px 0; - - p { - padding: 0; - margin: 0; - } - - .boxIcon { - margin-right: 12px; - } -} - -.pin { - border: 1px solid var(--porcelain); -} - -.note { - border: 1px solid var(--texas-rose-light-3); -} - -.hand { - border: 1px solid var(--jungle-green-light-3); -} - -.none { - border: 1px solid var(--jungle-green-light-3) -} - -.exclamation { - border: 1px solid var(--porcelain); -} - -.openBook { - border: 1px solid var(--porcelain); -} - -.pointRight { - border: 1px solid var(--porcelain); - background-color: #F7F8FB; -} - -.arrowRight, .brain, .dart { - border: 1px solid var(--porcelain); - background-color: #F7F8FB; -} diff --git a/src/components/MarkdownCustomComponents/Resource.js b/src/components/MarkdownCustomComponents/Resource.js deleted file mode 100644 index 5fd95bf79..000000000 --- a/src/components/MarkdownCustomComponents/Resource.js +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react' -import styles from './Resource.module.scss' - -const Resource = ({ title, children }) => ( -
- {title &&
{title}
} - {children} -
-) - -export default Resource diff --git a/src/components/MarkdownCustomComponents/Resource.module.scss b/src/components/MarkdownCustomComponents/Resource.module.scss deleted file mode 100644 index e19873e08..000000000 --- a/src/components/MarkdownCustomComponents/Resource.module.scss +++ /dev/null @@ -1,31 +0,0 @@ -.resource { - display: flex; - flex-direction: column; - background: var(--athens); - border-radius: 8px; - padding: 24px 32px; - margin: 24px 0; - - & > div { - display: flex; - flex-direction: column; - - p { - margin: 0; - padding: 0; - - &:not(:last-child) { - margin-bottom: 8px; - } - } - } -} - -.header { - font-weight: 600; - font-size: 18px; - line-height: 26px; - color: var(--rhino); - margin-bottom: 12px; -} - diff --git a/src/components/MarkdownCustomComponents/components.js b/src/components/MarkdownCustomComponents/components.js deleted file mode 100644 index 3720234cd..000000000 --- a/src/components/MarkdownCustomComponents/components.js +++ /dev/null @@ -1,6 +0,0 @@ -import Resource from "./Resource" - -import Notebox from "./Notebox" -import Details, { Summary } from "./Details" - -export { Resource, Notebox, Details, Summary } diff --git a/src/components/MarkdownCustomComponents/index.js b/src/components/MarkdownCustomComponents/index.js deleted file mode 100644 index 509f5b859..000000000 --- a/src/components/MarkdownCustomComponents/index.js +++ /dev/null @@ -1,41 +0,0 @@ -import React from "react" -import { renderToString } from "react-dom/server" -import * as components from "./components" -import { parseMarkdown } from "./parser" -import Markdown from "../Markdown/Markdown" - -function renderJSX(node) { - return node.children.reduce((acc, child) => { - const { type, name, data, attributes } = child - - if (type === "text") { - const text = - node.type !== "tag" - ? data - : renderToString() - return acc + text - } - - const Component = components[name] - if (!Component) return `\n⚠️[INCORRECT MARKUP]: \<${name} /\>⚠️\n` - - const inject = "__CHILDREN__" - const parent = renderToString( - {inject} - ) - - return acc + parent.replace(inject, renderJSX(child)) - }, "") -} - -function injectCustomMarkdownComponents(rawMarkdown) { - if (rawMarkdown.length < 1) return rawMarkdown - - const ast = parseMarkdown(rawMarkdown, { - validTags: Object.keys(components), - }) - - return renderJSX(ast) -} - -export default injectCustomMarkdownComponents diff --git a/src/components/MarkdownCustomComponents/parser.js b/src/components/MarkdownCustomComponents/parser.js deleted file mode 100644 index b5bc8a0ee..000000000 --- a/src/components/MarkdownCustomComponents/parser.js +++ /dev/null @@ -1,160 +0,0 @@ -export function parseMarkdown(text, options = {}) { - const ctx = { - source: text, - cursor: 0, - indices: [], - validTags: new Set(options.validTags), - } - const parent = { type: "root", children: [] } - - parseChildren(ctx, parent) - - appendHangingTextNode(ctx, parent) - - return parent -} - -function parseChildren(ctx, parent) { - return iterate(ctx, char => { - if (char === "<") { - if (parseTagEnd(ctx, parent) === true) { - appendHangingTextNode(ctx, parent, parent.childrenEnd) - - return true - } - - const node = parseReactTag(ctx, parent) - if (node) { - appendHangingTextNode(ctx, parent, node.tagStart) - parent.children.push(node) - } - } - }) -} - -function parseTagEnd(ctx, parent) { - if (ctx.source[ctx.cursor + 1] !== "/" || parent.type !== "tag") { - return false - } - - ctx.cursor += 2 - - const tagName = ctx.source.slice(ctx.cursor, ctx.cursor + parent.name.length) - - if (tagName !== parent.name) { - return false - } - - parent.childrenEnd = ctx.cursor - 2 - - ctx.cursor += parent.name.length + 1 - parent.tagEnd = ctx.cursor - - return true -} - -function parseReactTag(ctx) { - ctx.cursor++ - - const char = ctx.source[ctx.cursor] - - const isReactTag = new RegExp("[A-Z]").test(char) - if (isReactTag === false) return - - const tagStart = ctx.cursor - 1 - const name = parseReactTagName(ctx) - - if (ctx.validTags.has(name) === false) { - return - } - - const node = Tag(name, tagStart) - - parseAttributes(ctx, node) - - node.childrenStart = ctx.cursor - - parseChildren(ctx, node) - - return node -} - -function parseReactTagName(ctx) { - const { cursor, source } = ctx - - return iterate(ctx, char => { - if (char === " " || char === ">") { - return source.slice(cursor, ctx.cursor) - } - }) -} - -function parseAttributes(ctx, node) { - const hasAttributes = ctx.source[ctx.cursor] === " " - - ctx.cursor++ - - if (hasAttributes === false) return - - return iterate(ctx, char => { - if (char === ">") { - ctx.cursor++ - return true - } - - const attribute = parseAttribute(ctx) - if (attribute) node.attributes[attribute.name] = attribute.value - }) -} - -function parseAttribute(ctx) { - const { source, cursor } = ctx - - return iterate(ctx, char => { - if (char === "=") { - return { - name: source.slice(cursor, ctx.cursor), - value: parseAttributeValue(ctx), - } - } - }) -} - -function parseAttributeValue(ctx) { - ctx.cursor++ - - const openClose = ctx.source[ctx.cursor] - - const start = ++ctx.cursor - - return iterate(ctx, char => { - if (char === openClose && ctx.source[ctx.cursor - 1] !== "\\") { - return ctx.source.slice(start, ctx.cursor) - } - }) -} - -function Text(data) { - return { type: "text", data } -} - -function Tag(name, tagStart) { - return { type: "tag", name, attributes: {}, children: [], tagStart } -} - -function iterate(ctx, clb) { - for (; ctx.cursor < ctx.source.length; ) { - const data = clb(ctx.source[ctx.cursor]) - if (data) return data - - ctx.cursor++ - } -} - -function appendHangingTextNode(ctx, parent, textEnd) { - const lastChild = parent.children[parent.children.length - 1] - - const textStart = lastChild ? lastChild.tagEnd : parent.childrenStart || 0 - - parent.children.push(Text(ctx.source.slice(textStart, textEnd))) -} diff --git a/src/components/Notifications/Notifications.js b/src/components/Notifications/Notifications.js deleted file mode 100644 index 2434943c5..000000000 --- a/src/components/Notifications/Notifications.js +++ /dev/null @@ -1,78 +0,0 @@ -import React, { Component } from 'react' -import Notification from '@santiment-network/ui/Notification' -import { CSSTransition, TransitionGroup } from 'react-transition-group' -import styles from './Notifications.module.scss' - -export const NotificationsContext = React.createContext({ - notifications: [], - add: () => {}, - remove: () => {}, -}) - -const notifyDuration = 300 - -let lastId = 0 - -class Notifications extends Component { - state = { - notifications: [], - add: this.add, - remove: this.remove, - } - - add = ({ dismissAfter = 4000, ...notification }) => { - notification.id = lastId - lastId += 1 - this.setState(({ notifications }) => { - setTimeout(() => { - this.remove(notification) - }, dismissAfter) - return { notifications: [...notifications, notification] } - }) - } - - remove = notification => { - this.setState(({ notifications }) => ({ - notifications: notifications.filter(not => not !== notification), - })) - } - - render() { - const { notifications } = this.state - const { children } = this.props - - const context = { - notifications, - add: this.add, - remove: this.remove, - } - - return ( - <> - - {notifications.map((notification, i) => ( - - this.remove(notification)} - style={{ - '--y-offset': `calc(-${i}00% - ${i}0px - 25px)`, - }} - /> - - ))} - - - {children} - - - ) - } -} - -export default Notifications diff --git a/src/components/Notifications/Notifications.module.scss b/src/components/Notifications/Notifications.module.scss deleted file mode 100644 index 99d0cbc9a..000000000 --- a/src/components/Notifications/Notifications.module.scss +++ /dev/null @@ -1,36 +0,0 @@ -$notify-duration: 300; - -.notifications { - z-index: 10000; - position: fixed; - bottom: 100px; - left: 20px; - white-space: nowrap; -} - -.notification { - position: absolute; - transform: translateY(var(--y-offset)); - transition: transform 200ms; - transition-delay: #{$notify-duration - 100}ms; -} - -.enter { - animation: notify #{$notify-duration}ms forwards; -} - -.exit { - animation: notify #{$notify-duration}ms reverse forwards; -} - -@keyframes notify { - 0% { - transform: translate3d(-120%, var(--y-offset), 0); - opacity: 0; - } - - 100% { - transform: translate3d(0, var(--y-offset), 0); - opacity: 1; - } -} diff --git a/src/components/SantimentProductsTooltip/Logo.js b/src/components/SantimentProductsTooltip/Logo.js deleted file mode 100644 index 425b3b4e3..000000000 --- a/src/components/SantimentProductsTooltip/Logo.js +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' -import cx from 'classnames' -import { Link } from 'gatsby' -import styles from './Logo.module.scss' - -const Logo = ({ className }) => ( - - - - - - - Academy - -) - -export default Logo diff --git a/src/components/SantimentProductsTooltip/Logo.module.scss b/src/components/SantimentProductsTooltip/Logo.module.scss deleted file mode 100644 index fa27f75f7..000000000 --- a/src/components/SantimentProductsTooltip/Logo.module.scss +++ /dev/null @@ -1,17 +0,0 @@ -@import '~@santiment-network/ui/mixins'; - -.logo { - display: inline-flex; - align-items: center; - - svg { - fill: var(--rhino); - } -} - -.logoText { - @include text('body-2', 'm'); - - margin: 0 8px; - color: var(--rhino) !important; -} diff --git a/src/components/SantimentProductsTooltip/Product.js b/src/components/SantimentProductsTooltip/Product.js deleted file mode 100644 index d26295d42..000000000 --- a/src/components/SantimentProductsTooltip/Product.js +++ /dev/null @@ -1,51 +0,0 @@ -import React from 'react' -import cx from 'classnames' -import Message from '@santiment-network/ui/Message' -import styles from './Product.module.scss' - -const ProductItem = ({ - className, - product: { to, img, onClick, title, label, isSelected, description }, -}) => { - const Wrapper = ({ children, className }) => - onClick ? ( - - {children} - - ) : ( - - {children} - - ) - return ( - -
-
- {title} -
-
-

{title}

-

{description}

- {label && ( - - SAN chain support soon - - )} -
-
-
- ) -} - -export default ProductItem diff --git a/src/components/SantimentProductsTooltip/Product.module.scss b/src/components/SantimentProductsTooltip/Product.module.scss deleted file mode 100644 index 45cc0ed3b..000000000 --- a/src/components/SantimentProductsTooltip/Product.module.scss +++ /dev/null @@ -1,107 +0,0 @@ -@import '../../../node_modules/@santiment-network/ui/mixins'; - -.imgWrapper { - min-width: 40px; - min-height: 40px; - display: flex; - align-items: center; - justify-content: center; - border-radius: 4px; - background-color: var(--athens); - transition: background 0.2s; - - @include responsive('phone-xs', 'phone') { - min-width: 32px; - min-height: 32px; - } -} - -.wrapper { - width: 100%; - max-width: 292px; - max-height: 120px; - min-height: 92px; - padding: 12px 16px; - border-radius: 4px; - cursor: pointer; - display: inline; - transition: background 0.2s; - - @include responsive('phone-xs', 'phone') { - min-height: auto; - padding: 8px 16px; - } - - &__selected { - & .imgWrapper { - background-color: var(--jungle-green-light); - } - - &:hover .imgWrapper { - background-color: var(--jungle-green-light) !important; - } - } - - &:hover { - background: var(--athens); - - & .imgWrapper { - background-color: var(--white); - } - } -} - -.product { - cursor: pointer; - display: flex; - align-items: flex-start; - color: var(--waterloo); - text-decoration: none; - - @include responsive('phone-xs', 'phone') { - align-items: center; - } -} - -.img { - width: auto; - height: auto; -} - -.title { - color: var(--rhino); - margin: 0 0 4px 0; - - @include text('body-2', 'm'); - - - @include responsive('phone-xs', 'phone') { - margin: 0; - } -} - -.description { - color: var(--waterloo); - margin: 0; - white-space: normal; - - @include text('body-3'); - - - @include responsive('phone-xs', 'phone') { - display: none; - } -} - -.info { - display: flex; - flex-direction: column; - margin-left: 12px; - align-items: flex-start; -} - -.label { - margin-top: 4px; - padding: 1px 8px; - font-weight: 400; -} diff --git a/src/components/SantimentProductsTooltip/Products.js b/src/components/SantimentProductsTooltip/Products.js deleted file mode 100644 index 137f69bfa..000000000 --- a/src/components/SantimentProductsTooltip/Products.js +++ /dev/null @@ -1,53 +0,0 @@ -import sanr from './icons/sanr.svg' -import sanapi from './icons/sanapi.svg' -import sanbase from './icons/sanbase.svg' -import insights from './icons/insights.svg' -import sansheets from './icons/sansheets.svg' -import research from './icons/research.svg' - -export const BUSINESS_PRODUCTS = [ - { - img: sanbase, - title: 'Sanbase', - description: - 'Behavior analysis & monitoring platform for 1500+ crypto assets', - to: 'https://app.santiment.net', - }, - { - img: sansheets, - title: 'Sansheets', - description: 'Google Spreadsheets plugin for importing Santiment data', - to: 'https://sheets.santiment.net', - }, - { - img: sanapi, - title: 'SanAPI', - description: 'The most comprehensive crypto API on the market', - to: 'https://api.santiment.net', - }, -] - -export const CHAIN_PRODUCTS = [ - { - img: sanr, - title: 'SanR', - description: 'Decentralized marketplace for crypto price signals', - to: 'https://sanr.app', - }, - { - img: insights, - title: 'Insights', - description: 'Market analysis from the San team and community members', - label: 'SAN chain support soon', - to: 'https://insights.santiment.net', - }, -] - -export const INITIATIVES_PRODUCTS = [ - { - img: research, - title: 'Research', - description: 'Empowering Academia with Blockchain & Crypto Insights', - to: 'https://research.santiment.net/', - }, -] diff --git a/src/components/SantimentProductsTooltip/SantimentLogo.js b/src/components/SantimentProductsTooltip/SantimentLogo.js deleted file mode 100644 index 5457baf44..000000000 --- a/src/components/SantimentProductsTooltip/SantimentLogo.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react' - -const SantimentLogo = ({ className }) => ( - - - - - - - - - -) - -export default SantimentLogo diff --git a/src/components/SantimentProductsTooltip/SantimentProductsTooltip.js b/src/components/SantimentProductsTooltip/SantimentProductsTooltip.js deleted file mode 100644 index ef2ad6ad0..000000000 --- a/src/components/SantimentProductsTooltip/SantimentProductsTooltip.js +++ /dev/null @@ -1,76 +0,0 @@ -import React, { useState } from "react" -import cx from "classnames" -import Tooltip from "@santiment-network/ui/Tooltip" -import ProductItem from "./Product" -import { - BUSINESS_PRODUCTS, - CHAIN_PRODUCTS, - INITIATIVES_PRODUCTS, -} from "./Products" -import { ProductsTrigger } from "./Trigger" -import styles from "./SantimentProductsTooltip.module.scss" - -const SantimentProductsTooltip = ({ className }) => { - const [isOpen, setOpen] = useState(false) - - return ( - - - - } - onOpen={() => setOpen(true)} - onClose={() => setOpen(false)} - > -
-
-
-

SAN business

-
- {BUSINESS_PRODUCTS.map((item, index) => ( - - ))} -
-
-
-

Initiatives

-
- {INITIATIVES_PRODUCTS.map((item, index) => ( - - ))} -
-
-
-
-

SAN chain

-
- {CHAIN_PRODUCTS.map((item, index) => ( - - ))} -
-
-
-
- ) -} - -export default SantimentProductsTooltip diff --git a/src/components/SantimentProductsTooltip/SantimentProductsTooltip.module.scss b/src/components/SantimentProductsTooltip/SantimentProductsTooltip.module.scss deleted file mode 100644 index 946c736a1..000000000 --- a/src/components/SantimentProductsTooltip/SantimentProductsTooltip.module.scss +++ /dev/null @@ -1,109 +0,0 @@ -@import '~@santiment-network/ui/mixins'; - -.trigger { - display: flex; - align-items: center; - cursor: pointer; - - @include responsive('phone-xs', 'phone') { - display: none; - } -} - -.tooltip { - z-index: 2000; - box-shadow: 0 2px 24px rgba(24, 27, 43, 0.04), 1px 3px 7px rgba(47, 53, 77, 0.05); - border-radius: 4px; - border: 1px solid var(--porcelain); - overflow: hidden; - - @include responsive('phone-xs', 'phone') { - display: none; - } -} - -.container { - padding: 32px 32px 24px 32px; - width: 672px; - display: flex; - align-items: flex-start; - justify-content: center; - background: var(--white); -} - -.mobileWrapper { - display: none; - - @include responsive('phone-xs', 'phone') { - display: flex; - flex-direction: column; - padding-bottom: 16px; - border-bottom: 1px solid var(--porcelain); - } -} - -.background { - position: absolute; - bottom: 1px; - right: 1px; - z-index: 0; -} - -.mainLink { - position: absolute; - bottom: 23px; - right: 52px; - padding: 20px; - - &:hover svg { - transition: fill 0.2s; - fill: var(--waterloo); - } - - @include responsive('phone-xs', 'phone') { - display: none; - } -} - -.block { - z-index: 1; -} - -.block + .block { - margin-left: 24px; - - - @include responsive('phone-xs', 'phone') { - margin-left: 0; - } -} - -.business { - margin-bottom: 24px -} - -.product + .product { - margin-top: 8px; - - @include responsive('phone-xs', 'phone') { - margin: 0; - } -} - -.title { - color: var(--waterloo); - display: flex; - align-items: center; - margin: 0 0 20px 16px; - - @include text('body-3'); - - @include responsive('phone-xs', 'phone') { - margin: 16px 0 8px 16px; - } -} - -.products { - display: flex; - flex-direction: column; -} diff --git a/src/components/SantimentProductsTooltip/Trigger.js b/src/components/SantimentProductsTooltip/Trigger.js deleted file mode 100644 index 7c3c9d580..000000000 --- a/src/components/SantimentProductsTooltip/Trigger.js +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react' -import cx from 'classnames' -import styles from './Trigger.module.scss' - -export const ProductsTrigger = ({ isOpen, className }) => ( -
- - - - - - -
-) diff --git a/src/components/SantimentProductsTooltip/Trigger.module.scss b/src/components/SantimentProductsTooltip/Trigger.module.scss deleted file mode 100644 index 755865685..000000000 --- a/src/components/SantimentProductsTooltip/Trigger.module.scss +++ /dev/null @@ -1,22 +0,0 @@ -.trigger { - width: 32px; - height: 32px; - display: flex; - align-items: center; - justify-content: center; - border-radius: 4px; - transition: background-color 0.1s ease-in-out; - background-color: transparent; - - & svg { - transition: transform 0.2s ease-in-out; - } - - &.opened { - background-color: var(--athens); - - & svg { - transform: rotate(90deg); - } - } -} diff --git a/src/components/SantimentProductsTooltip/icons/datascience.svg b/src/components/SantimentProductsTooltip/icons/datascience.svg deleted file mode 100644 index 78912663b..000000000 --- a/src/components/SantimentProductsTooltip/icons/datascience.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/components/SantimentProductsTooltip/icons/insights.svg b/src/components/SantimentProductsTooltip/icons/insights.svg deleted file mode 100644 index d72a887ca..000000000 --- a/src/components/SantimentProductsTooltip/icons/insights.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/components/SantimentProductsTooltip/icons/research.svg b/src/components/SantimentProductsTooltip/icons/research.svg deleted file mode 100644 index 9cfa84359..000000000 --- a/src/components/SantimentProductsTooltip/icons/research.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/components/SantimentProductsTooltip/icons/sanapi.svg b/src/components/SantimentProductsTooltip/icons/sanapi.svg deleted file mode 100644 index 7e2e972ad..000000000 --- a/src/components/SantimentProductsTooltip/icons/sanapi.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/components/SantimentProductsTooltip/icons/sanbase.svg b/src/components/SantimentProductsTooltip/icons/sanbase.svg deleted file mode 100644 index 9fde7803d..000000000 --- a/src/components/SantimentProductsTooltip/icons/sanbase.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/components/SantimentProductsTooltip/icons/sanhunters.svg b/src/components/SantimentProductsTooltip/icons/sanhunters.svg deleted file mode 100644 index ad3dc53e5..000000000 --- a/src/components/SantimentProductsTooltip/icons/sanhunters.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/components/SantimentProductsTooltip/icons/sanr.svg b/src/components/SantimentProductsTooltip/icons/sanr.svg deleted file mode 100644 index ecf3fcfc2..000000000 --- a/src/components/SantimentProductsTooltip/icons/sanr.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/src/components/SantimentProductsTooltip/icons/sansheets.svg b/src/components/SantimentProductsTooltip/icons/sansheets.svg deleted file mode 100644 index 55abf5bf2..000000000 --- a/src/components/SantimentProductsTooltip/icons/sansheets.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/components/Search/Search.js b/src/components/Search/Search.js deleted file mode 100644 index 64a762586..000000000 --- a/src/components/Search/Search.js +++ /dev/null @@ -1,38 +0,0 @@ -import React, { useRef, useEffect } from "react" -import cx from "classnames" -import { InputWithIcon as Input } from "@santiment-network/ui/Input" -import { isSSR } from "../../utils/utils" -import styles from "./Search.module.scss" - -const Search = () => { - useEffect(() => { - if (isSSR) return - - if (window.docsearch) { - window.docsearch({ - appId: "ZVVHPHW3IV", - apiKey: "712c7a00cdc130f6828b671dac8ad35f", // required - indexName: "santiment_academy", // required - inputSelector: "#search", // required - }) - } - }, []) - - const inputEl = useRef(null) - - return ( -
- -
- ) -} - -export default Search diff --git a/src/components/Search/Search.module.scss b/src/components/Search/Search.module.scss deleted file mode 100644 index 355c0e9b7..000000000 --- a/src/components/Search/Search.module.scss +++ /dev/null @@ -1,139 +0,0 @@ -@import "~@santiment-network/ui/mixins.scss"; - -.wrapper { - width: 100%; - background: var(--athens); - display: flex; - flex-direction: column; - align-items: center; - position: relative; - - &__small { - width: 296px; - // position: absolute; - position: relative; - margin-left: auto; - background: none; - z-index: 1000; - align-items: baseline; - - & .input { - width: 296px; - height: 32px; - min-width: auto; - - @include responsive("phone") { - width: 250px !important; - height: 40px !important; - } - } - - @include responsive("phone") { - width: 250px !important; - } - - @media screen and (max-width: 546px) { - display: none; - } - } -} - -.input { - width: 100%; - height: 32px; - min-width: 326px; - padding-left: 44px !important; - - @include responsive("laptop", "desktop", "tablet") { - width: 500px; - } - - @include responsive("phone") { - width: 100%; - } - - @include responsive("phone-xs") { - width: 100%; - font-size: 15px; - } - - &:focus .ds-dropdown-menu { - display: block; - } -} - -.icon { - margin-left: 8px; -} - -:global { - .algolia-docsearch-suggestion { - &--content { - &:before { - background: var(--porcelain) !important; - } - - &:hover { - background: var(--jungle-green-light) !important; - } - } - - &--highlight { - color: var(--jungle-green) !important; - box-shadow: none !important; - padding-top: 0 !important; - padding-bottom: 0 !important; - background: var(--jungle-green-light) !important; - } - - &--category-header { - border-bottom: 1px solid var(--porcelain) !important; - color: var(--rhino) !important; - } - - &--title { - color: var(--rhino) !important; - @include text("body-1"); - } - - &--text { - color: var(--rhino) !important; - } - - &--subcategory-column { - color: var(--waterloo) !important; - - &:before { - background: var(--porcelain) !important; - } - } - } -} - -:global(.ds-dropdown-menu) { - box-shadow: 0px 4px 12px rgba(24, 27, 43, 0.04) !important; - - &:before { - display: none !important; - } - - & [class^="ds-dataset-"] { - border: 1px solid var(--porcelain) !important; - } - - @include responsive("phone-xs") { - min-width: 300px !important; - } - - @include responsive("phone") { - min-width: 400px !important; - } -} - -:global(.algolia-autocomplete - .ds-dropdown-menu - .ds-suggestion.ds-cursor - .algolia-docsearch-suggestion:not(.suggestion-layout-simple) - .algolia-docsearch-suggestion--content) { - background-color: var(--jungle-green-light) !important; -} diff --git a/src/components/Sidebar/Sidebar.js b/src/components/Sidebar/Sidebar.js deleted file mode 100644 index 9a554db11..000000000 --- a/src/components/Sidebar/Sidebar.js +++ /dev/null @@ -1,57 +0,0 @@ -import React from 'react' -import cx from 'classnames' -import { Link } from 'gatsby' -import SidebarCategory from './SidebarCategory' -import { - GUIDES, - REFERENCES, - RESOURCES, - GETTING_STARTED, -} from '../../docs/navigation' -import { titleToSlug } from '../../utils/docs' -import { isArticleActive } from './utils' -import styles from './Sidebar.module.scss' - -const Sidebar = ({ className }) => { - let active = [] - if (typeof window !== 'undefined') { - active = window.location.pathname.split('/').slice(1) - } - - return ( -
-
-
    -

    {GETTING_STARTED.title}

    -
  • -
      - {(GETTING_STARTED.articles || []).map(article => ( -
    • - {article} -
    • - ))} -
    -
  • -

    Guides

    - {GUIDES.map((category, idx) => ( - - ))} -

    Resources

    - {REFERENCES.map((category, idx) => ( - - ))} -
-
-
-
- ) -} - -export default Sidebar diff --git a/src/components/Sidebar/Sidebar.module.scss b/src/components/Sidebar/Sidebar.module.scss deleted file mode 100644 index 5f1e01188..000000000 --- a/src/components/Sidebar/Sidebar.module.scss +++ /dev/null @@ -1,195 +0,0 @@ -@import "~@santiment-network/ui/mixins.scss"; - -.wrapper { - height: 100%; - position: fixed; - top: 71px; - left: 0; - bottom: 0; - right: 0; - width: 100%; - display: flex; - - @include responsive("phone", "phone-xs", "tablet") { - display: none; - } -} - -.content { - border-right: 1px solid var(--porcelain); - display: flex; - flex-grow: 1; - position: relative; -} - -.empty { - display: flex; - width: 885px; - flex-grow: 1; - z-index: -1; -} - -.list { - margin-left: auto; - margin-bottom: 48px; - width: 285px; - padding: 0 0 40px 15px; - - overflow: hidden; - - &:hover, - &:focus { - overflow-y: auto; - overflow-y: overlay; - } -} - -.heading { - margin: 32px 20px 16px 0; - padding-top: 32px; - border-top: 1px solid var(--porcelain); - @include text("body-3", "m"); - color: var(--casper); - - &:first-child { - border-top: none; - margin-top: 0; - } -} - -.arrow { - border-radius: 4px; - box-sizing: content-box; - transition: all 0.05s ease-in-out; - visibility: hidden; - cursor: pointer; - padding: 8px 10px; - margin-right: 2px; -} - -.category { - border-radius: 6px; - margin-left: -10px; - width: 100%; - display: flex; - align-items: center; - justify-content: space-between; - padding: 4px 10px; - @include text("body-2"); - - &__title { - width: 100%; - color: var(--rhino); - } - - &__active &__title { - color: var(--jungle-green); - } - - &__wrapper { - margin: 12px 0 14px 0; - } - - &__active { - background-color: var(--jungle-green-light); - color: var(--jungle-green-hover); - fill: var(--jungle-green-hover); - - & .arrow { - visibility: visible; - } - } - - &__opened .articles { - height: auto; - margin: 17px 0 17px; - overflow: visible; - } - - &__opened .arrow { - visibility: visible; - transform: rotate(90deg); - } - - &__opened .category { - background-color: var(--jungle-green-light); - color: var(--rhino); - fill: var(--jungle-green-hover); - } - - &__opened .category__active { - background-color: var(--jungle-green-light); - color: var(--jungle-green-hover); - fill: var(--jungle-green-hover); - } - - &:hover { - background-color: var(--jungle-green-light); - color: var(--jungle-green); - fill: var(--jungle-green); - - & .arrow { - visibility: visible; - } - } -} - -.articles { - margin: 16px 0; - position: relative; - transition: all 0.2s ease-in-out; - - height: 0; - margin: 0; - overflow: hidden; - - &:before { - position: absolute; - display: block; - background: var(--porcelain); - top: 0; - left: 0; - content: ""; - width: 1px; - height: 100%; - border-radius: 8px; - } -} - -.article { - display: block; - padding: 4px 0 4px 16px; - color: var(--fiord); - position: relative; - - &:hover { - color: var(--jungle-green); - } - - @include text("body-2"); - - &__active { - color: var(--jungle-green); - - &:before { - position: absolute; - display: block; - background: var(--jungle-green); - top: 0; - left: 0; - content: ""; - width: 2px; - height: 100%; - border-radius: 8px; - } - } -} - -.block { - color: var(--rhino); - margin-top: 8px; -} - -.block__active { - color: var(--jungle-green-hover); -} diff --git a/src/components/Sidebar/SidebarCategory.js b/src/components/Sidebar/SidebarCategory.js deleted file mode 100644 index 9dd29c407..000000000 --- a/src/components/Sidebar/SidebarCategory.js +++ /dev/null @@ -1,64 +0,0 @@ -import React, { useState, useEffect } from 'react' -import cx from 'classnames' -import { Link } from 'gatsby' -import Icon from '@santiment-network/ui/Icon' -import { titleToSlug } from '../../utils/docs' -import { isCategoryActive, isArticleActive } from './utils' -import styles from './Sidebar.module.scss' - -const SidebarCategory = ({ active, title, articles = [] }) => { - const isActive = isCategoryActive(active, title) - const [isOpen, setIsOpen] = useState(isActive) - const [render, setRender] = useState(false) - useEffect(() => setRender(true), []) - return ( - render && ( -
  • -
    - - {title} - - {articles.length > 0 && ( - setIsOpen(!isOpen)} - /> - )} -
    -
      - {articles.map((article, idx) => { - const slugTitle = article.slug || article - const linkTitle = article.title || article - return ( -
    • - - {linkTitle} - -
    • - ) - })} -
    -
  • - ) - ) -} - -export default SidebarCategory diff --git a/src/components/Sidebar/utils.js b/src/components/Sidebar/utils.js deleted file mode 100644 index 12ec22470..000000000 --- a/src/components/Sidebar/utils.js +++ /dev/null @@ -1,10 +0,0 @@ -import { titleToSlug } from '../../utils/docs' - -export const isCategoryActive = (active = [], category) => - active[0] === titleToSlug(category) -export const isArticleActive = (active = [], category, article) => { - return ( - (category ? isCategoryActive(active, category) : true) && - decodeURIComponent(active[category ? 1 : 0]) === titleToSlug(article) - ) -} diff --git a/src/components/features/changelog/Assets.astro b/src/components/features/changelog/Assets.astro new file mode 100644 index 000000000..f264b78d4 --- /dev/null +++ b/src/components/features/changelog/Assets.astro @@ -0,0 +1,14 @@ +--- +import { UniQuery } from 'san-webkit-next/api/executor.js' +import { queryAssetsChangelog } from '$modules/changelog/api' +import AssetsList from './AssetsList.svelte' + +const PAGE_SIZE = 20 +const initialData = await queryAssetsChangelog(UniQuery(fetch))( + 1, + PAGE_SIZE, + '', +) +--- + + diff --git a/src/components/features/changelog/AssetsList.svelte b/src/components/features/changelog/AssetsList.svelte new file mode 100644 index 000000000..b421dfb56 --- /dev/null +++ b/src/components/features/changelog/AssetsList.svelte @@ -0,0 +1,44 @@ + + +{#snippet createdAsset(item: AssetCreatedEvent)} + {@const asset = item.asset} + + + Created {asset?.name} + {#if asset?.ticker} ({asset.ticker}){/if} - + +{/snippet} + +{#snippet hiddenAsset(item: AssetHiddenEvent)} + {@const asset = item.asset} + + Hidden {asset?.name} + + {#if asset?.ticker} ({asset.ticker}){/if} - + + {#if item.hidingReason} — {item.hidingReason}{/if} +{/snippet} + + diff --git a/src/components/features/changelog/Metrics.astro b/src/components/features/changelog/Metrics.astro new file mode 100644 index 000000000..7fb4262be --- /dev/null +++ b/src/components/features/changelog/Metrics.astro @@ -0,0 +1,14 @@ +--- +import { UniQuery } from 'san-webkit-next/api/executor.js' +import { queryMetricsChangelog } from '$modules/changelog/api' +import MetricsList from './MetricsList.svelte' + +const PAGE_SIZE = 20 +const initialData = await queryMetricsChangelog(UniQuery(fetch))( + 1, + PAGE_SIZE, + '', +) +--- + + diff --git a/src/components/features/changelog/MetricsList.svelte b/src/components/features/changelog/MetricsList.svelte new file mode 100644 index 000000000..8e9feddff --- /dev/null +++ b/src/components/features/changelog/MetricsList.svelte @@ -0,0 +1,44 @@ + + +{#snippet createdMetric(item: MetricCreatedEvent)} + {@const metricName = item.metric?.humanReadableName || item.metric?.metric || '—'} + Created {metricName} - + + {#if item.metric?.docs?.link} + — Docs + {/if} +{/snippet} + +{#snippet deprecatedMetric(item: MetricDeprecatedEvent)} + {@const metricName = item.metric?.humanReadableName || item.metric?.metric || '—'} + Deprecated {metricName} - + + {#if item.deprecationNote} + — {item.deprecationNote} + {/if} +{/snippet} + + diff --git a/src/components/features/changelog/Root.svelte b/src/components/features/changelog/Root.svelte new file mode 100644 index 000000000..bf675c46b --- /dev/null +++ b/src/components/features/changelog/Root.svelte @@ -0,0 +1,102 @@ + + +
    + {#if entries.length === 0} +
    No changes yet.
    + {:else} +
    + {#each entries as group (group.date)} + {@const createdItems = getList(group, keys.created)} + {@const removedItems = getList(group, keys.removed)} + +
    +

    {getFormattedMonthDayYear(new Date(group.date), { utc: true })}

    + + {#if createdItems.length} +
      + {#each createdItems as item} +
    • {@render renderCreated(item)}
    • + {/each} +
    + {/if} + + {#if removedItems.length} +
      + {#each removedItems as item} +
    • {@render renderRemoved(item)}
    • + {/each} +
    + {/if} +
    + {/each} +
    + {/if} + + {#if pagination.hasMore} +
    + +
    + {/if} +
    diff --git a/src/components/features/home/DomainCard.svelte b/src/components/features/home/DomainCard.svelte new file mode 100644 index 000000000..8fba47f71 --- /dev/null +++ b/src/components/features/home/DomainCard.svelte @@ -0,0 +1,85 @@ + + + +
    + {#if Icon} + + {/if} +
    + +
    +

    + {title} +

    + +

    + {@html description} +

    +
    +
    diff --git a/src/components/features/home/Hero.svelte b/src/components/features/home/Hero.svelte new file mode 100644 index 000000000..8e2523276 --- /dev/null +++ b/src/components/features/home/Hero.svelte @@ -0,0 +1,48 @@ + + +
    +
    diff --git a/src/components/features/search/Search.svelte b/src/components/features/search/Search.svelte new file mode 100644 index 000000000..98559fb87 --- /dev/null +++ b/src/components/features/search/Search.svelte @@ -0,0 +1,125 @@ + + + (showResults = false), + }} +> + {#snippet children()} +
    + { if (query.length >= 2) showResults = true }} + /> +
    + {/snippet} + + {#snippet content()} +
    + {#if loading} +
    Searching...
    + {:else if results.length === 0} +
    No results found.
    + {:else} + {#each results as result} + { + query = '' + results = [] + showResults = false + }} + > +
    + {result.meta.title} +
    + +
    + {@html result.excerpt} +
    +
    + {/each} + {/if} +
    + {/snippet} +
    diff --git a/src/components/image.js b/src/components/image.js deleted file mode 100644 index 8c1488a9d..000000000 --- a/src/components/image.js +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react' -import { StaticQuery, graphql } from 'gatsby' -import Img from 'gatsby-image' - -/* - * This component is built using `gatsby-image` to automatically serve optimized - * images with lazy loading and reduced file sizes. The image is loaded using a - * `StaticQuery`, which allows us to load the image from directly within this - * component, rather than having to pass the image data down from pages. - * - * For more information, see the docs: - * - `gatsby-image`: https://gatsby.dev/gatsby-image - * - `StaticQuery`: https://gatsby.dev/staticquery - */ - -const Image = () => ( - } - /> -) -export default Image diff --git a/src/components/layout.js b/src/components/layout.js deleted file mode 100644 index 65dd86070..000000000 --- a/src/components/layout.js +++ /dev/null @@ -1,96 +0,0 @@ -import React, { useEffect, useLayoutEffect, useState } from "react" -import PropTypes from "prop-types" -import withSizes from "react-sizes" -import cx from "classnames" -import GoogleAnalytics from "react-ga" -import Helmet from "react-helmet" -import { startResponsiveController } from "webkit/responsive" -import { mapSizesToProps } from "../utils/sizes" -import CookiesPopup from "webkit/ui/CookiesPopup.svelte" -import Dialogs from "webkit/ui/Dialog/Dialogs.svelte" -import Intercom from "./Intercom" -import IntercomWidget from "../components/IntercomWidget" -import Header from "./Header/Header" -import Footer from "./Footer/Footer" -import Sidebar from "./Sidebar/Sidebar" -import Notifications from "./Notifications/Notifications" -import styles from "./layout.module.scss" -import "webkit/styles/main.css" - -if (typeof window !== "undefined") { - startResponsiveController() -} - -if (process.env.NODE_ENV === "production") { - GoogleAnalytics.initialize("UA-100571693-14") - GoogleAnalytics.initialize("G-H53MB0V33X") -} else { - GoogleAnalytics.initialize("UA-100571693-14", { testMode: true }) -} - -const envScript = process.env.NODE_ENV === "production" && ( - - + + + + diff --git a/src/components/layout/SEO.astro b/src/components/layout/SEO.astro new file mode 100644 index 000000000..6e6f288cd --- /dev/null +++ b/src/components/layout/SEO.astro @@ -0,0 +1,43 @@ +--- +import { SEO as seoConfig } from '../../config/seo' + +export interface Props { + title?: string + description?: string + lang?: string + meta?: Array> +} + +const { + title: defaultTitle, + description: defaultDescription, + author: defaultAuthor, +} = seoConfig ?? {} + +const props = Astro.props + +const pageTitle = props.title ?? defaultTitle +const metaDescription = props.description ?? defaultDescription +const extraMeta = props.meta ?? [] + +const canonicalURL = Astro.url.href + +const imageUrl = new URL('/academy.png', Astro.site).href +--- + +{pageTitle} + + + + + + + + + + + + + + +{extraMeta.map((attrs) => )} diff --git a/src/components/layout/Sidebar.svelte b/src/components/layout/Sidebar.svelte new file mode 100644 index 000000000..c8e717211 --- /dev/null +++ b/src/components/layout/Sidebar.svelte @@ -0,0 +1,45 @@ + + +{#snippet sectionHeader(title: string, hasBorder: boolean)} +

    + {title} +

    +{/snippet} + + diff --git a/src/components/layout/SidebarGroup.svelte b/src/components/layout/SidebarGroup.svelte new file mode 100644 index 000000000..f454ebda9 --- /dev/null +++ b/src/components/layout/SidebarGroup.svelte @@ -0,0 +1,89 @@ + + +
  • +
    + + {item.title} + + + {#if item.items?.length} + + {/if} +
    + + {#if isOpen && item.items?.length} +
      + {#each item.items as subItem (subItem.slug)} + {@const isSubActive = currentSlug === subItem.slug} + +
    • + + {subItem.title} + +
    • + {/each} +
    + {/if} +
  • diff --git a/src/components/layout/SidebarLink.svelte b/src/components/layout/SidebarLink.svelte new file mode 100644 index 000000000..2b3f93b6e --- /dev/null +++ b/src/components/layout/SidebarLink.svelte @@ -0,0 +1,25 @@ + + +
  • + + {title} + +
  • diff --git a/src/components/layout/TableOfContents.svelte b/src/components/layout/TableOfContents.svelte new file mode 100644 index 000000000..3df66234d --- /dev/null +++ b/src/components/layout/TableOfContents.svelte @@ -0,0 +1,87 @@ + + + diff --git a/src/components/markdown/Blockquote.svelte b/src/components/markdown/Blockquote.svelte new file mode 100644 index 000000000..02ea05b57 --- /dev/null +++ b/src/components/markdown/Blockquote.svelte @@ -0,0 +1,24 @@ + + +
    + {@render children()} +
    diff --git a/src/components/markdown/Link.svelte b/src/components/markdown/Link.svelte new file mode 100644 index 000000000..6c0fba958 --- /dev/null +++ b/src/components/markdown/Link.svelte @@ -0,0 +1,44 @@ + + + + {@render children?.()} + diff --git a/src/components/markdown/Notebox.svelte b/src/components/markdown/Notebox.svelte new file mode 100644 index 000000000..0b4c7b18c --- /dev/null +++ b/src/components/markdown/Notebox.svelte @@ -0,0 +1,55 @@ + + +
    +
    {icon}
    + +
    + {@render children?.()} +
    +
    diff --git a/src/components/markdown/Resource.svelte b/src/components/markdown/Resource.svelte new file mode 100644 index 000000000..7e006b0ca --- /dev/null +++ b/src/components/markdown/Resource.svelte @@ -0,0 +1,26 @@ + + +
    div]:flex [&>div]:flex-col', + '[&>div]:space-y-2', + '[&>div_p]:m-0 [&>div_p]:p-0' + )} +> + {#if title} +
    {title}
    + {/if} + + {@render children?.()} +
    diff --git a/src/components/markdown/headings/H1.astro b/src/components/markdown/headings/H1.astro new file mode 100644 index 000000000..5921128be --- /dev/null +++ b/src/components/markdown/headings/H1.astro @@ -0,0 +1,8 @@ +--- +import Heading from './Heading.svelte' +const props = Astro.props +--- + + + + diff --git a/src/components/markdown/headings/H2.astro b/src/components/markdown/headings/H2.astro new file mode 100644 index 000000000..c7e7b09a2 --- /dev/null +++ b/src/components/markdown/headings/H2.astro @@ -0,0 +1,8 @@ +--- +import Heading from './Heading.svelte' +const props = Astro.props +--- + + + + diff --git a/src/components/markdown/headings/H3.astro b/src/components/markdown/headings/H3.astro new file mode 100644 index 000000000..41c80b125 --- /dev/null +++ b/src/components/markdown/headings/H3.astro @@ -0,0 +1,8 @@ +--- +import Heading from './Heading.svelte' +const props = Astro.props +--- + + + + diff --git a/src/components/markdown/headings/H4.astro b/src/components/markdown/headings/H4.astro new file mode 100644 index 000000000..e15aa3352 --- /dev/null +++ b/src/components/markdown/headings/H4.astro @@ -0,0 +1,8 @@ +--- +import Heading from './Heading.svelte' +const props = Astro.props +--- + + + + diff --git a/src/components/markdown/headings/H5.astro b/src/components/markdown/headings/H5.astro new file mode 100644 index 000000000..89addb40d --- /dev/null +++ b/src/components/markdown/headings/H5.astro @@ -0,0 +1,8 @@ +--- +import Heading from './Heading.svelte' +const props = Astro.props +--- + + + + diff --git a/src/components/markdown/headings/Heading.svelte b/src/components/markdown/headings/Heading.svelte new file mode 100644 index 000000000..665488a40 --- /dev/null +++ b/src/components/markdown/headings/Heading.svelte @@ -0,0 +1,37 @@ + + + + + + {@render children?.()} + diff --git a/src/components/markdown/headings/index.ts b/src/components/markdown/headings/index.ts new file mode 100644 index 000000000..6487b4ab0 --- /dev/null +++ b/src/components/markdown/headings/index.ts @@ -0,0 +1,7 @@ +import H1 from './H1.astro' +import H2 from './H2.astro' +import H3 from './H3.astro' +import H4 from './H4.astro' +import H5 from './H5.astro' + +export { H1, H2, H3, H4, H5 } diff --git a/src/components/seo.js b/src/components/seo.js deleted file mode 100644 index ee3108baa..000000000 --- a/src/components/seo.js +++ /dev/null @@ -1,98 +0,0 @@ -/** - * SEO component that queries for data with - * Gatsby's useStaticQuery React hook - * - * See: https://www.gatsbyjs.org/docs/use-static-query/ - */ - -import React from 'react' -import PropTypes from 'prop-types' -import Helmet from 'react-helmet' -import { useStaticQuery, graphql } from 'gatsby' -import preview from '../images/academy.png' - -function SEO({ description, lang, meta, title }) { - const { site } = useStaticQuery( - graphql` - query { - site { - siteMetadata { - title - description - author - siteUrl - } - } - } - ` - ) - - const metaDescription = description || site.siteMetadata.description - const imageUrl = `${site.siteMetadata.siteUrl}${preview}` - - return ( - - ) -} - -SEO.defaultProps = { - lang: `en`, - meta: [], - description: ``, -} - -SEO.propTypes = { - description: PropTypes.string, - lang: PropTypes.string, - meta: PropTypes.arrayOf(PropTypes.object), - title: PropTypes.string.isRequired, -} - -export default SEO diff --git a/src/components/shared/Breadcrumbs.astro b/src/components/shared/Breadcrumbs.astro new file mode 100644 index 000000000..e324b4e07 --- /dev/null +++ b/src/components/shared/Breadcrumbs.astro @@ -0,0 +1,34 @@ +--- +import type { TBreadcrumb } from '$modules/navigation/breadcrumbs' + +import { cn } from 'san-webkit-next/ui/utils' +import Svg from 'san-webkit-next/ui/core/Svg' + +type Props = { + breadcrumbs: TBreadcrumb[] + class?: string +} + +const { breadcrumbs, class: className } = Astro.props +--- + + diff --git a/src/components/shared/DiscordCTA.svelte b/src/components/shared/DiscordCTA.svelte new file mode 100644 index 000000000..a506a5aaf --- /dev/null +++ b/src/components/shared/DiscordCTA.svelte @@ -0,0 +1,32 @@ + + + +
    + +
    + +
    +

    Talk to us in Discord

    + +

    + Still have some questions left? Join our Discord and get help from the + Santiment team! +

    + + +
    +
    diff --git a/src/components/shared/LastUpdated.svelte b/src/components/shared/LastUpdated.svelte new file mode 100644 index 000000000..ad3669feb --- /dev/null +++ b/src/components/shared/LastUpdated.svelte @@ -0,0 +1,18 @@ + + +
    + + + +
    diff --git a/src/components/shared/SupportButton.svelte b/src/components/shared/SupportButton.svelte new file mode 100644 index 000000000..8a7dc66a9 --- /dev/null +++ b/src/components/shared/SupportButton.svelte @@ -0,0 +1,10 @@ + + + + + + diff --git a/src/components/ui/ProductsButton.svelte b/src/components/ui/ProductsButton.svelte new file mode 100644 index 000000000..bce396f83 --- /dev/null +++ b/src/components/ui/ProductsButton.svelte @@ -0,0 +1,16 @@ + + + + {#snippet children({ ref })} + + {/snippet} + diff --git a/src/components/ui/icons/ForwardedEmail.svelte b/src/components/ui/icons/ForwardedEmail.svelte new file mode 100644 index 000000000..4ac1be191 --- /dev/null +++ b/src/components/ui/icons/ForwardedEmail.svelte @@ -0,0 +1,23 @@ + + + + + + + + + + diff --git a/src/components/ui/illustrations/Greeting.svelte b/src/components/ui/illustrations/Greeting.svelte new file mode 100644 index 000000000..9272cfca8 --- /dev/null +++ b/src/components/ui/illustrations/Greeting.svelte @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/ui/illustrations/categories/Changelog.svelte b/src/components/ui/illustrations/categories/Changelog.svelte new file mode 100644 index 000000000..936d82ddd --- /dev/null +++ b/src/components/ui/illustrations/categories/Changelog.svelte @@ -0,0 +1,35 @@ + + + + + + + + + + + + + diff --git a/src/components/ui/illustrations/categories/Education.svelte b/src/components/ui/illustrations/categories/Education.svelte new file mode 100644 index 000000000..022281805 --- /dev/null +++ b/src/components/ui/illustrations/categories/Education.svelte @@ -0,0 +1,31 @@ + + + + + + + + + + + diff --git a/src/components/ui/illustrations/categories/Glossary.svelte b/src/components/ui/illustrations/categories/Glossary.svelte new file mode 100644 index 000000000..31bcf372a --- /dev/null +++ b/src/components/ui/illustrations/categories/Glossary.svelte @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/src/components/ui/illustrations/categories/Labels.svelte b/src/components/ui/illustrations/categories/Labels.svelte new file mode 100644 index 000000000..4ccea4094 --- /dev/null +++ b/src/components/ui/illustrations/categories/Labels.svelte @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + diff --git a/src/components/ui/illustrations/categories/Metrics.svelte b/src/components/ui/illustrations/categories/Metrics.svelte new file mode 100644 index 000000000..23e5e320f --- /dev/null +++ b/src/components/ui/illustrations/categories/Metrics.svelte @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/ui/illustrations/categories/Products.svelte b/src/components/ui/illustrations/categories/Products.svelte new file mode 100644 index 000000000..53f8ae6ff --- /dev/null +++ b/src/components/ui/illustrations/categories/Products.svelte @@ -0,0 +1,30 @@ + + + + + + + + + + + diff --git a/src/components/ui/illustrations/categories/San.svelte b/src/components/ui/illustrations/categories/San.svelte new file mode 100644 index 000000000..cb9cb5c33 --- /dev/null +++ b/src/components/ui/illustrations/categories/San.svelte @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + diff --git a/src/components/ui/illustrations/categories/Sanapi.svelte b/src/components/ui/illustrations/categories/Sanapi.svelte new file mode 100644 index 000000000..459f9b1f6 --- /dev/null +++ b/src/components/ui/illustrations/categories/Sanapi.svelte @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/src/components/ui/illustrations/categories/Sanbase.svelte b/src/components/ui/illustrations/categories/Sanbase.svelte new file mode 100644 index 000000000..468dc0e4e --- /dev/null +++ b/src/components/ui/illustrations/categories/Sanbase.svelte @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/src/components/ui/illustrations/categories/Sanqueries.svelte b/src/components/ui/illustrations/categories/Sanqueries.svelte new file mode 100644 index 000000000..52db67f25 --- /dev/null +++ b/src/components/ui/illustrations/categories/Sanqueries.svelte @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/src/components/ui/illustrations/categories/Sansheets.svelte b/src/components/ui/illustrations/categories/Sansheets.svelte new file mode 100644 index 000000000..bfae5a85d --- /dev/null +++ b/src/components/ui/illustrations/categories/Sansheets.svelte @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/src/components/ui/illustrations/categories/Signals.svelte b/src/components/ui/illustrations/categories/Signals.svelte new file mode 100644 index 000000000..095262aca --- /dev/null +++ b/src/components/ui/illustrations/categories/Signals.svelte @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/ui/illustrations/categories/Youtube.svelte b/src/components/ui/illustrations/categories/Youtube.svelte new file mode 100644 index 000000000..07ec68d32 --- /dev/null +++ b/src/components/ui/illustrations/categories/Youtube.svelte @@ -0,0 +1,36 @@ + + + + + + + + + + + diff --git a/src/config/home.ts b/src/config/home.ts new file mode 100644 index 000000000..3482ef42a --- /dev/null +++ b/src/config/home.ts @@ -0,0 +1,85 @@ +export const GUIDES = [ + { + title: 'Education and Use cases', + href: '/education-and-use-cases/', + description: 'Examples and use cases
    for Santiment metrics', + icon: 'Education', + }, + { + title: 'Sanbase', + href: '/sanbase/', + description: 'Our crypto analytics
    & behavior platform', + icon: 'Sanbase', + }, + { + title: 'Santiment Queries', + href: '/santiment-queries/', + icon: 'Sanqueries', + description: 'Our database explorer
    & research tool', + }, + { + title: 'SanAPI', + href: '/sanapi/', + icon: 'SanAPI', + description: 'Our API, available metrics
    & documentation', + }, + { + title: 'Sansheets', + href: '/sansheets/', + icon: 'Sansheets', + description: 'Our Spreadsheets plugin
    for Santiment data', + }, + { + title: 'Products and Plans', + href: '/products-and-plans/', + icon: 'ProductsAndPlans', + description: 'On the Santiment suite
    and available plans', + }, + { + title: 'SAN Tokens', + href: '/san-tokens/', + icon: 'SANtokens', + description: 'Use cases, roadmap
    and where to buy', + }, + { + title: 'Glossary', + href: '/glossary/', + icon: 'Glossary', + description: 'Introduction to all relevant
    terms and concepts', + }, + { + title: 'Youtube Videos', + href: '/youtube-videos/', + description: 'Santiment webinars, video
    tutorials and more', + icon: 'Youtube', + }, +] + +export const RESOURCES = [ + { + title: 'Metrics', + href: '/metrics/', + description: `Introduction to Santiment's on-chain, social and development indicators`, + icon: 'Metrics', + }, + { + title: 'Changelog', + href: '/changelog/', + description: + 'Development updates, new features and other platform-wide improvements', + icon: 'Changelog', + }, + { + title: 'Labels', + href: '/labels/', + description: 'List and descriptions of all address labels on Santiment', + icon: 'Labels', + }, + { + title: 'Data Anomaly', + href: '/data-anomaly/', + description: + 'Directory of key stakeholder data anomalies available on Santiment', + icon: 'Signals', + }, +] diff --git a/src/config/markdown.ts b/src/config/markdown.ts new file mode 100644 index 000000000..6e1b4ff37 --- /dev/null +++ b/src/config/markdown.ts @@ -0,0 +1,13 @@ +import Blockquote from '$components/markdown/Blockquote.svelte' +import Link from '$components/markdown/Link.svelte' +import * as Headings from '$components/markdown/headings' + +export const MARKDOWN_COMPONENTS = { + h1: Headings.H1, + h2: Headings.H2, + h3: Headings.H3, + h4: Headings.H4, + h5: Headings.H5, + a: Link, + blockquote: Blockquote, +} diff --git a/src/config/navigation.ts b/src/config/navigation.ts new file mode 100644 index 000000000..86db48e50 --- /dev/null +++ b/src/config/navigation.ts @@ -0,0 +1,5 @@ +export const ROOT_SECTIONS: Record = { + 'getting-started': 'Getting started', + guides: 'Guides', + resources: 'Resources', +} diff --git a/src/config/products.ts b/src/config/products.ts new file mode 100644 index 000000000..6ff240be9 --- /dev/null +++ b/src/config/products.ts @@ -0,0 +1,13 @@ +export const PRODUCTS: Record = { + sanbase: { href: 'https://app.santiment.net/', title: 'Sanbase' }, + sanapi: { href: 'https://api.santiment.net/', title: 'Sanapi' }, + sansheets: { href: 'https://sheets.santiment.net/', title: 'Sansheets' }, + 'sql-editor': { + href: 'https://app.santiment.net/queries', + title: 'SQL Editor', + }, + 'youtube-videos': { + href: 'https://www.youtube.com/c/santimentnetwork', + title: 'Youtube channel', + }, +} diff --git a/src/config/seo.ts b/src/config/seo.ts new file mode 100644 index 000000000..bde17df8a --- /dev/null +++ b/src/config/seo.ts @@ -0,0 +1,6 @@ +export const SEO = { + title: `Crypto Academy: Learn How to Analyze Cryptocurrency Market`, + description: `Utilize our crypto academy as a comprehensive resource for knowledge about the crypto market, our products, tools, and metrics. Learn how to use these insights to enhance your market decisions.`, + author: `Santiment Team`, + siteUrl: 'https://academy.santiment.net', +} diff --git a/src/content.config.ts b/src/content.config.ts new file mode 100644 index 000000000..becbfa1a1 --- /dev/null +++ b/src/content.config.ts @@ -0,0 +1,24 @@ +import { glob } from 'astro/loaders' +import { defineCollection, z } from 'astro:content' + +const docs = defineCollection({ + loader: glob({ pattern: '**/*.{md,mdx}', base: './src/content/docs' }), + schema: z.object({ + title: z.string(), + headline: z.string().optional(), + description: z.string().optional(), + datePublished: z.coerce.date(), + dateModified: z.coerce.date().optional(), + author: z.string().nullable().optional(), + + sidebar: z + .object({ + label: z.string().optional(), + order: z.number().default(999), + hidden: z.boolean().default(false), + }) + .default({}), + }), +}) + +export const collections = { docs } diff --git a/src/content/docs/getting-started/for-developers/index.mdx b/src/content/docs/getting-started/for-developers/index.mdx new file mode 100644 index 000000000..55f6703f6 --- /dev/null +++ b/src/content/docs/getting-started/for-developers/index.mdx @@ -0,0 +1,108 @@ +--- +title: Getting started for Developers +author: Santiment Team +description: Santiment overview for Developers +datePublished: 2019-12-13 +dateModified: 2025-12-05 +sidebar: + label: For Developers + order: 30 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + +## Introduction + +The Santiment API is a powerful tool designed to provide crucial data for your +financial models. By leveraging this API, you can gain comprehensive insights +into the cryptocurrency market, encompassing social trends, developmental +metrics, and on-chain activities—all consolidated into a single platform. + +## What does Santiment offer to developers? + +Santiment offers a robust [GraphQL](https://graphql.org/) API, empowering +developers with advanced capabilities to fetch essential crypto market data. +GraphQL provides a highly flexible query language for APIs +that enables more intuitive and descriptive queries compared to traditional +REST API methods. With GraphQL, users can request exactly the data they need, +minimizing the number of API calls and reducing bandwidth usage. + +Apart from precomputed metrics, Santiment has the [Santiment Queries](/santiment-queries) +product, which allows developers to write custom SQL to obtain the data from the +database directly. These SQL queries can be executed from the [Queries web page](https://queries.santiment.net/) +or [execute the queries through the API](/santiment-queries/api-access) + +### GraphQL API + +In this example, the query fetches the daily active addresses for Bitcoin. The +query is self-descriptive and easy to maintain. New members to your team can +intuitively understand the query without the need to consult the documentation. + +```graphql explorer +{ + getMetric(metric: "daily_active_addresses") { + timeseriesDataJson( + selector: { slug: "bitcoin" } + from: "2024-01-01T00:00:00Z" + to: "2024-01-31T23:59:59Z" + interval: "1d" + ) + } +} +``` + +Find more GraphQL query examples on the [Common +Queries](/sanapi/common-queries) page, or read [How to access the +API](sanapi/accessing-the-api) article + +### Python API-wrapper library + +Santiment provides a [Python API wrapper library](https://github.com/santiment/sanpy) +that allows you to fetch metrics with a simple function call. The code shows +how to translate the GraphQL query from above. The data is returned in a Pandas +dataframe. + +```python +import san +san.get("daily_active_addresses", + slug="bitcoin", + from_date="2024-01-01", + to_date="2024-01-31", + interval="1d") +``` + +### Metrics Exported to S3 + +Santiment exports metrics data to Amazon S3 in [Parquet](https://parquet.apache.org/) format, providing +efficient access to large-scale historical data. For tasks like backtesting +or ML model training where you need to process large volumes of immutable +historical data, reading directly from S3 is more efficient than fetching +via API. + +The exported data includes both intraday (5-minute intervals) and daily +aggregated metrics, stored in an organized directory structure. + +To request data exporting and S3 bucket access credentials, please +[contact us](mailto:Suzanne.p@santiment.net). + +**Read more**: [Metrics Exported to S3 - Technical Documentation](/for-developers/metrics-exported-s3) + +## Metrics Catalog + +There are a few different ways to explore the available metrics. + +- Visit the [metrics' docs articles page](/metrics) where you can find links to + the documentation articles of the metrics. +- Open the [Metrics Catalog](https://api.santiment.net/available_metrics) + webpage that list all the metrics with information about the available + assets. This page allows you to filter the metrics supported by a given asset + and download the data as CSV. +- Open any [chart page on Sanbase](https://app.santiment.net/charts?slug=ethereum) and explore the metrics on the sidebar. +- Use the [GraphQL API]() + that shows the restrictions for each subscription product -- which metrics are accessible and what are the time range restrictions for them. + + + +**Read next: [How to Access the API](/sanapi/accessing-the-api/)** + + diff --git a/src/content/docs/getting-started/for-developers/metrics-exported-s3.mdx b/src/content/docs/getting-started/for-developers/metrics-exported-s3.mdx new file mode 100644 index 000000000..583723bf9 --- /dev/null +++ b/src/content/docs/getting-started/for-developers/metrics-exported-s3.mdx @@ -0,0 +1,220 @@ +--- +title: Metrics Exported to S3 - Technical Documentation +author: Santiment Team +description: Technical documentation for accessing and reading Santiment metrics data exported to S3 buckets +datePublished: 2025-12-03 +dateModified: 2025-12-04 +sidebar: + hidden: true +--- + +import Notebox from '$components/markdown/Notebox.svelte' + +## Overview + +Santiment exports metrics data to Amazon S3 in [Parquet](https://parquet.apache.org/) format, providing an efficient way to access large-scale time-series data. This data can be queried directly from S3 using analytics tools or downloaded and stored locally. + +## Data Structure + +The exported data is organized in a hierarchical directory structure: + +``` +s3://santiment-metrics/ +├── assets.parquet # Asset metadata lookup table +├── metrics.parquet # Metric metadata lookup table +└── metrics/ + ├── intraday/ # 5-minute interval metrics data + │ └── {metric_name}/ + │ └── {year}/ + │ └── {month}/ + │ └── data.parquet + └── daily/ # Daily aggregated metrics data + └── {metric_name}/ + └── {year}/ + └── {month}/ + └── data.parquet +``` + +### Path Components + +- `{metric_name}`: The name of the metric (e.g., `price_usd`, `active_addresses`) +- `{year}`: Four-digit year (e.g., `2024`) +- `{month}`: Two-digit month with leading zero (e.g., `01` for January, `12` for December) + +### Metrics Data Files + +**Path**: `s3://santiment-metrics/metrics/{interval}/{metric_name}/{year}/{month}/data.parquet` + +**Schema**: + +| Column | Type | Description | +| ----------- | --------- | ---------------------------------------- | +| `asset_id` | INTEGER | Foreign key reference to assets.parquet | +| `metric_id` | INTEGER | Foreign key reference to metrics.parquet | +| `dt` | TIMESTAMP | Date and time of the measurement | +| `value` | DOUBLE | The metric value | + +**Sample Data**: + +``` +asset_id | metric_id | dt | value +---------|-----------|---------------------|------------------ +378 | 1289 | 2024-01-01 00:00:00 | 42280.23527619226 +378 | 1289 | 2024-01-01 00:05:00 | 42384.54766118636 +``` + +### Assets Lookup Table + +**Path**: `s3://santiment-metrics/assets.parquet` + +**Schema**: + +| Column | Type | Description | +| ------------- | ------- | -------------------------------------- | +| `asset_id` | INTEGER | Unique identifier for the asset | +| `name` | STRING | Full name of the asset | +| `ticker_slug` | STRING | Ticker symbol and slug combination | +| `decimals` | INTEGER | Number of decimal places for the token | + +**Sample Data**: + +``` +asset_id | name | ticker_slug | decimals +---------|--------------------------------|----------------------------------|---------- +1 | 0chain | ZCN_0chain | 10 +2 | 0x | ZRX_0x | 18 +3 | 0x0-ai-ai-smart-contract | 0x0_0x0-ai-ai-smart-contract | 9 +``` + +### Metrics Lookup Table + +**Path**: `s3://santiment-metrics/metrics.parquet` + +**Schema**: + +| Column | Type | Description | +| ----------- | ------- | ---------------------------------------------- | +| `metric_id` | INTEGER | Unique identifier for the metric | +| `name` | STRING | Full name of the metric | +| `version` | STRING | Version or start date of the metric | +| `status` | STRING | Current status (e.g., `production`, `testing`) | + +**Sample Data**: + +``` +metric_id | name | version | status +----------|---------------------------------------------------|------------|------------ +1 | funding_rates_aggregated_per_exchange | 2019-01-01 | production +2 | funding_rates_aggregated_per_settlement_currency | 2019-01-01 | production +3 | total_funding_rates_aggregated_per_asset | 2019-01-01 | production +``` + +## Querying Data with ClickHouse + +In the following examples we use ClickHouse [s3 Table Function](https://clickhouse.com/docs/sql-reference/table-functions/s3) to request data from S3 buckets and +process it using SQL queries. But You can use any other instrument which +supports data reading from S3 buckets. + +### Basic Query Example + +The following example demonstrates how to query metrics data with proper asset and metric name resolution: + +```sql +SELECT + assets.name AS asset, + metrics.name AS metric, + dt, + value +FROM s3( + url='s3://santiment-metrics/metrics/intraday/price_usd/2024/01/data.parquet', + access_key_id='YOUR_KEY_ID', + secret_access_key='YOUR_KEY_SECRET', + format='Parquet' +) AS data +LEFT JOIN ( + SELECT + asset_id, + name + FROM s3( + url='s3://santiment-metrics/assets.parquet', + access_key_id='YOUR_KEY_ID', + secret_access_key='YOUR_KEY_SECRET', + format='Parquet' + ) +) AS assets USING asset_id +LEFT JOIN ( + SELECT + metric_id, + name + FROM s3( + url='s3://santiment-metrics/metrics.parquet', + access_key_id='YOUR_KEY_ID', + secret_access_key='YOUR_KEY_SECRET', + format='Parquet' + ) +) AS metrics ON metrics.metric_id = data.metric_id; +``` + +### Using Wildcards + +You can use wildcards in the S3 path to query multiple files at once. The following components support wildcard patterns: + +- **Interval**: `intraday` or `daily` +- **Metric name**: `price_usd`, `active_addresses`, etc. +- **Year**: `2024`, `2023`, etc. +- **Month**: `01`, `02`, ..., `12` + +**Example: Query all months in 2024 for a specific metric** + +```sql +SELECT + assets.name AS asset, + metrics.name AS metric, + dt, + value +FROM s3( + url='s3://santiment-metrics/metrics/intraday/price_usd/2024/*/data.parquet', + access_key_id='YOUR_KEY_ID', + secret_access_key='YOUR_KEY_SECRET', + format='Parquet' +) AS data +LEFT JOIN ( + SELECT asset_id, name + FROM s3( + url='s3://santiment-metrics/assets.parquet', + access_key_id='YOUR_KEY_ID', + secret_access_key='YOUR_KEY_SECRET', + format='Parquet' + ) +) AS assets USING asset_id +LEFT JOIN ( + SELECT metric_id, name + FROM s3( + url='s3://santiment-metrics/metrics.parquet', + access_key_id='YOUR_KEY_ID', + secret_access_key='YOUR_KEY_SECRET', + format='Parquet' + ) +) AS metrics ON metrics.metric_id = data.metric_id +WHERE asset.name = 'bitcoin'; +``` + +## Intraday vs Daily Metrics + +### Intraday Metrics + +- **Path**: `s3://santiment-metrics/metrics/intraday/{metric_name}/{year}/{month}/data.parquet` +- **Granularity**: 5-minute intervals +- **Use cases**: Intraday trading, detailed analysis, real-time monitoring + +### Daily Metrics + +- **Path**: `s3://santiment-metrics/metrics/daily/{metric_name}/{year}/{month}/data.parquet` +- **Granularity**: Daily aggregated values +- **Use cases**: Long-term trend analysis, reduced data volume, historical comparisons + + + +**Read next: [How to Access the API](/sanapi/accessing-the-api/)** + + diff --git a/src/docs/for-developers/sanbase-csv-export.png b/src/content/docs/getting-started/for-developers/sanbase-csv-export.png similarity index 100% rename from src/docs/for-developers/sanbase-csv-export.png rename to src/content/docs/getting-started/for-developers/sanbase-csv-export.png diff --git a/src/docs/for-developers/sandata-csv-export.png b/src/content/docs/getting-started/for-developers/sandata-csv-export.png similarity index 100% rename from src/docs/for-developers/sandata-csv-export.png rename to src/content/docs/getting-started/for-developers/sandata-csv-export.png diff --git a/src/docs/for-developers/sangraphs-csv-export.png b/src/content/docs/getting-started/for-developers/sangraphs-csv-export.png similarity index 100% rename from src/docs/for-developers/sangraphs-csv-export.png rename to src/content/docs/getting-started/for-developers/sangraphs-csv-export.png diff --git a/src/docs/for-traders/image1.png b/src/content/docs/getting-started/for-traders/image1.png similarity index 100% rename from src/docs/for-traders/image1.png rename to src/content/docs/getting-started/for-traders/image1.png diff --git a/src/docs/for-traders/image10.png b/src/content/docs/getting-started/for-traders/image10.png similarity index 100% rename from src/docs/for-traders/image10.png rename to src/content/docs/getting-started/for-traders/image10.png diff --git a/src/docs/for-traders/image11.png b/src/content/docs/getting-started/for-traders/image11.png similarity index 100% rename from src/docs/for-traders/image11.png rename to src/content/docs/getting-started/for-traders/image11.png diff --git a/src/docs/for-traders/image2.png b/src/content/docs/getting-started/for-traders/image2.png similarity index 100% rename from src/docs/for-traders/image2.png rename to src/content/docs/getting-started/for-traders/image2.png diff --git a/src/docs/for-traders/image3.png b/src/content/docs/getting-started/for-traders/image3.png similarity index 100% rename from src/docs/for-traders/image3.png rename to src/content/docs/getting-started/for-traders/image3.png diff --git a/src/docs/for-traders/image4.png b/src/content/docs/getting-started/for-traders/image4.png similarity index 100% rename from src/docs/for-traders/image4.png rename to src/content/docs/getting-started/for-traders/image4.png diff --git a/src/docs/for-traders/image5.png b/src/content/docs/getting-started/for-traders/image5.png similarity index 100% rename from src/docs/for-traders/image5.png rename to src/content/docs/getting-started/for-traders/image5.png diff --git a/src/docs/for-traders/image6.png b/src/content/docs/getting-started/for-traders/image6.png similarity index 100% rename from src/docs/for-traders/image6.png rename to src/content/docs/getting-started/for-traders/image6.png diff --git a/src/docs/for-traders/image7.png b/src/content/docs/getting-started/for-traders/image7.png similarity index 100% rename from src/docs/for-traders/image7.png rename to src/content/docs/getting-started/for-traders/image7.png diff --git a/src/docs/for-traders/image8.png b/src/content/docs/getting-started/for-traders/image8.png similarity index 100% rename from src/docs/for-traders/image8.png rename to src/content/docs/getting-started/for-traders/image8.png diff --git a/src/docs/for-traders/image9.png b/src/content/docs/getting-started/for-traders/image9.png similarity index 100% rename from src/docs/for-traders/image9.png rename to src/content/docs/getting-started/for-traders/image9.png diff --git a/src/content/docs/getting-started/for-traders/index.mdx b/src/content/docs/getting-started/for-traders/index.mdx new file mode 100644 index 000000000..fd17baec9 --- /dev/null +++ b/src/content/docs/getting-started/for-traders/index.mdx @@ -0,0 +1,119 @@ +--- +title: Getting started for traders +description: Explanations, tutorials and use cases for Santiment metrics and tools. Learn how to use our platform to better understand market behavior, network activity and stakeholder trends. +author: Santiment Team +datePublished: 2019-12-13 +dateModified: 2025-10-30 +sidebar: + label: For Traders + order: 20 +--- + +Santiment is an all-in-one market behavior and network intelligence platform for cryptocurrency traders. As a trader, our tools can help you identify, contextualize, and eventually - predict market behavior. +All Santiment tools and products serve a singular purpose - to help users understand the behavioral patterns and activities of crucial market stakeholders. + +Instead of relying on pricing data, which is notoriously prone to manipulation in crypto, our indicators and custom trading strategies leverage on-chain data, as well as custom social and development information collected and processed by Santiment. This also means that many of our metrics are entirely custom-built and unavailable anywhere else. + +You can find out more about our data feeds on [SanAPI page](https://api.santiment.net). + +## Use cases + +As a general overview, Santiment tools can enhance and complement your trading in several principal ways: + +## Spot tops and exit opportunities + +A number of our metrics have proven highly effective in signaling forming tops and impending corrections. Here’s just a few examples: + +> Using our social data, we found that extreme spikes in a coin’s social volume during a rally are often a reliable indicator of local tops. This is especially the case with mid and low-cap coins, who mostly ever attract ‘mainstream’ crypto attention during breakouts, so the increased social chatter is almost always pump-related. This period of ‘peak hype’ for a coin is an exceedingly risky time to enter into position - or not exit the one you’re already in. + +On Sanbase, you can subscribe to alerts whenever a coin you’re interested in experiences a surge in social volume, signaling a correction. + +Our [Social Trends tool](https://app.santiment.net/social-trends) lets you view any coin’s social volume over time to prove the effectiveness of this approach. + +Example: MATIC + +![](image7.png) + +Example: NEO + +![](image6.png) + +Example: Tezos + +![](image8.png) + +> Another custom Santiment metric - **Mean Dollar Invested Age** - has been a reliable top indicator for Bitcoin over its entire lifespan. + +Mean dollar invested age calculates how long each Bitcoin has stayed in its current address, and then computes the average ‘age’ of all money (expressed in dollars) used to buy Bitcoins. In other words, a rising slope on the MDIA chart indicates hodler accumulation, while dips indicate sudden movements of previously idle coins. + +Every major Bitcoin top so far was accompanied by a significant drop in mean dollar age: + +![](image2.png) + +There are dozens of examples of different Santiment metrics being able to predict tops. Check out the ‘Metrics’ tab on the Academy’s homepage for more use cases and metric tutorials. + +## Spot bottoms and entry opportunities + +While still relatively sparse compared to our top indicators, we have also started building out our repository of reliable bottom indicators and entry point signals. + +Like the above, many of these are exclusive to Santiment and are a result of rigorous backtesting and analysis by our data science team. For instance: + +> The MVRV Long/Short Divergence is a custom indicator built atop the MVRV ratio, a popular metric that calculates the average profit or loss across all coin holders. + +In short, the MVRV Long/Short Divergence calculates the difference in the MVRV ratio of longtime holders and the MVRV ratio of ‘new money’ to identify potential deviations. You can read more on the exact methodology [here](https://insights.santiment.net/read/btc's-mvrv-long%252Fshort-difference-waves-a-bullish-flag-5620). + +Historically, whenever the Long/Short Divergence line crossed 0, it indicated an end of a bear cycle for Bitcoin and jumpstarted the next bull cycle. The last time this indicator crossed 0 was on May 7th 2019 when Bitcoin was around \$5830. Within a week, it broke \$8000: + +![](image4.png) + +We have recently developed another novel bottom indicator while examining the divergences in price and on-chain activity, namely daily active addresses (DAA for short) + +You can read the full methodology [in our insight](https://insights.santiment.net/read/price---daily-addresses-divergence%3A-%0Aa-primer-on-on-chain-trading-strategies-2222). In short, at times when the asset’s price trended downwards while the amount of DAA shifted in the opposite direction (above a certain angle/threshold), this divergence has often presented very effective entry points for Bitcoin, Ethereum and other crypto assets in the past. The opposite trend also proved a potent top indicator on many occasions: + +![](image9.png) + +This strategy is currently being integrated into Sanbase - in the meantime, if you’d like access to future Price-DAA Divergence signals, you can email us at [team@santiment.net](mailto:team@santiment.net) for more information. + +## Identify and monitor volatility markers + +Not all metrics need to tell you if the price is likely to go ↑ or ↓ in order to be effective. Several of our on-chain and social indicators also serve to alert you of major behavioral shifts or trend reversals among market participants. + +For example, our Token Age Consumed metric tracks the activity of coins based on how long they’ve stayed in their current wallets. Spikes on the TAC chart indicate the movement of previously idle coins, i.e. those owned by longterm HODLers or even ICO investors. + +Depending on general market conditions and recent PA, this kind of holder behavior can mean different things, but it’s almost always an omen of growing instability. The spikes in TAC can precede explosive growth or extreme downward pressure, making it a great starting point for further analysis to decide which is more likely. + +For instance, we recently wrote about elevated activity on Bitcoin’s Token Age Consumed graph, suggesting that longtime HODLers are starting to move their coins and warning of volatility ahead: + +![](image10.png) + +At the time of writing, Bitcoin was in a week-long consolidation mode and trading in the \$8300-\$8500 range. Within days of the article, Bitcoin first dropped more than % down to \$7475, only to then grow by 28.6% in 24 hours, finally slowing down at \$9650. + +Volatility markers are used most effectively as an initial indicator of upcoming trend reversals, a starting point that you can build upon and leverage by analyzing additional metrics, signals and information. + +## Study and contextualize market activity + +Finally, Santiment tools do a lot more than inform you of - and enable you to react to - prospective exit and entry points, or help you trade market anomalies. Many of our metrics and indicators warrant deep analysis and close study if you truly want to understand crypto market behavior, network activity or crowd sentiment. + +For example, if you looked at pure on-chain transaction volumes for Ethereum over its lifsepan, you’d be forgiven if you assumed that the network suffered mass exodus since its 2018 top, and is currently a shell of its former self: + +![](image11.png) + +This is why deep network analysis is so important for successful traders. Compare the above graph with our Token Velocity chart for Ethereum, which measures how often each token is used in daily transactions: + +![](image1.png) + +Higher token velocity means that the same token is used in transactions more often. You can notice the same steep drop-off in ETH’s velocity around the start of 2018. This heightened activity (and subsequent dip) correlates strongly with the huge ETH mixer that operated between March 2017-2018, artificially inflation on-chain trx volumes by moving the same coins many times over. + +Once the mixer was liquidated, token velocity toppled back to ‘normal’ levels (as tokens weren’t mixed as much anymore), where it’s remained ever since. This lets us know that the decline in TRX volume wasn’t due to speculative, but rather technical reasons, allowing us to better understand - and valuate the network. + +Speaking of valuation metrics, Santiment offers a number of highly effective long-term indicators of project health. These will not tell you where the price is headed short-term, but it will give you a strong sense of the project’s well-being, adoption and ongoing development - all crucial long-term investment factors. + +For example, network growth (number of new addresses created on the network daily) is a strong on-chain proxy for project adoption over time. Compare the network growth of a project with strong community backing like BAT, which continues to add hundreds of new addresses to its network each day: + +![](image3.png) + +To a wasteland that is hundreds of failed altcoins, whose only real on-chain activity occurred around the ICO days, and has since fallen to oblivion: + +![](image5.png) + +Which project are you more likely to invest in? diff --git a/src/docs/santiment-introduction/context.png b/src/content/docs/getting-started/santiment-introduction/context.png similarity index 100% rename from src/docs/santiment-introduction/context.png rename to src/content/docs/getting-started/santiment-introduction/context.png diff --git a/src/docs/santiment-introduction/hollistic_approach.png b/src/content/docs/getting-started/santiment-introduction/hollistic_approach.png similarity index 100% rename from src/docs/santiment-introduction/hollistic_approach.png rename to src/content/docs/getting-started/santiment-introduction/hollistic_approach.png diff --git a/src/content/docs/getting-started/santiment-introduction/index.mdx b/src/content/docs/getting-started/santiment-introduction/index.mdx new file mode 100644 index 000000000..028667def --- /dev/null +++ b/src/content/docs/getting-started/santiment-introduction/index.mdx @@ -0,0 +1,163 @@ +--- +title: Getting started with Santiment +author: Santiment Team +datePublished: 2025-01-24 +dateModified: 2025-10-28 +sidebar: + label: Santiment Introduction + order: 10 +--- + + + +## Santiment: A Deep Dive into Crypto Market Intelligence + +Are you tired of relying on hype and influencer opinions for your crypto +trading decisions? Santiment is a powerful platform that goes beyond basic +price charts, providing you with the tools and data to understand the +underlying forces driving the market. This article summarizes the key +features and benefits of Santiment, helping you understand how it can enhance +your trading decisions. + +## The Santiment Advantage: Data-Driven Insights + +Santiment's core philosophy is to move beyond price action and delve into the +behavioral patterns of market participants. Instead of relying solely on price +data, which can be easily manipulated, Santiment focuses on: + +- **On-Chain Metrics**: Analyzing transactions on the blockchain to understand + the actual movement and usage of cryptocurrencies. +- **Social Sentiment:** Tracking discussions and sentiment across social media + to gauge the prevailing mood and trends. +- **Key Stakeholder Activity:** Monitoring the actions of large holders + ("whales" and "sharks") to identify potential market shifts. + +This comprehensive approach provides a more holistic view of the market, +allowing you to make more informed decisions. + +![noborder](./hollistic_approach.png) + +## Key Features and Tools + +[Santiment](https://app.santiment.net/) offers a range of tools and features designed to help you gain a +competitive edge: + +- [Alerts](https://app.santiment.net/alerts): Set up alerts for almost anything. +- [Charts](https://app.santiment.net/charts): Browse, create, and save layouts to visualize data how you want. +- [Ecosystem Development Activity Dashboard](https://app.santiment.net/dev-activity): Explore developer activity data for entire blockchains and projects within. +- [Explorer](https://app.santiment.net/explorer): Browse community generated insights, alerts, chart layouts, and more. +- [Historical Balance Tool](https://app.santiment.net/labs/balance?assets=): A tool for looking up the historical balance of specific wallet addresses on the Ethereum blockchain and also BTC, XRP, ADA, and LTC on their native blockchains. +- [Screener](https://app.santiment.net/screener): Filter and compare assets according to the [Metrics](/metrics/) you choose. +- [Social Trends Dashboard](https://app.santiment.net/social-trends): Set of tools to identify trending narratives, topics, and tokens for insights into market sentiment: + - [Trending Words](https://app.santiment.net/social-trends): See which keywords have the most traction. + - [Trending Stories](https://app.santiment.net/social-trends/trending-stories): See which stories are getting the most attention. + - [Trending Coins](https://app.santiment.net/social-trends/trending-coins): See which assets are have the most social interest. + - [Crypto Narratvies](https://app.santiment.net/social-trends/crypto-narratives): See narratives and their behaviors over time. +- [Watchlists](https://app.santiment.net/watchlists): Track custom or pre-set market segments. +- [Whale Watcher Dashboard](https://queries.santiment.net/dashboard/top-cex-deposits-1001?utm_source=sanbase&utm_medium=post&utm_campaign=sanbase_eth_top_cex_deposits_b_112124/&fpr=twitter): Tracks large deposits to centralized exchanges, which can signal potential sell-offs. +- [Asset Activity Matrix](https://app.santiment.net/insights/read/the-new-activity-matrix-model-for-sanbase-pro-is-a-game-changer-for-crypto-analytics-7389): All of your daily crypto analytic research on one page thanks for SanSheets and Google Sheets, PRO subscription required. + +![noborder](./scredriver.png) + +## Practical Use Cases + +### Identifying Market Tops and Bottoms + +Santiment's tools can help you identify potential market turning points: + +#### Tops + +- [Social Volume Spikes](/for-traders/#spot-tops-and-exit-opportunities): + Extreme spikes in social volume during a rally can indicate a local top, + especially for smaller-cap coins. +- [Negative Sentiment](/metrics/sentiment-metrics/#what-is-sentiment): + When the crowd is overly bullish, it can be a sign that a top is near. + Santiment's [weighted sentiment + metric](/metrics/sentiment-metrics/weighted-sentiment-metrics/#definition) + can help identify these situations. + +#### Bottoms + +- [Contrarian Approach](/for-traders/#spot-bottoms-and-entry-opportunities): + Santiment's research suggests that the market often moves in the opposite + direction of the crowd's expectations. Buying when the crowd is bearish can + be a profitable strategy. +- [Network Activity](/education-and-use-cases/understanding-short-term-market-trends/#network-activity): + Increased network activity, even during a price downturn, can indicate a + potential bottom. + +#### Monitoring Volatility + +Metrics like [Token Age Consumed](/education-and-use-cases/timing-market-volatility-with-token-age-consumed/) +alert you to potential trend reversals by tracking the movement of previously +idle coins. + +#### Understanding Real-World Utility + +[Transaction volume](/education-and-use-cases/trading-and-transaction-volume/) +captures all on-chain activity, including payments, smart contract +interactions, and wallet transfers. Comparing this with trading volume reveals +whether an asset’s activity stems from speculation or genuine use. + +#### The Importance of Context + +While Santiment's tools are powerful, it's crucial to remember that context is +key. Don't rely solely on one metric or indicator. Instead, use a combination +of data and analysis to make informed decisions. + +--- + +![noborder](./context.png) + +#### Customization and Accessibility + +Santiment offers a variety of customization options to suit your analysis +style: + +- [Chart Adjustments](/sanbase/keyboard-shortcuts/#charts): + Modify timeframes, chart types, and data layers for detailed insights. +- [SanAPI](https://api.santiment.net/) and [SanSheets](https://sheets.santiment.net/): Integrate data into Google + Sheets for advanced modeling and visualization. +- [Pre-Built Templates](https://app.santiment.net/explorer): Access + ready-made layouts for popular metrics like daily active addresses and whale + transactions. + +--- + +#### Learning and Support + +Santiment provides a wealth of educational resources to help users maximize the +platform’s potential: + +- [Insights Page](https://insights.santiment.net/): Regular updates on + trending topics, whale activity, and other key metrics. +- [Live Streams](https://www.youtube.com/@Santimentfeed): Weekly sessions + discussing market trends and answering community questions. +- [Free Trial](https://app.santiment.net/pricing): Explore all features for + two weeks without commitment. +- Book a call: If you are a B2B customer, book a call with the team. We + will help you understand how our product can help you. + +--- + +#### Final Thoughts + +Santiment serves as an indispensable information resource within the complex +and ever-changing crypto market. By merging cutting-edge tools with insightful +analytics, Santiment enables users to make informed decisions based on reliable +data rather than offering direct investment advice. Catering to both +experienced traders and newcomers alike, Santiment’s platform is expertly +crafted to support a variety of trading and investment needs. + +Embark on your exploration today and join countless others who utilize +Santiment’s comprehensive data and analytics to stay ahead in the crypto +landscape. diff --git a/src/docs/santiment-introduction/scredriver.png b/src/content/docs/getting-started/santiment-introduction/scredriver.png similarity index 100% rename from src/docs/santiment-introduction/scredriver.png rename to src/content/docs/getting-started/santiment-introduction/scredriver.png diff --git a/src/docs/education-and-use-cases/1imagemvrv3y.png b/src/content/docs/guides/education-and-use-cases/1imagemvrv3y.png similarity index 100% rename from src/docs/education-and-use-cases/1imagemvrv3y.png rename to src/content/docs/guides/education-and-use-cases/1imagemvrv3y.png diff --git a/src/docs/education-and-use-cases/age-consumed-alert/image01.png b/src/content/docs/guides/education-and-use-cases/age-consumed-alert/image01.png similarity index 100% rename from src/docs/education-and-use-cases/age-consumed-alert/image01.png rename to src/content/docs/guides/education-and-use-cases/age-consumed-alert/image01.png diff --git a/src/docs/education-and-use-cases/age-consumed-alert/image02.png b/src/content/docs/guides/education-and-use-cases/age-consumed-alert/image02.png similarity index 100% rename from src/docs/education-and-use-cases/age-consumed-alert/image02.png rename to src/content/docs/guides/education-and-use-cases/age-consumed-alert/image02.png diff --git a/src/docs/education-and-use-cases/age-consumed-alert/image03.png b/src/content/docs/guides/education-and-use-cases/age-consumed-alert/image03.png similarity index 100% rename from src/docs/education-and-use-cases/age-consumed-alert/image03.png rename to src/content/docs/guides/education-and-use-cases/age-consumed-alert/image03.png diff --git a/src/docs/education-and-use-cases/age-consumed-alert/image04.png b/src/content/docs/guides/education-and-use-cases/age-consumed-alert/image04.png similarity index 100% rename from src/docs/education-and-use-cases/age-consumed-alert/image04.png rename to src/content/docs/guides/education-and-use-cases/age-consumed-alert/image04.png diff --git a/src/docs/education-and-use-cases/age-consumed-alert/image05.png b/src/content/docs/guides/education-and-use-cases/age-consumed-alert/image05.png similarity index 100% rename from src/docs/education-and-use-cases/age-consumed-alert/image05.png rename to src/content/docs/guides/education-and-use-cases/age-consumed-alert/image05.png diff --git a/src/docs/education-and-use-cases/age-consumed-alert/image06.png b/src/content/docs/guides/education-and-use-cases/age-consumed-alert/image06.png similarity index 100% rename from src/docs/education-and-use-cases/age-consumed-alert/image06.png rename to src/content/docs/guides/education-and-use-cases/age-consumed-alert/image06.png diff --git a/src/docs/education-and-use-cases/age-consumed-alert/image07.png b/src/content/docs/guides/education-and-use-cases/age-consumed-alert/image07.png similarity index 100% rename from src/docs/education-and-use-cases/age-consumed-alert/image07.png rename to src/content/docs/guides/education-and-use-cases/age-consumed-alert/image07.png diff --git a/src/content/docs/guides/education-and-use-cases/age-consumed-alert/index.mdx b/src/content/docs/guides/education-and-use-cases/age-consumed-alert/index.mdx new file mode 100644 index 000000000..182222723 --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/age-consumed-alert/index.mdx @@ -0,0 +1,63 @@ +--- +title: Sanbase Alerts Example - Age Consumed +author: Daria Karpova +datePublished: 2022-03-22 +dateModified: 2025-08-14 +sidebar: + label: Alerts - Age Consumed + order: 10 +--- + +Sanbase Alerts are a powerful tool designed to help you focus on what's most crucial in the ever-changing crypto market. With a plethora of metrics available on Sanbase and a vast array of crypto assets in the market, keeping track of every single daily fluctuation can be challenging. However, this vigilance is vital if you aim to not just observe the market, but also stay ahead of the curve. + +Creating a tailored alert based on your unique perspective ensures that you remain in control of your crypto strategy. + +Let's explore some of the potential ways you can leverage Sanbase Alerts. + +## Setting Up an Age Consumed Alert + +The [Token Age Consumed metric](/metrics/age-consumed/#definition) monitors the activity of coins based on the duration they have remained in their current wallets. Spikes on the chart represent the movement of previously idle coins, which could be owned by long-term HODLers or even ICO investors. + +An unusual spike may not necessarily indicate an imminent change. However, in certain instances, it could serve as a short-term indicator that the market is behaving differently. Users are thus alerted to manually verify whether this is potentially harmful or relevant to their position using all available tools. + +Consider the chart below. If AAVE is an asset you are interested in, you could have been alerted on multiple occasions in the past six months. It seems that the spikes have been followed by a steady decrease in price. + +![aave-age-consumed-chart](image07.png) + +Let's explore how you could set up this alert. + +## Step 1 + +![alert-select-asset](image01.png) + +## Step 2: Selecting a Metric + +![alert-select-metric](image02.png) + +## Step 3: Selecting the Appropriate Conditions + +![alert-select-conditions1](image03.png) + +Choosing the right conditions is a crucial step in the setup process. This part can be complex, but it's essential to ensure that you don't receive excessive noise or false triggers. It's highly recommended to carefully identify which market changes are significant for YOU. + +Let's explore how to do this for AAVE Age Consumed alerts. + +### Step 3b: Understanding Percentage Increases + +While a 100% increase might initially appear significant, it's important to examine the context. Refer to the chart below. As you can see, such increases have occurred almost weekly over the past six months. This frequency suggests that a 100% increase is a regular occurrence for this data set. Therefore, you may not want to set up notifications for such a common event. + +![alert-select-conditions2](image04.png) + +### Step 3c: Adjusting the Metric + +![alert-select-conditions3](image05.png) + +By continuously fine-tuning the metric, you'll notice that the data becomes more meaningful. Only a few significant spikes occur within the given period, suggesting that something noteworthy must have happened. + +These activities are prominent and likely warrant your attention. + +## Step 4: Set Up Your Preferred Notification Method + +Once you've completed the previous steps, the final step is to set up your preferred method of receiving notifications. After this, your setup process is complete! + +![alert-final-screen](image06.png) diff --git a/src/docs/education-and-use-cases/analyze-speculative-activity-with-exchange-metrics/image1.png b/src/content/docs/guides/education-and-use-cases/analyze-speculative-activity-with-exchange-metrics/image1.png similarity index 100% rename from src/docs/education-and-use-cases/analyze-speculative-activity-with-exchange-metrics/image1.png rename to src/content/docs/guides/education-and-use-cases/analyze-speculative-activity-with-exchange-metrics/image1.png diff --git a/src/docs/education-and-use-cases/analyze-speculative-activity-with-exchange-metrics/image2.png b/src/content/docs/guides/education-and-use-cases/analyze-speculative-activity-with-exchange-metrics/image2.png similarity index 100% rename from src/docs/education-and-use-cases/analyze-speculative-activity-with-exchange-metrics/image2.png rename to src/content/docs/guides/education-and-use-cases/analyze-speculative-activity-with-exchange-metrics/image2.png diff --git a/src/content/docs/guides/education-and-use-cases/analyze-speculative-activity-with-exchange-metrics/index.mdx b/src/content/docs/guides/education-and-use-cases/analyze-speculative-activity-with-exchange-metrics/index.mdx new file mode 100644 index 000000000..289a59121 --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/analyze-speculative-activity-with-exchange-metrics/index.mdx @@ -0,0 +1,27 @@ +--- +title: Analyzing Speculative Activity with Exchange Metrics +author: Dino Ibisbegovic +datePublished: 2020-02-04 +dateModified: 2025-08-14 +sidebar: + order: 50 +--- + +Santiment offers a number of metrics that allow you to analyze the level of speculative activity on the blockchain. In this article, we will discuss two popular exchange-based indicators: + +- **Exchange Balance** +- **Daily Active Deposits** + +The **Exchange Balance** metric represents the combined values of an asset moving into and out of exchange wallets over time. Simply put, if the line is above zero for the day, it indicates that more of a specific coin has entered the exchange wallets than has left, and vice versa. + +Large movements of tokens to exchanges often precede rapid price declines, as the increasing sell pressure becomes too much for the market to absorb. For instance, consider the Exchange Balance of Bancor (BNT) shown below. You'll observe that three of the most significant spikes in Bancor's recent exchange flows occurred shortly before major price corrections: + +![](image1.png) + +Similarly, **Daily Active Deposits** measures the total number of 'deposit' addresses interacting with the observed coin. These 'deposit' addresses, owned by exchanges, are interim addresses that all coins pass through before reaching the main exchange wallets. + +Spikes in daily deposits, particularly during price increases, are a clear indication of rising speculative interest. These spikes can often signal an impending trend reversal as both the crowd and whales look to offload their holdings. An example of this can be seen in RLC's recent Daily Deposits, where spikes directly correlated with several interim and long-term peaks: + +![](image2.png) + +As demonstrated, these two metrics can serve as excellent indicators of speculative activity on the network. They can reveal significant shifts in holder behavior and signal crucial 'offloading' events. diff --git a/src/docs/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/1imagednl.png b/src/content/docs/guides/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/1imagednl.png similarity index 100% rename from src/docs/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/1imagednl.png rename to src/content/docs/guides/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/1imagednl.png diff --git a/src/docs/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/2imagesentiment.png b/src/content/docs/guides/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/2imagesentiment.png similarity index 100% rename from src/docs/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/2imagesentiment.png rename to src/content/docs/guides/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/2imagesentiment.png diff --git a/src/docs/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/3pricechart.png b/src/content/docs/guides/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/3pricechart.png similarity index 100% rename from src/docs/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/3pricechart.png rename to src/content/docs/guides/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/3pricechart.png diff --git a/src/content/docs/guides/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/index.mdx b/src/content/docs/guides/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/index.mdx new file mode 100644 index 000000000..a7dca2b48 --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/index.mdx @@ -0,0 +1,34 @@ +--- +title: 'Case Study 1: DeFi liquidations and Sentiment Ratio for Dip Buying' +author: Maksim Tkachuk +datePublished: 2025-09-01 +dateModified: 2025-09-23 +sidebar: + order: 170 +--- + +### Metrics + +`Total Liquidations`, and `Total Stablecoin Debt` combined metric for [multiple defi protocols](/metrics/lending-and-borrowing-protocols) +Social Sentiment analysis ([Social Trends tool template](https://app.santiment.net/labs/trends/explore/bull%20OR%20bullish?addedTopics=Bear%2520OR%2520bearish&slug=bitcoin&ticker=BTC)): `Social Volume`, `Social Dominance` of various words and word combinations. + +### Scenario + +Late February 2025. The market is on a comedown from the Trump inauguration euphoria and a fresh all-time-high on BTC. The prices pulled back a bit, but general sentiment was still positive. Then, on the last days of the month Trump comes out guns blazing with the tariff announcements, which send every asset into a tailspin. If you’re a dip buying connoisseur, this seems like the time to buy, but when? + +![](3pricechart.png) + +That’s where a few particular Santiment’s metrics came in handy. I personally love to use, and did use in this particular scenario, a combination of DeFi liquidations([chart template](https://app.santiment.net/charts/De_wFHJh__sCl)) and Social Sentiment analysis ([chart template with custom metric](https://app.santiment.net/labs/trends/explore/bull%20OR%20bullish?addedTopics=Bear%2520OR%2520bearish&slug=bitcoin&ticker=BTC)) to accurately gauge both what’s happening to people’s on-chain positions, and what they were expressing on social media. + +![](1imagednl.png) +![](2imagesentiment.png) + +What you want to see here is: + +1. Big spikes of liquidations on falling price means there is forced selling. +2. Stablecoin debt reducing means people are closing their leveraged positions +3. Negative sentiment readings means people are posting bearish social media content + +This combination of signals gave me the conviction to enter a position on Feb 28th, at \$84700 per BTC and then proceed to add more on March 9-10th at \$80,000 and \$79,300. Holding through the next dip early April was very scary, but the huge spike in liquidations and debt unwind confirmed that the price shouldn’t go much lower from there, as it indeed happened eventually. + +The result by the time of writing is that I accumulated BTC at very favorable prices right before the huge run to the new ATH at \$123k. diff --git a/src/docs/education-and-use-cases/case-study-nrpl-mvrv/2imagenrlplongterm.png b/src/content/docs/guides/education-and-use-cases/case-study-nrpl-mvrv/2imagenrlplongterm.png similarity index 100% rename from src/docs/education-and-use-cases/case-study-nrpl-mvrv/2imagenrlplongterm.png rename to src/content/docs/guides/education-and-use-cases/case-study-nrpl-mvrv/2imagenrlplongterm.png diff --git a/src/content/docs/guides/education-and-use-cases/case-study-nrpl-mvrv/index.mdx b/src/content/docs/guides/education-and-use-cases/case-study-nrpl-mvrv/index.mdx new file mode 100644 index 000000000..916e1510f --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/case-study-nrpl-mvrv/index.mdx @@ -0,0 +1,28 @@ +--- +title: 'Case Study 2: NRPL and 3y MVRV to Spot Macro Cycle Bottoms' +author: Maksim Tkachuk +datePublished: 2025-09-01 +dateModified: 2025-09-23 +sidebar: + order: 180 +--- + +### Metrics + +[3 year MVRV](/metrics/mvrv) & [Network Realized Profit Loss](/metrics/network-profit-loss) + +### Scenario + +For this case study I explain how I decided to enter BTC positions in the summer of 2022 with the help of two solid metrics. This metric combination works on a very long time horizon and fires a signal approximately once per macro cycle, and when it does you don’t want to miss it. + +It’s worked the last 3 cycles like clockwork, and it’s very simple - you want to buy your long-term spot BTC when you notice [3 year MVRV](/metrics/mvrv) entering -40-45% zone, combined with large negative spikes of [Network Realized Profit Loss](/metrics/network-profit-loss). + +The justification for this is straightforward. Large holders are selling their BTC at whatever price they can get, due to being overleveraged and pushed into the corner. MVRV shows that an average long-term holder is down at least 40%, and it never really went lower in the entire BTC history. Using this exact data I made a bottom call on BTC in summer 2022, you can see it with your own eyes [here, in my post on Santiment Insights](https://app.santiment.net/insights/read/wen-bottom-7075). + +![](2imagenrlplongterm.png) + +**Decision:** +Maksim decided the depressed MVRV ratio and spiking NRPL were indications of a good moment to buy BTC, so he entered into a new position in summer of 2022 between \$17,000 & \$30,000. + +**Outcome:** +BTC proceeded to go on a massive bull run. diff --git a/src/docs/education-and-use-cases/case-study-retail-profit-taking/1oneretailselling.png b/src/content/docs/guides/education-and-use-cases/case-study-retail-profit-taking/1oneretailselling.png similarity index 100% rename from src/docs/education-and-use-cases/case-study-retail-profit-taking/1oneretailselling.png rename to src/content/docs/guides/education-and-use-cases/case-study-retail-profit-taking/1oneretailselling.png diff --git a/src/docs/education-and-use-cases/case-study-retail-profit-taking/2profittaking.png b/src/content/docs/guides/education-and-use-cases/case-study-retail-profit-taking/2profittaking.png similarity index 100% rename from src/docs/education-and-use-cases/case-study-retail-profit-taking/2profittaking.png rename to src/content/docs/guides/education-and-use-cases/case-study-retail-profit-taking/2profittaking.png diff --git a/src/docs/education-and-use-cases/case-study-retail-profit-taking/3historicexample.png b/src/content/docs/guides/education-and-use-cases/case-study-retail-profit-taking/3historicexample.png similarity index 100% rename from src/docs/education-and-use-cases/case-study-retail-profit-taking/3historicexample.png rename to src/content/docs/guides/education-and-use-cases/case-study-retail-profit-taking/3historicexample.png diff --git a/src/content/docs/guides/education-and-use-cases/case-study-retail-profit-taking/index.mdx b/src/content/docs/guides/education-and-use-cases/case-study-retail-profit-taking/index.mdx new file mode 100644 index 000000000..95cd25a9e --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/case-study-retail-profit-taking/index.mdx @@ -0,0 +1,50 @@ +--- +title: 'Case Study 4: Using Retail Balances for Profit-Taking Analysis' +author: David Utrobin and Maksim Balashevich +datePublished: 2025-09-01 +dateModified: 2025-09-23 +sidebar: + order: 200 +--- + +### Metrics + +[Supply Distribution](/metrics/supply-distribution/) +[Network Realized Profit and Loss](/education-and-use-cases/understanding-long-term-market-trends-and-cycles/#network-realized-profit-and-loss) + +### Scenario + +It’s November 2024 and BTC is at \$92,300, Sebastian, having bought his first holdings a year earlier, November 2023, at \$37880 is watching the price rise accelerate after a 3 year bear market and a year of slow uptrend. Bitcoin’s previous all time high was in November of 2021 at the astonishing price of approximately \$66,000. The bottom of the previous bear cycle hit on November 09 2022, at the price of around ~15-16k. He’s thinking to himself, “Do I sell?”, “Is the market overheated?” and other such questions. So he decides to do some analysis. + +The market and its analysis can be approached in several ways, often complementary to each other. Techniques include technical analysis, sentiment analysis, and on-chain analysis. Below, Sebastien selected an approach that is both comprehensive and relatively simple to understand. + +His focus is on understanding the behavior of specific market participants: + +- What are the actions of smaller BTC holders? +- How much profit are these holders, who acquired BTC at lower prices, currently realizing? + +By examining these metrics, the underlying market sentiment can be determined. Specifically, the behavior of smaller holders will reveal if retail investors are overly greedy or overly fearful. Analyzing profit-taking patterns will help identify whether we are in a state of too much greed, which typically indicates a market top. This is seen when profit-taking declines, since market participants irrationally hope the market will go higher. + +As of November 13th 2024, these conditions haven't fully materialized. + +**Retail Balances & Profit Taking Analysis:** + +![](1oneretailselling.png) + +The chart indicates that retail holders began **decreasing** their balances around October 15th, coinciding with the start of BTC's real rally. It looks like retail is selling into the rally. It also looks like it’s weighted towards fear more than greed because the amount of selling would be less if participants were getting greedy. Given this, it is unlikely that this is a macro cycle top. Though it may become a short term top. + +![](2profittaking.png) + +The price is going up on BTC while the the profit-taking level appears healthy, with increases correlating to each BTC price jump. At a market top, we expect to see a pattern similar to March 2024 (pictured below) when a probable short term peak is indicated due to the spike in Network Realized Profit and Loss(NRPL). NRPL measures the collective profit or loss of coins that change addresses daily. Big negative spikes are usually the best long-term buy signals. Big positive spikes suggest that the most active market participants are in big profit. In this case the NRPL is spiking and is doing so for multiple consecutive days, giving us a signal that it could be a short term top. + +![](3historicexample.png) + +**Decision:** +Sell some of the position, with the goal of reentering within the next 4-16 weeks at a lower price. + +**Outcome:** +This moment was followed by a 4 month minor downtrend which contained multiple opportunities to buy back in under \$90k. + +We have compiled a [chart layout](https://app.santiment.net/charts/btc-major-metrics-1410) that includes these two metrics along with several others. + +In conclusion, monitoring these two subjects—retail activity and profit-taking—is crucial. Historically, these have been key indicators of retail greed or fear of missing out (FOMO), which often precede market tops. Stay vigilant for these signs as they may hint at the next potential turning point in the market. diff --git a/src/docs/education-and-use-cases/case-study-social-volume/Inkedchrome_2025-08-14_14-54-10.jpg b/src/content/docs/guides/education-and-use-cases/case-study-social-volume/Inkedchrome_2025-08-14_14-54-10.jpg similarity index 100% rename from src/docs/education-and-use-cases/case-study-social-volume/Inkedchrome_2025-08-14_14-54-10.jpg rename to src/content/docs/guides/education-and-use-cases/case-study-social-volume/Inkedchrome_2025-08-14_14-54-10.jpg diff --git a/src/content/docs/guides/education-and-use-cases/case-study-social-volume/index.mdx b/src/content/docs/guides/education-and-use-cases/case-study-social-volume/index.mdx new file mode 100644 index 000000000..ceeb18be1 --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/case-study-social-volume/index.mdx @@ -0,0 +1,24 @@ +--- +title: 'Case Study 3: Social Volume Indicates a Top' +author: David Utrobin +datePublished: 2025-09-01 +dateModified: 2025-09-23 +sidebar: + order: 190 +--- + +### Metrics + +[Social Volume metric](/metrics/social-volume/#social-volume) + [Weighted Sentiment](/metrics/sentiment-metrics/weighted-sentiment-metrics/) + +### Scenario + +On May 21st, 2025, Mark, a part-time crypto trader, was monitoring his positions. While using [a Screener](https://app.santiment.net/screener) to look at similar metrics across all his assets he noticed the [Social Volume metric](/metrics/social-volume/#social-volume), which detects genuine asset mentions across several social media platforms, spike for “Avalanche” (AVAX)(1). The metric showed a ~300% increase in discussions on Telegram and Twitter that coincided with a recent upward movement in the price. Curious, he cross-referenced this with the [Weighted Sentiment metric](/metrics/sentiment-metrics/weighted-sentiment-metrics/#definition), revealing that most of the chatter around AVAX was bullish. + +![1](Inkedchrome_2025-08-14_14-54-10.jpg) + +**Decision:** +Mark decided this was indicating a short term top so he sold his position of 1000 AVAX tokens at $25.21 for $25,210 USD. + +**Outcome:** +The token crashed over the next month by -41%, bottoming in late June 2025. Mark stayed on the lookout for a moment to reenter the position because of his long term outlook on the project, mainly looking for bearish days with lower social volume since prices often rebounded in those scenarios. diff --git a/src/docs/education-and-use-cases/how-to-spot-tops-with-price-network-activity-divergences/image1.png b/src/content/docs/guides/education-and-use-cases/how-to-spot-tops-with-price-network-activity-divergences/image1.png similarity index 100% rename from src/docs/education-and-use-cases/how-to-spot-tops-with-price-network-activity-divergences/image1.png rename to src/content/docs/guides/education-and-use-cases/how-to-spot-tops-with-price-network-activity-divergences/image1.png diff --git a/src/docs/education-and-use-cases/how-to-spot-tops-with-price-network-activity-divergences/image2.png b/src/content/docs/guides/education-and-use-cases/how-to-spot-tops-with-price-network-activity-divergences/image2.png similarity index 100% rename from src/docs/education-and-use-cases/how-to-spot-tops-with-price-network-activity-divergences/image2.png rename to src/content/docs/guides/education-and-use-cases/how-to-spot-tops-with-price-network-activity-divergences/image2.png diff --git a/src/content/docs/guides/education-and-use-cases/how-to-spot-tops-with-price-network-activity-divergences/index.mdx b/src/content/docs/guides/education-and-use-cases/how-to-spot-tops-with-price-network-activity-divergences/index.mdx new file mode 100644 index 000000000..36e38599a --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/how-to-spot-tops-with-price-network-activity-divergences/index.mdx @@ -0,0 +1,33 @@ +--- +title: Spot tops with Price - Network Activity divergences +author: Dino Ibisbegovic +datePublished: 2020-02-04 +dateModified: 2025-08-14 +sidebar: + order: 60 +--- + +Two key metrics that effectively highlight network activity trends are: + +1. **Daily Active Addresses (DAA)** - This represents the total number of unique network addresses involved in transactions each day. +2. **Network Growth** - This refers to the number of new addresses created on the network daily. + +These indicators can be particularly useful in identifying market tops. If there is a spike in these metrics during a price increase - indicating a rise in speculative interest - but they begin to decline shortly after, this often signals an impending market correction. + +Consider the case of ENJ, which experienced a significant spike in active addresses at the beginning of December, coinciding with a price rally: + +![enj-active-addresses-and-network-growth](image1.png) + +As soon as the on-chain activity returned to its pre-rally levels, ENJ was unable to maintain the upward trend and began a correction. + +### Using On-chain Activity as a Long-term Health Indicator + +![maker-active-addresses-and-network-growth](image2.png) + +Before entering any trade, it's crucial to conduct thorough due diligence. Both Daily Active Addresses (DAA) and Network Growth serve as excellent indicators of a project's adoption over time. Here are some questions you might consider: + +- Is the network consistently adding new addresses daily, or has the growth stagnated? +- Does network activity persist even when the price is down? +- How engaged is the community during significant governance events or on-chain voting sessions? + +By analyzing a project's long-term network activity, you can answer many vital questions about its health. While this analysis won't predict when to buy a specific token, it can certainly help determine if purchasing it is a wise decision in the first place. diff --git a/src/content/docs/guides/education-and-use-cases/index.mdx b/src/content/docs/guides/education-and-use-cases/index.mdx new file mode 100644 index 000000000..68bfd90a3 --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/index.mdx @@ -0,0 +1,57 @@ +--- +title: Education and Use Cases +author: Dino Ibisbegovic +datePublished: 2020-02-04 +dateModified: 2025-12-27 +sidebar: + order: 10 +--- + +import Resource from '$components/markdown/Resource.svelte' + + + +- [Alerts - Age Consumed Example](/education-and-use-cases/age-consumed-alert/) +- [Alerts - Social Trends/Trending Words Example](/education-and-use-cases/social-trend-alerts/) +- [Alerts - Whale Activity Example](/education-and-use-cases/whale-activity-alert/) + + + + + +- [Case Study 1: DeFi liquidations and Sentiment Ratio for Dip Buying](/education-and-use-cases/case-study-liquidations-and-sentiment-ratio) +- [Case Study 2: NRPL and 3y MVRV to Spot Macro Cycle Bottoms](/education-and-use-cases/case-study-nrpl-mvrv) +- [Case Study 3: Social Volume Indicates a Top](/education-and-use-cases/case-study-social-volume) +- [Case Study 4: Using Retail Balances for Profit-Taking Analysis](/education-and-use-cases/case-study-retail-profit-taking) +- [Timing Market Volatility with Token Age Consumed](/education-and-use-cases/timing-market-volatility-with-token-age-consumed/) +- [Price vs DAA Divergence; An On-Chain Trading Strategy Guide](/education-and-use-cases/price-to-daily-addresses-divergence-guide/) +- [Trading and Transaction Volume](/education-and-use-cases/trading-and-transaction-volume) +- [Understanding Long-Term Market Trends and Cycles](/education-and-use-cases/understanding-long-term-market-trends-and-cycles) +- [Understanding Short-Term Market Trends](/education-and-use-cases/understanding-short-term-market-trends) +- [Understanding Crypto Market Cycles Through Lending Metrics](/education-and-use-cases/understanding-crypto-market-cycles-through-lending-metrics) +- [Understanding Market Expectations Through Historical Crypto Trends](/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends) +- [Whale monitoring to predict Crypto's next moves](/education-and-use-cases/whale-monitoring-to-predict-market-moves/) + + + + + +- [Santiment Pro Report Samples](/education-and-use-cases/santiment-pro-reports-samples/) + + + + + +- [Santiment Hands-On Tutorial](https://github.com/santiment/san-sdk/blob/master/ICDM_2019/ICDM.ipynb) +- [Correlation Analysis Between Bitcoin and Gold](https://github.com/santiment/san-sdk/blob/master/correlation-analysis/BTC%20vs%20GOLD.ipynb) +- [Backtesting Trading Based on GitHub Data](https://github.com/santiment/san-sdk/blob/master/example-backtesting-with-sanpy/Backtest_GitHub_Activity_Portfolio.ipynb) +- [Stablecoin Comparisons](https://github.com/santiment/san-sdk/blob/master/example-stablecoin-analysis/stablecoin%20comparison.ipynb) +- [How to Spot Tops with Price-Network Activity Divergences](/education-and-use-cases/how-to-spot-tops-with-price-network-activity-divergences/) + + + + + +- [SanR - a Playground for Crypto Trading](/education-and-use-cases/sanr-a-playground-for-trading/) + + diff --git a/src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/01.png b/src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/01.png similarity index 100% rename from src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/01.png rename to src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/01.png diff --git a/src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/02.png b/src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/02.png similarity index 100% rename from src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/02.png rename to src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/02.png diff --git a/src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/03.png b/src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/03.png similarity index 100% rename from src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/03.png rename to src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/03.png diff --git a/src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/04.png b/src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/04.png similarity index 100% rename from src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/04.png rename to src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/04.png diff --git a/src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/05.png b/src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/05.png similarity index 100% rename from src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/05.png rename to src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/05.png diff --git a/src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/06.png b/src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/06.png similarity index 100% rename from src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/06.png rename to src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/06.png diff --git a/src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/07.png b/src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/07.png similarity index 100% rename from src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/07.png rename to src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/07.png diff --git a/src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/08.png b/src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/08.png similarity index 100% rename from src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/08.png rename to src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/08.png diff --git a/src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/index.mdx b/src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/index.mdx new file mode 100644 index 000000000..3e5dfecaf --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/price-to-daily-addresses-divergence-guide/index.mdx @@ -0,0 +1,107 @@ +--- +title: Price vs DAA Divergence; An On-Chain Trading Strategy Guide +author: Jan S +datePublished: 2019-09-17 +dateModified: 2025-08-14 +sidebar: + order: 70 +--- + +Of all the metrics that can be generated from on-chain data, **the daily active addresses** - DAA for short - is probably most well known. + +For the uninitiated, DAA is simply the **number of unique crypto addresses** interacting with (sending or receiving) a particular coin on a daily basis. As such, DAA is one of the best on-chain proxies for measuring the amount of users and the overall level of network activity, making it an extremely valuable indicator in cryptocurrency evaluation. + +The [network effect](https://en.wikipedia.org/wiki/Network_effect) posits that the number of active users directly influences the value of a network. In crypto, we can observe this causality by referring to a coin's on-chain activity. For example, looking at Bitcoin's DAA over time, we can clearly see that the amount of daily active users seems to correlate strongly with the asset's price action: + +![](01.png) + +That said, it's not as easy to explain where this relationship actually comes from, or exactly what influences what. Higher prices _could_ attract more people to invest in Bitcoin and in turn lead to growth in active addresses. On the other hand, an increase in daily active addresses _could_ lead investors and their models to start valuing Bitcoin higher and buy more. In other words, the 'chicken and the egg' problem is alive and well in crypto. + +As always, the truth lies probably somewhere in between. In fact, when testing this via the [Granger Causality test](https://en.wikipedia.org/wiki/Granger_causality), we couldn't find that either metric (DAA or price) clearly moves before the other. + +However, when looking directly at the graph, we can see the patterns clearly emerge. For example, throughout Q1 of 2019, the DAA were steadily growing way before the market started to recover. Same holds true for July 2019, when a decline in DAA preceded a decline in price. + +So could there be some forecasting potential in this metric? + +## Creating a Price-DAA Divergence Signal + +To test our hypothesis, we defined and back-tested a signal that would activate whenever the trends in daily addresses and the price of BTC diverged significantly. + +In simpler terms, we calculated the log returns over a rolling window of X days and set a threshold. This threshold would trigger a signal whenever the difference between the two metrics (DAA and price) exceeded it. + +So, how did our signal perform historically? As an astute reader may have noticed, this method has two tuning parameters: + +1. The number of days we look back to calculate the trend. +2. The `divergence threshold`, which defines how much of a difference in DAA-price trends triggers a signal. + +Currently, there's no theory to suggest an optimal set of parameters. Therefore, we tried to select variables that made sense and generated a reasonable number of signals. + +For our initial test, we selected a window of three weeks (21 days) and a threshold of 0.3: + +![](02.png) + +Most of the resulting signals seem to be positioned at rather interesting points in Bitcoin's price. However, this setup triggered too many signals, making it too noisy. + +To resolve this, we increased our threshold, meaning we needed a stronger divergence in trends between Bitcoin's daily addresses and its price for the signal to trigger. + +After testing various setups to see which ones generated a reasonable number of signals, we eventually settled on a divergence threshold of 0.5. Here's the output: + +![](03.png) + +The resulting signals look very interesting - and **much** clearer. Often, the triggers seem to be positioned right at the points of short-term and long-term trend reversals. Quite exciting! + +## Defining Entry/Exit Points + +While we have developed an effective **"something's about to change"** indicator, it does not provide a clear BUY or SELL signal. To address this, we will differentiate between instances when: + +a) DAA trends increase ↑ while the price trends decrease ↓ + +b) DAA trends decrease ↓ while the price trends increase ↑ + +In other words, we are distinguishing between cases where Bitcoin's DAA rises **more than** the price and cases where Bitcoin's DAA falls **more than** the price. + +The following image shows these signals, marked based on whether DAA increases or decreases compared to the price: + +![](04.png) + +Success! The 'price grew more than DAA' signals appear to be effective buy indicators (September 2017, February 2018, August 2018 etc). Similarly, the 'price declined more than DAA' signals could serve as strong exit indicators (June 2017, December 2017, July 2018 etc). + +This approach seems to form the basis of a tradeable strategy. Let's backtest it to see how our Bitcoin portfolio would have performed if we only BOUGHT and SOLD based on these historical signals: + +![](05.png) + +Our returns with the new Price-DAA Divergence strategy (in blue) would be more than 2x compared to simply HOLDing Bitcoin (in red) over the same time frame. + +However, it's important to note that these signals should not be traded exclusively (buy **only** when BUY-signal and hold **only** till **SELL**-signal). There is no guarantee that these signals will detect **ALL** major trend changes. + +We selected the 0.5 Divergence Threshold relatively arbitrarily. We could have set the threshold higher, which would have resulted in fewer trading signals. + +For instance, if the solitary BUY signal in September 2017 was not present, we would have COMPLETELY missed the 2017 bull market. Therefore, while these signals are accurate in our opinion, they should always be combined with additional signals and complementary strategies for optimal results. + +## Branching out + +Until now, we've only applied our price-DAA divergence strategy to Bitcoin. So, how does this model perform when applied to other major cryptocurrencies? + +Let's test it on Ethereum, using the same parameters as before: a 3-week window and a 0.5 divergence threshold. Here's what we get: + +![](06.png) + +The results show a robust set of BUY and SELL signals. BUY signals were primarily triggered during short-term bottoms (July 2017, March 2018, October 2019, etc.), while SELL signals seem to align well with excellent selling opportunities (June 2017, January 2018, January 2019, June 2019, etc.). + +However, it's important to note that these signals should not be followed exclusively. A closer look reveals that relying solely on our price-DAA signals would have caused us to miss most of the 2017 ETH bull run. + +In other words, different cryptocurrencies will require different parameters to generate optimal results. For instance, the signals for Maker (MKR) appear similarly effective when we set a price-DAA threshold of **0.9**: + +![](07.png) + +To demonstrate this, let's look at a backtest of this set of BUY/SELL signals: + +![](08.png) + +In the observed time frame (2018-present), MKR HODLers lost approximately 35% of their initial investment. In contrast, our strategy yielded a **130% profit**. + +## Conclusion + +While the aforementioned strategy demonstrates potential, it should not be followed blindly. As observed, relying solely on this model could have caused you to miss the entire 2017 bull run. No strategy is foolproof, hence it is crucial to **always** use it in combination with other metrics, signals, and indicators. + +This brings to mind that Sanbase offers over 120 different on-chain, social, and development indicators. If you're seeking additional tools to complement the Price-DAA strategy, these platforms would be an excellent starting point. diff --git a/src/content/docs/guides/education-and-use-cases/sanr-a-playground-for-trading/index.mdx b/src/content/docs/guides/education-and-use-cases/sanr-a-playground-for-trading/index.mdx new file mode 100644 index 000000000..711d021b4 --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/sanr-a-playground-for-trading/index.mdx @@ -0,0 +1,65 @@ +--- +title: SanR - a Playground for Crypto Trading +author: Santiment Team +datePublished: 2024-07-19 +dateModified: 2025-08-19 +sidebar: + label: 'SanR: a Playground for Trading' + order: 210 +--- + +## SanR: Practice Makes Perfect + +Picture this; you're standing at the edge of a vast, shimmering ocean, ready to +dive into it, but you freeze. It's intimidating, the deep water with mysteries lurking beneath. + +The exciting world of trading is like that for most people. It's a thrilling adventure, but let's be honest, it's scary. + +That's where SanR comes in. + +Think of it as your testing ground, your playground, ready to help you +navigate the depths of the crypto market. + +> The SanR app lets you share crypto trading signals, watch the signals of +> others, practice your trading skills in a safe environment with no risk of losing +> money 💸 and enables you to earn SAN token rewards! + +## Trader DNA 🧬 + +As Maksim Balashevich, the mastermind behind Santiment, puts it, "SanR is not +widely known, though the main reason to use it is to test, +examine, and develop your 'trader DNA' and then build strategies while recognizing your emotions but not necessarily acting on them." In other words, SanR is like a mirror that +reflects your trading style, helping you understand your emotional triggers and +how to make decisions based on insights rather than impulses. + +But here's the best part – you're not alone on this journey! SanR is like a +big, friendly community of traders, all learning and growing together. It's a +place where you can share your experiences, learn from others, and celebrate +your successes. As Maksim says, "With SanR it's now much easier as I do both +now; I post predictions the moment I arrive at one, then I do the trade a bit later." + +Think of SanR as your personal trading diary, where every prediction is like a +snapshot of your journey. As you look back on your trades, you'll start to see +patterns emerge – maybe you have a knack for spotting trends, or perhaps you +tend to get a bit too excited when the market's on a roll. Whatever your +"trader DNA" may be, SanR helps you understand and embrace it. + +## Risk-free Trading Practice + +So, ready to dive in? With SanR by your side, you'll be navigating the crypto +market like a pro in no time. It's not about being perfect – it's about +learning, growing, and having fun along the way. + + + +Now try for yourself! +Use the [Sanr.app](http://sanr.app) or read more about it in the [documentation site](https://docs.santiment.network/) diff --git a/src/content/docs/guides/education-and-use-cases/santiment-pro-reports-samples/index.mdx b/src/content/docs/guides/education-and-use-cases/santiment-pro-reports-samples/index.mdx new file mode 100644 index 000000000..4f267fbd7 --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/santiment-pro-reports-samples/index.mdx @@ -0,0 +1,33 @@ +--- +title: Santiment Pro Report Samples +author: Santiment Team +datePublished: 2020-11-30 +dateModified: 2023-07-07 +sidebar: + label: Santiment PRO Report Samples + order: 80 +--- + +### Exploring Recent BTC Fundamentals and the Push to $14k + +_As the U.S. election approaches and the third wave of Covid-19 impacts the globe, we've decided to take a deep look at the recent activities of key Bitcoin stakeholders. We aim to assess the leading coin's on-chain and social potential following the $13k surge._ + +[Weekly Pro Report 2020-10-30.pdf](https://production-sanbase-images.s3.amazonaws.com/uploads/7cfcd1dc75a6e37a197961f19a042b95225b167828cab4857b70ddd3e7906281_1604134004866_Bitcoin%20Weekly%20Pro%20Report%20.pdf) + +### Trading Crypto in 2020: Do Token Fundamentals Really Matter? + +In this week's Pro report, we put our backtesting skills to the test to answer a simple yet crucial question: Does a portfolio of 'fundamentally sound' projects outperform the market benchmark (holding BTC)? + +[Weekly Pro Report 2020-10-16.pdf](https://production-sanbase-images.s3.amazonaws.com/uploads/5d555b3f0236814ca7d1bd7c744aed2ceca4db8aeec86e813f3fb07cd6f9dd4b_1602866186890_Weekly_report_2020-10-16.pdf) + +### Charting the Unicorn: An Analysis of $UNI's On-Chain Activity, Sell-Side Pressure, and Short-Term Price Potential + +_In just a week, Uniswap's new token, UNI, has provided a wealth of on-chain and social data for analysis. This data allows us to speculate and make informed predictions about the coin's short-term potential. In this week's Pro report, we delve into UNI's fundamentals during its initial 10 days. We also examine the on-chain activity that led to its price correction and discuss the potential future direction of this latest DeFi phenomenon._ + +[Weekly Pro Report 2020-09-25.pdf](https://production-sanbase-images.s3.amazonaws.com/uploads/22981475ffba0533410117afad88377a1d20aea58574bf0e2313a7a72420b2f6_1601049941906_UNI_report.pdf) + +### ETH vs ERC-20: A Tale Of Two Market Caps + +While the market capitalization of Ether has been extensively analyzed, the market cap of ERC-20 tokens often goes unnoticed. Until now, there has been a lack of comprehensive research and focus on the ERC-20 market as a whole. In this Santiment report, we take a closer look at the size of the ERC-20 market, its independent evolution over time, and its potential correlation with the parent market cap of Ethereum. + +[Weekly Pro Report 2020-09-04.pdf](https://production-sanbase-images.s3.amazonaws.com/uploads/3e75f3b0d37899c7f8266da53d24d3ee2e644f68d478efbc190b4ee6ce9f03b9_1599222238461_Weekly_Sanbase_PRO_market_report_3.pdf) diff --git a/src/docs/education-and-use-cases/social-trend-alerts/image1.png b/src/content/docs/guides/education-and-use-cases/social-trend-alerts/image1.png similarity index 100% rename from src/docs/education-and-use-cases/social-trend-alerts/image1.png rename to src/content/docs/guides/education-and-use-cases/social-trend-alerts/image1.png diff --git a/src/docs/education-and-use-cases/social-trend-alerts/image10.png b/src/content/docs/guides/education-and-use-cases/social-trend-alerts/image10.png similarity index 100% rename from src/docs/education-and-use-cases/social-trend-alerts/image10.png rename to src/content/docs/guides/education-and-use-cases/social-trend-alerts/image10.png diff --git a/src/docs/education-and-use-cases/social-trend-alerts/image11.png b/src/content/docs/guides/education-and-use-cases/social-trend-alerts/image11.png similarity index 100% rename from src/docs/education-and-use-cases/social-trend-alerts/image11.png rename to src/content/docs/guides/education-and-use-cases/social-trend-alerts/image11.png diff --git a/src/docs/education-and-use-cases/social-trend-alerts/image2.png b/src/content/docs/guides/education-and-use-cases/social-trend-alerts/image2.png similarity index 100% rename from src/docs/education-and-use-cases/social-trend-alerts/image2.png rename to src/content/docs/guides/education-and-use-cases/social-trend-alerts/image2.png diff --git a/src/docs/education-and-use-cases/social-trend-alerts/image3.png b/src/content/docs/guides/education-and-use-cases/social-trend-alerts/image3.png similarity index 100% rename from src/docs/education-and-use-cases/social-trend-alerts/image3.png rename to src/content/docs/guides/education-and-use-cases/social-trend-alerts/image3.png diff --git a/src/docs/education-and-use-cases/social-trend-alerts/image4.png b/src/content/docs/guides/education-and-use-cases/social-trend-alerts/image4.png similarity index 100% rename from src/docs/education-and-use-cases/social-trend-alerts/image4.png rename to src/content/docs/guides/education-and-use-cases/social-trend-alerts/image4.png diff --git a/src/docs/education-and-use-cases/social-trend-alerts/image5.png b/src/content/docs/guides/education-and-use-cases/social-trend-alerts/image5.png similarity index 100% rename from src/docs/education-and-use-cases/social-trend-alerts/image5.png rename to src/content/docs/guides/education-and-use-cases/social-trend-alerts/image5.png diff --git a/src/docs/education-and-use-cases/social-trend-alerts/image6.png b/src/content/docs/guides/education-and-use-cases/social-trend-alerts/image6.png similarity index 100% rename from src/docs/education-and-use-cases/social-trend-alerts/image6.png rename to src/content/docs/guides/education-and-use-cases/social-trend-alerts/image6.png diff --git a/src/docs/education-and-use-cases/social-trend-alerts/image7.png b/src/content/docs/guides/education-and-use-cases/social-trend-alerts/image7.png similarity index 100% rename from src/docs/education-and-use-cases/social-trend-alerts/image7.png rename to src/content/docs/guides/education-and-use-cases/social-trend-alerts/image7.png diff --git a/src/docs/education-and-use-cases/social-trend-alerts/image8.png b/src/content/docs/guides/education-and-use-cases/social-trend-alerts/image8.png similarity index 100% rename from src/docs/education-and-use-cases/social-trend-alerts/image8.png rename to src/content/docs/guides/education-and-use-cases/social-trend-alerts/image8.png diff --git a/src/docs/education-and-use-cases/social-trend-alerts/image9.png b/src/content/docs/guides/education-and-use-cases/social-trend-alerts/image9.png similarity index 100% rename from src/docs/education-and-use-cases/social-trend-alerts/image9.png rename to src/content/docs/guides/education-and-use-cases/social-trend-alerts/image9.png diff --git a/src/content/docs/guides/education-and-use-cases/social-trend-alerts/index.mdx b/src/content/docs/guides/education-and-use-cases/social-trend-alerts/index.mdx new file mode 100644 index 000000000..1f91e3cd6 --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/social-trend-alerts/index.mdx @@ -0,0 +1,97 @@ +--- +title: Sanbase Alerts Example - Social Trends +author: Daria Karpova +datePublished: 2022-04-04 +dateModified: 2025-08-14 +sidebar: + label: Alerts - Social Trends/Trending Words + order: 20 +--- + +Santiment stands out in the industry as the only tool that has developed its unique approach to analyzing the cryptocurrency market. Social dynamics can serve as a powerful indicator of impending market volatility. + +While you may already be following certain Twitter accounts or receiving updates from Telegram chats, there's a challenge: It's impossible to read every channel, which means your attention is confined to a select number of news sources. + +As the saying goes, "where there's smoke, there's fire." If you're monitoring multiple coins, you might have noticed that some generate more social media buzz than others. Occasionally, an asset garners excessive attention, as was the case with Dogecoin. + +Consider the chart below. It clearly shows a significant spike (highlighted in blue) in social volume towards the end of November 2021. + +![social-volume-chart](image1.png) + +Even without advanced analytical skills, it's easy to see that the price, which was already falling, plummeted further following the social media spike. + +We always emphasize that no single metric can predict such drastic changes. However, it's beneficial to monitor all of them to identify which ones resonate with you the most. + +Noticing this spike in November 2021 could have served as a potent informational signal about Dogecoin. + +## Setting Up Alerts for Social Trends + +Let's explore how you can set up these alerts on your own. We recommend beginning with the most basic social trends alert. This alert will only be activated if your specified keyword begins to rank among the top 10 trending social terms. + +## Step 1: Selecting Social Trends Alert + +From the Alerts menu, select the Social Trends alert. Next, navigate to the Trending Assets tab. Here, you can choose the coins you wish to monitor. Alternatively, you can use your pre-existing watchlist. + +![alert-select-asset](image2.png) + +## Step 2: Choose Your Preferred Notification Method and Frequency + +Specify your preferred method and frequency for receiving notifications when the alert is triggered. + +![alert-select-notifications](image3.png) + +## Step 3: Assign a Name to Your Alert + +Assign a name to your alert. If you don't, a name will be automatically generated based on the terms you've selected to monitor. + +![alert-select-title](image4.png) + +Congratulations! You've successfully created a robust alert. Reaching the TOP 10 is quite an achievement, so if you receive a notification, it's definitely worth investigating. + +--- + +## Setting Up a Social Volume Alert + +Another scenario where a social alert can be beneficial involves obtaining more sensitive data. This is similar to the Dogecoin example provided at the beginning of this article. + +There might be instances where a significant spike in Social Media Volume for a specific coin may not be reflected in the overall Social Trends. In such cases, you could potentially miss an important signal. + +To help you understand better, let's use Dogecoin as an example to walk you through the process of setting up a Social Volume alert. + +## Step 1.1: Navigate to the "Assets" Tile + +![alert-select-type](image5.png) + +## Step 1.2: Select Dogecoin from the List + +![alert-select-asset-2](image6.png) + +## Step 1.3: Selecting the Metric + +In the "Choose Metric" section, navigate to the "Social" category and select "Social Volume". + +![alert-select-metric](image7.png) + +Upon selection, you will see a chart with red dots. Each dot represents an instance when the alert would have been triggered in the past three months. There are 90 such instances, which can be considered as noise. + +![alert-select-conditions](image8.png) + +## Step 1.4: Adjusting Your Alert + +To modify your alert, navigate to the dropdown menu located under the 'Condition' section and select the "Moving up %" option. Experiment with the numerical field on the right to determine the percentage increase that offers the most value. + +In this specific instance, we've set it to a 113% increase compared to the previous day. This setting would have triggered our alert only five times in the past three months. As you can see from the chart, the other bars appear to be more or less equal. + +![alert-select-conditions-2](image9.png) + +## Step 1.5: Choose Your Preferred Notification Methods and Frequency + +![alert-select-notifications-2](image10.png) + +## Step 1.6: Confirm and Create Your Alert + +Ensure that you are satisfied with the name of your Alert. Once you've confirmed, click on 'Create Alert'. + +![alert-select-title-2](image11.png) + +Congratulations, you have successfully created your Alert! diff --git a/src/docs/education-and-use-cases/timing-market-volatility-with-token-age-consumed/image1.png b/src/content/docs/guides/education-and-use-cases/timing-market-volatility-with-token-age-consumed/image1.png similarity index 100% rename from src/docs/education-and-use-cases/timing-market-volatility-with-token-age-consumed/image1.png rename to src/content/docs/guides/education-and-use-cases/timing-market-volatility-with-token-age-consumed/image1.png diff --git a/src/docs/education-and-use-cases/timing-market-volatility-with-token-age-consumed/image2.png b/src/content/docs/guides/education-and-use-cases/timing-market-volatility-with-token-age-consumed/image2.png similarity index 100% rename from src/docs/education-and-use-cases/timing-market-volatility-with-token-age-consumed/image2.png rename to src/content/docs/guides/education-and-use-cases/timing-market-volatility-with-token-age-consumed/image2.png diff --git a/src/docs/education-and-use-cases/timing-market-volatility-with-token-age-consumed/image3.png b/src/content/docs/guides/education-and-use-cases/timing-market-volatility-with-token-age-consumed/image3.png similarity index 100% rename from src/docs/education-and-use-cases/timing-market-volatility-with-token-age-consumed/image3.png rename to src/content/docs/guides/education-and-use-cases/timing-market-volatility-with-token-age-consumed/image3.png diff --git a/src/content/docs/guides/education-and-use-cases/timing-market-volatility-with-token-age-consumed/index.mdx b/src/content/docs/guides/education-and-use-cases/timing-market-volatility-with-token-age-consumed/index.mdx new file mode 100644 index 000000000..ba5048762 --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/timing-market-volatility-with-token-age-consumed/index.mdx @@ -0,0 +1,28 @@ +--- +title: Timing Market Volatility with Token Age Consumed +author: Dino Ibisbegovic +datePublished: 2020-02-04 +dateModified: 2025-08-14 +sidebar: + order: 40 +--- + +[**Age Consumed**](/metrics/age-consumed) or Token Age Consumed(TAC) is a reliable on-chain indicator that signals changes in market conditions. This metric assigns higher value to coins that have been held for a longer duration, compared to those recently acquired. + +Spikes in the TAC chart indicate the movement of tokens that have been dormant for a considerable period. The underlying assumption is that long-term holders and experienced traders usually make well-informed decisions. Therefore, it can be very beneficial to monitor when these parties begin to transfer their holdings. + +Such events can introduce volatility to the token’s short-term price action. The direction of this volatility, whether upward or downward, is unique to each situation. However, a spike in TAC is always a prompt to pay closer attention. + +Consider Bitcoin's TAC chart for the past six months; Almost every significant peak either signaled an impending correction (red), or occurred at the lowest point of the rally (green): + +![](image3.png) + +The same pattern can be observed with an altcoin. For instance, all pictured spikes in Bancor's TAC either correlated with increasing downward pressure (red) or signaled a rebound (green): + +![](image2.png) + +For further illustration, here's Aragon's TAC chart, which aligns closely with major changes in price action: + +![](image1.png) + +From a fundamental standpoint, spikes in Token Age Consumed are among the most reliable indicators of volatility in the crypto market. When a substantial amount of 'old money' starts to move, there's almost always a significant reason behind it. Being aware of these movements as they occur is crucial. diff --git a/src/docs/education-and-use-cases/trading-and-transaction-volume/bearish_bullish.png b/src/content/docs/guides/education-and-use-cases/trading-and-transaction-volume/bearish_bullish.png similarity index 100% rename from src/docs/education-and-use-cases/trading-and-transaction-volume/bearish_bullish.png rename to src/content/docs/guides/education-and-use-cases/trading-and-transaction-volume/bearish_bullish.png diff --git a/src/docs/education-and-use-cases/trading-and-transaction-volume/bearish_bullish_two_charts.png b/src/content/docs/guides/education-and-use-cases/trading-and-transaction-volume/bearish_bullish_two_charts.png similarity index 100% rename from src/docs/education-and-use-cases/trading-and-transaction-volume/bearish_bullish_two_charts.png rename to src/content/docs/guides/education-and-use-cases/trading-and-transaction-volume/bearish_bullish_two_charts.png diff --git a/src/docs/education-and-use-cases/trading-and-transaction-volume/difference.png b/src/content/docs/guides/education-and-use-cases/trading-and-transaction-volume/difference.png similarity index 100% rename from src/docs/education-and-use-cases/trading-and-transaction-volume/difference.png rename to src/content/docs/guides/education-and-use-cases/trading-and-transaction-volume/difference.png diff --git a/src/content/docs/guides/education-and-use-cases/trading-and-transaction-volume/index.mdx b/src/content/docs/guides/education-and-use-cases/trading-and-transaction-volume/index.mdx new file mode 100644 index 000000000..0ae94baa9 --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/trading-and-transaction-volume/index.mdx @@ -0,0 +1,130 @@ +--- +title: Trading and Transaction Volume +author: Santiment Team +datePublished: 2024-06-17 +dateModified: 2024-07-08 +sidebar: + order: 90 +--- + +import Notebox from '$components/markdown/Notebox.svelte' +import Resource from '$components/markdown/Resource.svelte' + + + +### Trading Volume + +- Includes only transactions related to trading. Consists of data from decentralized exchanges (DEX) and centralized exchanges (CEX). + +### Transaction Volume + +- Includes all movements of tokens on the blockchain +- Covers transfers between wallets (e.g., for securing funds or managing investment portfolios) +- Includes payments for goods and services (real-world utility of cryptocurrencies) +- Includes interactions with smart contracts (DeFi activities such as staking, lending, and swapping tokens) + +### What is the difference between Trading Volume and Transaction Volume? + +In short, transaction volume represents all on-chain movements of a token, +while trading volume represents only the trading-related transactions (on-chain +and off-chain). + +![](./difference.png) + +The transaction volume metric is quite expansive and includes a variety of +on-chain activities that go beyond just trading-related transactions. It +captures transfers between wallets, which could be for reasons like securing +funds or managing different investment portfolios. Additionally, it includes +payments for goods and services, showcasing the real-world utility of +cryptocurrencies. On top of these, the metric also encompasses interactions +with smart contracts, which are pivotal in decentralized finance (DeFi) +activities like staking, lending, and swapping tokens. + +Another difference to note is that transaction volume is purely on-chain data, +while trading volume is combination of on-chain data (from DEXs) and off-chain +data (which is self-reported from CEXs). + + + +**Both metrics are crucial but serve different analytical purposes:** +transaction volume offers a peek into the actual use and movement of the +currency within its network, while trading volume helps understand the market +sentiment and liquidity. + + + +### How to interpret Volume metrics + +Both volume metrics act in relatively similar ways, hence in the examples we +will refer only to trading volume. + +An increase in trading volume is generally considered a precursor to a big price move. + +For example, if Bitcoin's trading volume dramatically increases without a +corresponding price change, it might suggest that something significant is +happening beneath the surface that hasn't yet affected the price. **Savvy traders +might interpret this as an early warning signal of a potential price movement +and adjust their strategies accordingly**, either by securing their current +positions or preparing to capitalize on the anticipated movement. + +![](./bearish_bullish.png) + +When both the price of a token and the trading volume are moving in the same +direction, it generally suggests a strong market consensus regarding the value +of the token. If they're both increasing, this is often seen as a bullish sign, +indicating strong buying interest and potentially sustainable price growth. +**This scenario typically reflects a positive sentiment among investors, as they +are actively participating and driving the price up with their trades.** + +Conversely, if both the price and trading volume are decreasing, it might +indicate a bearish market sentiment. This suggests that selling pressure is +high, and many holders are trying to offload their tokens, which can lead to a +decrease in price. **This kind of alignment between price and volume can signal a +consensus on value that is either very positive or very negative, depending on +the direction.** + +![](./bearish_bullish_two_charts.png) + + + +Context is crucial, so we strongly suggest not to make trading decisions based +solely on this metric. Use a combination of metrics that will help you make a +more informed decision. + + + +### How to monitor Volume metrics with Sanbase + +Here is a ready-to-be-copied Layout with Trading and Transaction volume for +your convenience: [link here](https://app.santiment.net/charts/YM8Zi2X6__sCl) + +![](./sanbase_chart.png) + +As soon as you have adjusted the Chart based on your preferences (time +intervals, colors, etc.) you can save it as a new private Layout. Then, using +the Master selector (the bigger one on the top) you can change the currently +analysed token to another while your visual preferences and metrics remain the +same. + +![](./selector.png) + +Or you can use the smaller selector to build on top of your chart and insert +more metrics, even for multiple tokens at once. + +See what others in crypto can’t! + + + +- [Trading Volume in USD | Santiment Academy](/metrics/trading-volume) +- [Transaction Volume | Santiment Academy](/metrics/transaction-volume) + + diff --git a/src/docs/education-and-use-cases/trading-and-transaction-volume/sanbase_chart.png b/src/content/docs/guides/education-and-use-cases/trading-and-transaction-volume/sanbase_chart.png similarity index 100% rename from src/docs/education-and-use-cases/trading-and-transaction-volume/sanbase_chart.png rename to src/content/docs/guides/education-and-use-cases/trading-and-transaction-volume/sanbase_chart.png diff --git a/src/docs/education-and-use-cases/trading-and-transaction-volume/selector.png b/src/content/docs/guides/education-and-use-cases/trading-and-transaction-volume/selector.png similarity index 100% rename from src/docs/education-and-use-cases/trading-and-transaction-volume/selector.png rename to src/content/docs/guides/education-and-use-cases/trading-and-transaction-volume/selector.png diff --git a/src/docs/education-and-use-cases/understanding-circulation/circulation.png b/src/content/docs/guides/education-and-use-cases/understanding-circulation/circulation.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-circulation/circulation.png rename to src/content/docs/guides/education-and-use-cases/understanding-circulation/circulation.png diff --git a/src/docs/education-and-use-cases/understanding-circulation/circulation_chart.png b/src/content/docs/guides/education-and-use-cases/understanding-circulation/circulation_chart.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-circulation/circulation_chart.png rename to src/content/docs/guides/education-and-use-cases/understanding-circulation/circulation_chart.png diff --git a/src/docs/education-and-use-cases/understanding-circulation/circulation_chart2.png b/src/content/docs/guides/education-and-use-cases/understanding-circulation/circulation_chart2.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-circulation/circulation_chart2.png rename to src/content/docs/guides/education-and-use-cases/understanding-circulation/circulation_chart2.png diff --git a/src/content/docs/guides/education-and-use-cases/understanding-circulation/index.mdx b/src/content/docs/guides/education-and-use-cases/understanding-circulation/index.mdx new file mode 100644 index 000000000..f37b529bb --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/understanding-circulation/index.mdx @@ -0,0 +1,100 @@ +--- +title: Understanding Circulation +author: Santiment Team +datePublished: 2024-07-19 +dateModified: 2025-08-14 +sidebar: + order: 101 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + + + +## Definition + +The [circulation metric](/metrics/circulation/#definition) measures the number of unique coins or tokens being +transferred between addresses on a blockchain within a specific period. It +provides insights into the actual movement and usage of the asset, indicating +network activity and utility. + +Accounted tokens in Circulation are unique, meaning that if the same token is +moved multiple times per day via a \*wash trade\*\* it is counted only once. + + + +A "wash trade" is a type of market +manipulation where a trader buys and sells the same financial instruments +simultaneously through different brokers, creating misleading activity in the +marketplace without any change in position. + + + +![noborder](circulation.png) + +## Circulation VS Transaction Volume VS Stock to Flow ratio + +Circulation measures the number of unique coins/tokens being transferred +between addresses, while transaction volume includes all on-chain movements of +a token. This means that if one token/coin changes hands 5 times on a given +day, it will be counted once by the token circulation, but 5 times if were to +use [transaction +volume](/education-and-use-cases/trading-and-transaction-volume/). + +Circulation shouldn’t also be used interchangeably with [Stock to Flow (S2F) +ratio](/metrics/stock-to-flow/). S2F compares the +total supply of a token to the new annual production, often used to predict +price based on an asset's supply dynamics and scarcity. Circulation, on the +other hand, tracks the movement of unique coins between addresses within a +timeframe, indicating network activity and utility. + +## **How to interpret Circulation metric** + +High circulation often signals increased interest and utility, which can lead +to change in price direction. Depending on context, a spike in Circulation can +be a very good indicator of a nearing top or bottom as we can see on the chart +below: + +![noborder](circulation_chart.png) + +For instance, looking at UNI during a period of high circulation in early April +2024, we saw a local top in price. Similarly, in November 2023, a spike in +circulation preceded a significant price increase over the following months. +These patterns suggest that spikes in circulation can be early indicators of +price movements, either up or down, depending on the context. + +Context is crucial, so we strongly suggest not to make trading decisions based +solely on this metric or any other single metric for that matter. Use a +combination of metrics that will help you make a more informed decision. + +## **How to monitor Circulation using Sanbase** + +Here is a ready-to-be-copied Layout with Circulation for your convenience: +[Sanbase Layout](https://app.santiment.net/s/ZI_PQYY7) + +![noborder](circulation_chart2.png) + +As soon as you have adjusted the Chart based on your preferences (time +intervals, colors, etc.) you can save it as a new private Layout. Then, using +the Master selector (the bigger one on the top) you can change the currently +analyzed token to another while your visual preferences and metrics remain the +same. + +![noborder](selector.png) + +Alternatively you can use the smaller selector to build on top of your chart +and insert more metrics, even for multiple tokens at once. + +See what others in crypto can’t! + +More technical documentation about the metric can be found here: +[Circulation | Santiment Academy](/metrics/circulation/) diff --git a/src/docs/education-and-use-cases/understanding-circulation/selector.png b/src/content/docs/guides/education-and-use-cases/understanding-circulation/selector.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-circulation/selector.png rename to src/content/docs/guides/education-and-use-cases/understanding-circulation/selector.png diff --git a/src/docs/education-and-use-cases/understanding-crypto-market-cycles-through-lending-metrics/image1.png b/src/content/docs/guides/education-and-use-cases/understanding-crypto-market-cycles-through-lending-metrics/image1.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-crypto-market-cycles-through-lending-metrics/image1.png rename to src/content/docs/guides/education-and-use-cases/understanding-crypto-market-cycles-through-lending-metrics/image1.png diff --git a/src/docs/education-and-use-cases/understanding-crypto-market-cycles-through-lending-metrics/image2.png b/src/content/docs/guides/education-and-use-cases/understanding-crypto-market-cycles-through-lending-metrics/image2.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-crypto-market-cycles-through-lending-metrics/image2.png rename to src/content/docs/guides/education-and-use-cases/understanding-crypto-market-cycles-through-lending-metrics/image2.png diff --git a/src/content/docs/guides/education-and-use-cases/understanding-crypto-market-cycles-through-lending-metrics/index.mdx b/src/content/docs/guides/education-and-use-cases/understanding-crypto-market-cycles-through-lending-metrics/index.mdx new file mode 100644 index 000000000..1b4c270c5 --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/understanding-crypto-market-cycles-through-lending-metrics/index.mdx @@ -0,0 +1,199 @@ +--- +title: Understanding Crypto Market Cycles Through Lending Metrics +author: Santiment Team +datePublished: 2025-04-03 +dateModified: 2025-04-04 +sidebar: + order: 140 +--- + + + +## Introduction + +The cryptocurrency market moves in cycles of expansion and contraction. While +many traders focus on price action or social sentiment, lending and borrowing +metrics provide unique insights into market conditions. These metrics can help +identify market extremes - both the overheated periods where caution is needed +and the cooling periods that might signal buying opportunities. + +This article explains key frameworks for analyzing crypto market conditions +through decentralized finance (DeFi) lending data. Below, we'll look at how to +spot market tops and bottoms using lending rates, debt levels, and liquidation +events. + +## What is DeFi Lending and Borrowing? + +DeFi lending and borrowing platforms allow users to lend and borrow digital +assets without traditional financial intermediaries like banks. They use smart +contracts - self-executing code on blockchains - to automate lending processes +and enforce agreement terms between parties. + +On these platforms: + +- Lenders deposit digital assets and earn interest +- Borrowers use assets as collateral to get loans in stablecoins or other + cryptocurrencies + +[These protocols](/metrics/lending-and-borrowing-protocols/) +offer more flexibility, accessibility, and transparency than traditional +finance. However, they come with risks such as smart contract vulnerabilities, +market volatility, and potential liquidations. + +## Framework 1: [The "Value of Money" Metric](https://app.santiment.net/charts/FT0jzE8N__sCl) + +### The Concept + +The first framework examines interest rates on lending platforms like Aave and +Compound. These rates reflect supply and demand for capital in crypto markets. + +When borrowing demand increases, interest rates rise. Extreme interest rate +spikes often signal market tops, while flat or low rates may indicate market +bottoms. + +This framework reflects an analysis of the behaviour of market participants, +where the determination of the value of money is a direct expression of general +market sentiment. + +### Key Indicators + +1. **Stable Coin Supply Rate**: The amount of interest earned when depositing + stablecoins like USDC or DAI +2. **Borrowing Rate**: The interest paid when borrowing these assets +3. **Supply/Borrow Ratio**: The relationship between available capital and + borrowed amounts + +### How to Interpret the Data + +![noborder](./image1.png) + +- **Market Top Signals**: Interest rates above 10-15% suggest overheated + conditions where borrowers are willing to pay high costs to gain leverage +- **Market Cooling**: Falling interest rates indicate decreasing demand for + leverage +- **Market Bottom Signals**: Sustained low, flat rates (3-4%) for several weeks + suggest reduced speculation and possible bottoming conditions + +The most reliable signal isn't just high rates but when rates rise quickly and +substantially above baseline levels. Similarly, the bottoming process typically +isn't complete until rates remain flat for 2-4 weeks. + +For determining 'value for money' you can use [this ready-to-use dashboard](https://app.santiment.net/charts/FT0jzE8N__sCl) + +## Framework 2: [The "Blood on the Streets" Liquidation Metric](https://app.santiment.net/charts/De_wFHJh__sCl) + +### The Concept + +Liquidations occur when borrowers' collateral value falls below required +thresholds. These forced collateral sales create market pressure and often +signal capitulation events. + +Large liquidation spikes combined with decreasing total debt can mark potential +market bottoms. + +### Key Indicators + +1. **Total Liquidations**: The dollar value of positions forcibly closed +2. **Total Debt Changes**: Increases or decreases in the total borrowed amount +3. **Repayments**: Voluntary debt reduction by borrowers (distinct from + liquidations) + +### Types of Leveraged Positions + +Most liquidations come from two types of positions: + +1. **Long Leverage**: Borrowing stablecoins against crypto assets to buy more + crypto +2. **Short Positions**: Borrowing crypto against stablecoins to sell and bet on + price decreases + +Long liquidations are more common and typically occur during market drops, +while short liquidations happen during sharp upward moves. + +### How to Interpret the Data + +![noborder](./image2.png) + +- **Large Liquidation Events**: Significant liquidation spikes often mark local + bottoms +- **Concurrent Debt Reduction**: When liquidations coincide with total debt + decreases, the signal strengthens +- **Support Levels**: Price levels where major liquidations occur often become + support in ranging markets + +For optimal entry points, look for the combination of large liquidations AND +significant debt reduction. The largest liquidation events of the past cycle +(August 2024) preceded substantial rallies. + +To monitor liquidations you can use [this ready-to-use dashboard](https://app.santiment.net/charts/De_wFHJh__sCl) + +## Complementary Metrics + +These additional metrics enhance the analysis: + +### 1. Total Open Interest + +Total [open +interest](/metrics/open-interest) +measures the total value of outstanding futures contracts. High open interest +during price increases often signals excessive leverage and impending +corrections. + +### 2. Funding Rates + +[Funding rates](/metrics/funding-rates-aggregated) +show the premium between perpetual futures and spot prices: + +- Positive rates: Longs pay shorts (bullish sentiment) +- Negative rates: Shorts pay longs (bearish sentiment) + +Negative funding rates often precede bounces as short liquidations can fuel +upward momentum. + +## Practical Application Framework + +To apply these insights effectively: + +1. **Monitor Heat Signals**: + - Track stable coin lending rates for signs of market overheating (>10%) + - Watch for extreme borrowing demand spikes + +2. **Identify Cooling Conditions**: + - Look for declining interest rates + - Wait for rates to flatten for 2-4 weeks + +3. **Confirm Capitulation**: + - Large liquidation events + - Significant debt reduction following liquidations + - Negative funding rates (shorts paying longs) + +4. **Adjust Strategy Based on Market Phase**: + - In strong uptrends: Consider adding positions after liquidation events + - In choppy ranges: Wait for price to hold support at liquidation levels + before entering + +## Conclusion + +Lending and borrowing metrics offer powerful insights into market psychology +and leverage conditions. By tracking interest rates, debt levels, and +liquidation events, traders can identify potential market extremes more +effectively than through price action alone. + +These metrics help answer key questions: + +- Is market demand for leverage rational or irrational? +- Have we seen enough pain to mark a potential bottom? +- Is the market cooling enough to consider re-entry? + +While no indicators are perfect, this lending-focused framework provides +additional perspective beyond traditional technical analysis, helping traders +make more informed decisions throughout market cycles. diff --git a/src/docs/education-and-use-cases/understaning-daily-active-addresses/daa_chart.png b/src/content/docs/guides/education-and-use-cases/understanding-daily-active-addresses/daa_chart.png similarity index 100% rename from src/docs/education-and-use-cases/understaning-daily-active-addresses/daa_chart.png rename to src/content/docs/guides/education-and-use-cases/understanding-daily-active-addresses/daa_chart.png diff --git a/src/docs/education-and-use-cases/understaning-daily-active-addresses/daa_combined_with_other_metrics.png b/src/content/docs/guides/education-and-use-cases/understanding-daily-active-addresses/daa_combined_with_other_metrics.png similarity index 100% rename from src/docs/education-and-use-cases/understaning-daily-active-addresses/daa_combined_with_other_metrics.png rename to src/content/docs/guides/education-and-use-cases/understanding-daily-active-addresses/daa_combined_with_other_metrics.png diff --git a/src/docs/education-and-use-cases/understaning-daily-active-addresses/daa_sanbase_chart.png b/src/content/docs/guides/education-and-use-cases/understanding-daily-active-addresses/daa_sanbase_chart.png similarity index 100% rename from src/docs/education-and-use-cases/understaning-daily-active-addresses/daa_sanbase_chart.png rename to src/content/docs/guides/education-and-use-cases/understanding-daily-active-addresses/daa_sanbase_chart.png diff --git a/src/content/docs/guides/education-and-use-cases/understanding-daily-active-addresses/index.mdx b/src/content/docs/guides/education-and-use-cases/understanding-daily-active-addresses/index.mdx new file mode 100644 index 000000000..537a729d6 --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/understanding-daily-active-addresses/index.mdx @@ -0,0 +1,89 @@ +--- +title: Understanding Daily Active Addresses (DAA) +author: Santiment Team +date: 2024-07-08 +datePublished: 2024-07-08 +dateModified: 2025-08-14 +sidebar: + label: Understanding Daily Active Addresses + order: 90 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + + + +## Definition + +[Daily Active Addresses(DAA)](/metrics/daily-active-addresses/) is the amount of unique active addresses that participate in transactions +on a blockchain network each day. It's a measure of the network's activity and +usage. High DAA suggests strong user engagement and network utility. DAA can be +influenced by various factors like market trends, network upgrades, or major +events. + +## How to interpret the Daily Active Addresses metric + +Generally, there's a correlation between DAA and price. For instance: + +- **Positive Correlation**: When DAA rises, it often signals increased interest + and price movement. For example, during periods when Ethereum's DAA + increased, we observed a positive price trend, even if the price was + initially wobbly. +- **Long-term Growth**: Consistent, long-term growth in DAA is a positive sign, + indicating rising utility and potential for price appreciation. +- **Market Top Indicator**: A sudden spike in DAA can sometimes indicate a + market top, signalling a rush of activity before a sell-off. + +![noborder](./daa_chart.png) + +Daily Active Addresses (DAA) is a powerful metric when combined with others +like Whale Transactions. DAA shows network activity, while Whale Transactions +highlight big player movements. For instance, a spike in DAA with high Whale +Transactions can indicate upcoming volatility. + +![noborder](./daa_combined_with_other_metrics.png) + + + +Context is crucial, so we strongly suggest not to make trading decisions based +solely on this metric. Use a combination of metrics that will help you make a +more informed decision. + + + +## How to monitor DAA using Sanbase + +Here is a ready-to-be-copied Layout with Trading and Transaction volume for +your convenience: [Sanbase Daily Active Addresses Chart](https://app.santiment.net/charts/daily-active-addresses-25309) + +![noborder](./daa_sanbase_chart.png) + +As soon as you have adjusted the Chart based on your preferences (time +intervals, colors, etc.) you can save it as a new private Layout. Then, using +the Master selector (the bigger one on the top) you can change the currently +analysed token to another while your visual preferences and metrics remain the +same. + +![noborder](./sanbase_selector.png) + +Or you can use the smaller selector to build on top of your chart and insert +more metrics, even for multiple tokens at once. + +See what others in crypto can’t! + + + +More technical documentation about the metric can be found here: [Daily Active +Addresses | Santiment Academy](/metrics/daily-active-addresses) + + diff --git a/src/docs/education-and-use-cases/understaning-daily-active-addresses/sanbase_selector.png b/src/content/docs/guides/education-and-use-cases/understanding-daily-active-addresses/sanbase_selector.png similarity index 100% rename from src/docs/education-and-use-cases/understaning-daily-active-addresses/sanbase_selector.png rename to src/content/docs/guides/education-and-use-cases/understanding-daily-active-addresses/sanbase_selector.png diff --git a/src/docs/education-and-use-cases/understanding-long-term-market-trends-and-cycles/age_consumed.png b/src/content/docs/guides/education-and-use-cases/understanding-long-term-market-trends-and-cycles/age_consumed.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-long-term-market-trends-and-cycles/age_consumed.png rename to src/content/docs/guides/education-and-use-cases/understanding-long-term-market-trends-and-cycles/age_consumed.png diff --git a/src/content/docs/guides/education-and-use-cases/understanding-long-term-market-trends-and-cycles/index.mdx b/src/content/docs/guides/education-and-use-cases/understanding-long-term-market-trends-and-cycles/index.mdx new file mode 100644 index 000000000..2888581a3 --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/understanding-long-term-market-trends-and-cycles/index.mdx @@ -0,0 +1,225 @@ +--- +title: Understanding Long-Term Market Trends and Cycles +author: Santiment Team +datePublished: 2024-08-28 +dateModified: 2024-08-30 +sidebar: + label: Understanding Long-term Market Trends and Cycles + order: 120 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + +## Overview + +This handbook aims to help traders and investors identify the current stage in +a long-term market cycle. + +  + +For the purpose, we will use a layout with five charts with key indicators. We +will use BTC as a proxy. + +  + +Key indicators are: + +- Spikes in age consumed +- Changes in mean dollar age +- Divergence between MVRV and price +- Profit and loss levels +- Social volume trends + +  + +Open this layout with five charts and let’s dive in: + +[Sanbase Charts | Long-term market cycle](https://app.santiment.net/charts/long-term-market-cycle-24503) + +  + + + +## [Age Consumed](/metrics/age-consumed) + +Key metric on chart 1 of the layout is age consumed, which represents amounts +of coins that moved multiplied by the time that they spent in the last address. +Large spikes of this metric mean that long-term holders are moving their funds, +which often marks key turning points for the market. + +![noborder](./age_consumed.png) + + + +Age Consumed - the number of coins changing addresses on a certain date, +multiplied by the time since they last moved. + + + + + +Identify critical market turning points by monitoring significant spikes. + + + + + +Spikes indicate long-term holders moving their funds, often signalling major +market shifts. + + + +## [Mean Dollar Invested Age (MDIA)](/metrics/mean-coin-age) + +On chart 2 of the layout, you can see mean dollar age metrics, one of which is +measuring this value for all coins, while the other one is only looking at +coins moved within the last 365 days. These metrics help gauge the macro trend +strength. When the value drops, that indicates inflow of new money, and the +inverse indicates that money isn’t coming in. They usually start falling around +the middle of the bull market, acting as a confirmation of strength. Change of +mode from down to up often predicts major market tops. + +![noborder](./mdia.png) + + + +MDIA - the average age of every dollar invested into the market cap of a coin. + + + + + +Gauge the strength of the macro trend using two MDIA metrics: one for all coins +and one for coins moved within the last 365 days. + + + + + +Changes in these metrics from downward to upward trends signal macro trend exhaustion. + +Dropping Values show inflow of new money, typically post-bull market midpoint, confirming market strength. + +Rising Values show lack of new money, often predicting major market tops. + + + +## [MVRV Ratio](/metrics/mvrv) + +Chart 3 of the layout has MVRV ratios (Market Value to Realized Value) with +different timeframes. Here, the same idea of coins moved within specific time +applies. The key idea here is to look for divergences between MVRV and price. +MVRV diverging from price can be only caused by the change in realized value. +When realized value rises, that means on average market participants are buying +in at the highs, indicating “greed” mode of the market, and price tends to +trend down as a result. The opposite applies as well. When participants are +selling at the lows and realizing losses, the realized value drops and that +causes MVRV ratio to diverge to the upside. + +![noborder](./mvrv.png) + + + +MVRV Ratio - an asset's market capitalization divided by realized capitalization. + + + + + +Observe divergences between MVRV and price by analyzing MVRVs for different +timeframes based on coin movements. + + + + + +Rising Realized Value indicates "greed," often leading to a downward trend. + +Dropping Realized Value indicates losses, causing MVRV to diverge upwards. + +Divergences reveal market sentiment and potential price movements. + + + +## [Network Realized Profit and Loss](/metrics/network-profit-loss) + +Network Realized Profit/Loss on chart 4 of the layout measures the collective +PnL of all holders. Big negative spikes are usually the best long-term buy +signals. Spotting the tops, however, works a bit different - the biggest spikes +are happening around mid-bull market. But after that, when the price continues +higher but NRPL stays close to 0, this usually means that the market’s top is +near. + +![noborder](./nrpl.png) + + + +Network Realized Profit/Loss - the average profit or loss of all coins that change addresses daily. + + + + + +Identify optimal buying opportunities and potential market peaks. + + + + + +Big Negative Spikes indicate the best longterm buy signals. +Mid-Bull Market Spikes signify significant profit-taking. +Price rising with NRPL Near 0 suggests an approaching market top. + + + +## [Social Volume](/metrics/social-volume) + +Social volume on panel 5 indicates the amount of discussion in crypto social +media. You generally want to get in when the amount of chatter is low, and the +average Joe isn’t interested in crypto at all, but when everyone is only taking +about Bitcoin, it’s best to consider an exit or partial profit taking strategy. + +![noborder](./social_volume.png) + + + +Social Volume - the total number of social media messages that contain the +given search term at least once. + + + + + +Effectively time market entries and exits by monitoring social volume. + + + + + +Low chatter periods are ideal entry points when interest in crypto is minimal. +High chatter signals that it’s time to consider your exit strategy as interest peaks. + + + +All of these metrics will help you better understand the crypto market trends +on a macro level and make more informed decisions. + +  + +[Sanbase Charts | Long-term market cycle](https://app.santiment.net/charts/long-term-market-cycle-24503) + +Feel free to save the layout with charts as your own and use the master +selector (the top one) to observe the same metrics for various tokens. + +![noborder](./selector.png) + +See what others in crypto can’t! diff --git a/src/docs/education-and-use-cases/understanding-long-term-market-trends-and-cycles/mdia.png b/src/content/docs/guides/education-and-use-cases/understanding-long-term-market-trends-and-cycles/mdia.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-long-term-market-trends-and-cycles/mdia.png rename to src/content/docs/guides/education-and-use-cases/understanding-long-term-market-trends-and-cycles/mdia.png diff --git a/src/docs/education-and-use-cases/understanding-long-term-market-trends-and-cycles/mvrv.png b/src/content/docs/guides/education-and-use-cases/understanding-long-term-market-trends-and-cycles/mvrv.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-long-term-market-trends-and-cycles/mvrv.png rename to src/content/docs/guides/education-and-use-cases/understanding-long-term-market-trends-and-cycles/mvrv.png diff --git a/src/docs/education-and-use-cases/understanding-long-term-market-trends-and-cycles/nrpl.png b/src/content/docs/guides/education-and-use-cases/understanding-long-term-market-trends-and-cycles/nrpl.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-long-term-market-trends-and-cycles/nrpl.png rename to src/content/docs/guides/education-and-use-cases/understanding-long-term-market-trends-and-cycles/nrpl.png diff --git a/src/docs/education-and-use-cases/understanding-long-term-market-trends-and-cycles/selector.png b/src/content/docs/guides/education-and-use-cases/understanding-long-term-market-trends-and-cycles/selector.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-long-term-market-trends-and-cycles/selector.png rename to src/content/docs/guides/education-and-use-cases/understanding-long-term-market-trends-and-cycles/selector.png diff --git a/src/docs/education-and-use-cases/understanding-long-term-market-trends-and-cycles/social_volume.png b/src/content/docs/guides/education-and-use-cases/understanding-long-term-market-trends-and-cycles/social_volume.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-long-term-market-trends-and-cycles/social_volume.png rename to src/content/docs/guides/education-and-use-cases/understanding-long-term-market-trends-and-cycles/social_volume.png diff --git a/src/docs/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image1.png b/src/content/docs/guides/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image1.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image1.png rename to src/content/docs/guides/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image1.png diff --git a/src/docs/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image2.png b/src/content/docs/guides/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image2.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image2.png rename to src/content/docs/guides/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image2.png diff --git a/src/docs/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image3.png b/src/content/docs/guides/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image3.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image3.png rename to src/content/docs/guides/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image3.png diff --git a/src/docs/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image4.png b/src/content/docs/guides/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image4.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image4.png rename to src/content/docs/guides/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image4.png diff --git a/src/docs/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image5.png b/src/content/docs/guides/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image5.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image5.png rename to src/content/docs/guides/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image5.png diff --git a/src/docs/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image6.png b/src/content/docs/guides/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image6.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image6.png rename to src/content/docs/guides/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image6.png diff --git a/src/docs/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image7.png b/src/content/docs/guides/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image7.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image7.png rename to src/content/docs/guides/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/image7.png diff --git a/src/content/docs/guides/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/index.mdx b/src/content/docs/guides/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/index.mdx new file mode 100644 index 000000000..813e5e289 --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/index.mdx @@ -0,0 +1,213 @@ +--- +title: Understanding Market Expectations Through Historical Crypto Trends +author: Santiment Team +datePublished: 2025-05-20 +dateModified: 2025-05-23 +sidebar: + order: 150 +--- + + + +Expectations are a powerful force in shaping financial markets. Yet, they can +also be your worst enemy if yours fall into the same category as most. It’s +common for the market to move in the opposite direction from what most +participants anticipate, and contrarian traders are typically the ones who most +commonly come out on top in volatile markets. Recognizing this, Sanbase +analyzes user discussions across all major crypto channels, offering a +data-driven perspective on the current sentiment and expectations within the +crowd. + +With Santiment’s [**Historical Crypto Trends**](https://app.santiment.net/social-trends/crypto-trends) tool, you can +assess how collective expectations have matched up with actual market movements +in the past. This not only provides valuable context but also helps in +forecasting potential future changes by recognizing familiar patterns. + +As you explore the tool’s graphs, you’ll encounter key metrics such as +[**social volume**](/metrics/social-volume/#definition) and +[**social dominance**](/metrics/social-dominance/#social-dominance-for-an-asset). +These powerful market indicators both offer insight into the intensity and +focus of market conversations, as well as reveal how the subject matter of +these conversations transition between topics. + +In this article, we’ll explore the primary queries within the +[**Historical Crypto Trends**](https://app.santiment.net/social-trends/crypto-trends) tool, +helping you gain a comprehensive understanding of market participants’ +expectations and how these sentiments play out over time. + +## Spotting Market Bottoms with the _Buy the Dip_ Query + +![noborder](./image1.png) + +Tracking the frequency of "buy the dip" mentions on social channels helps gauge +market sentiment. Spikes in these mentions signal investor optimism, often +after temporary rebounds that may still lead to further declines. Low volume of +conversations surrounding ‘buying the dip’ reflects fear and can indicate +potential buying opportunities. High volume reflects an overly eager crowd that +is not yet fearful, meaning the market dip is likely to continue longer. +Monitoring this trend with Sanbase provides valuable insights for timing market +entry points. + +**Query text:** + +``` +buy AND dip +``` + +[Link on social query](https://app.santiment.net/s/nrdmCug6) + +## Going Against the Crowd with BTC Price Expectations + +![noborder](./image2.png) + +Analyzing social chatter about Bitcoin’s future price reveals valuable +sentiment signals. Widespread predictions of unrealistically high prices +indicate market greed and often precede price pullbacks. In contrast, frequent +talk of extremely low prices reflects fear and can signal a potential market +bottom. Tracking these patterns with Sanbase helps identify shifts in sentiment +for more informed trading decisions. We recommend adjusting the thresholds of +these round number price mentions to consistently be around 10-15% above the +current market value of Bitcoin, and 10-15% below. + +**Query text:** + +``` +(10K OR 11K OR 12K OR 13K OR 14K OR 15K OR 16K OR 17K OR 18K OR 19K OR 20K OR 21K OR 22K OR 23K OR 24K OR 25K OR 26K OR 27K OR 28K OR 29K OR 30K OR 31K OR 32K OR 33K OR 34K OR 35K OR 36K OR 37K OR 38K OR 39K OR 40K OR 41K OR 42K OR 43K OR 44K OR 45K OR 46K OR 47K OR 48K OR 49K OR 50K OR 51K OR 52K OR 53K OR 54K OR 55K OR 56K OR 57K OR 58K OR 59K OR 60K OR 61K OR 62K OR 63K OR 64K OR 65K OR 66K OR 67K OR 68K OR 69K OR 10000 OR 11000 OR 10000 OR 11000 OR 12000 OR 13000 OR 14000 OR 15000 OR 16000 OR 17000 OR 18000 OR 19000 OR 20000 OR 21000 OR 22000 OR 23000 OR 24000 OR 25000 OR 26000 OR 27000 OR 28000 OR 29000 OR 30000 OR 31000 OR 32000 OR 33000 OR 34000 OR 35000 OR 36000 OR 37000 OR 38000 OR 39000 OR 40000 OR 41000 OR 42000 OR 43000 OR 44000 OR 45000 OR 46000 OR 47000 OR 48000 OR 49000 OR 50000 OR 51000 OR 52000 OR 53000 OR 54000 OR 55000 OR 56000 OR 57000 OR 58000 OR 59000 OR 60000 OR 61000 OR 62000 OR 63000 OR 64000 OR 65000 OR 66000 OR 67000 OR 68000 OR 69000) AND (bitcoin OR btc) +``` + +``` +(100K OR 101K OR 102K OR 103K OR 104K OR 105K OR 106K OR 107K OR 108K OR 109K OR 110K OR 111K OR 112K OR 113K OR 114K OR 115K OR 116K OR 117K OR 118K OR 119K OR 120K OR 121K OR 122K OR 123K OR 124K OR 125K OR 126K OR 127K OR 128K OR 129K OR 130K OR 131K OR 132K OR 133K OR 134K OR 135K OR 136K OR 137K OR 138K OR 139K OR 140K OR 141K OR 142K OR 143K OR 144K OR 145K OR 146K OR 147K OR 148K OR 149K OR 150K OR 151K OR 152K OR 153K OR 154K OR 155K OR 156K OR 157K OR 158K OR 159K OR100000 OR 101000 OR 102000 OR 103000 OR 104000 OR 105000 OR 106000 OR 107000 OR 108000 OR 109000 OR 110000 OR 111000 OR 112000 OR 113000 OR 114000 OR 115000 OR 116000 OR 117000 OR 118000 OR 119000 OR 120000 OR 121000 OR 122000 OR 123000 OR 124000 OR 125000 OR 126000 OR 127000 OR 128000 OR 129000 OR 130000 OR 131000 OR 132000 OR 133000 OR 134000 OR 135000 OR 136000 OR 137000 OR 138000 OR 139000 OR 140000 OR 141000 OR 142000 OR 143000 OR 144000 OR 145000 OR 146000 OR 147000 OR 148000 OR 149000 OR 150000 OR 151000 OR 152000 OR 153000 OR 154000 OR 155000 OR 156000 OR 157000 OR 158000 OR 159000) AND (bitcoin OR btc) +``` + +[Link on social query](https://app.santiment.net/s/jbpgKsYO) + +## Analyzing Crowd Mentions of Bear or Bull Market + +![noborder](./image3.png) + +Monitoring how often the crypto community references a "bull market" or "bear +market" provides essential insight into prevailing market sentiment. A sudden +surge in mentions of a "bull market" typically signals growing optimism, which +can sometimes indicate the market is becoming overheated and due for a +correction. Conversely, an increasing volume of "bear market" discussions often +reflects heightened pessimism and anxiety, which can suggest the market is +approaching or has reached a bottom. + +**Query text:** + +``` +bull OR bullish +``` + +``` +bear OR bearish +``` + +[Link on social query](https://app.santiment.net/s/njhTxpbX) + +## Analyzing Mentions of "Higher" or "Lower" in Price Discussions + +![noborder](./image4.png) +Tracking how often traders and market participants mention that prices will go +"higher" or "lower" offers valuable clues about market expectations. A spike in +conversations predicting that prices will move "higher" often signals growing +optimism and bullish sentiment, which can sometimes precede a period of +correction as the market becomes overconfident. On the other hand, an increase +in mentions of prices moving "lower" tends to reflect rising pessimism or fear, +which can point to an oversold market and a possible rebound. + +**Query text:** + +``` +high OR higher` +``` + +``` +low OR lower +``` + +[Link on social query](https://app.santiment.net/s/-iQm0v3E) + +## Analyzing Mentions of "Pump" and "Dump" in Market Discussions + +![noborder](./image5.png) + +Monitoring how frequently the crypto community uses terms like "pump" or "dump" +can offer critical insights into crowd behavior and short-term market +sentiment. A sudden increase in mentions of a potential "pump" often signals +heightened excitement and speculative interest, which can sometimes lead to +rapid price surges followed quickly by corrections as enthusiasm fades. +Conversely, a rise in "dump" discussions tends to indicate growing anxiety +about potential price drops, often surrounding fears of sell-offs or +manipulation. + +**Query text:** + +``` +pump +``` + +``` +dump +``` + +[Link on social query](https://app.santiment.net/s/ibsJUqyi) + +## Tariffs + +![noborder](./image6.png) + +In 2025, Donald Trump introduced tariffs that rocked traders’ opinions about +both stock and crypto markets. For the most part, tariffs are discussed at a +high frequency whenever there are new developments or changes to countries’ +policies on tariffs. These policy changes often coincide with a shift in market +direction. Therefore, you can likely find profitable trades by buying if tariff +discussions spike while markets had been declining, or selling if tariff +discussions spike while markets had been rising. + +**Query text:** + +``` +tarif OR tariff OR tariffs +``` + +[Link on social query](https://app.santiment.net/s/1rjfXuuc) + +## Altseason + +![noborder](./image7.png) + +When traders begin to become enthralled with altcoins, this is often a +reflection of greed or overconfidence in the markets. And if altcoins have been +on a prolonged rally, you may see a spike in the term “altseason”. This means +that traders are confident enough that the current altcoin rally will continue. +Since markets historically move the opposite direction of the crowd’s +expectations, you can interpret spikes in “altseason” as a bearish one in +almost all cases. + +**Query text:** + +``` +(alt AND season) OR alts OR szn OR altseazon OR altseason OR (altcoin AND seazon) +``` + +[Link on social query](https://app.santiment.net/s/FQjsj8kr) + +## Conclusion + +By leveraging tools like [Historical Crypto Trends](https://app.santiment.net/social-trends/crypto-trends), investors and +analysts can move beyond guesswork and gain a data-backed understanding of +market sentiment. Analyzing custom keyword frequencies on the Social Trends +page not only sheds light on current expectations but also equips you to +recognize trends and anticipate possible market shifts. Ultimately, +incorporating these insights can lead to more informed and confident +decision-making in the dynamic world of crypto. diff --git a/src/docs/education-and-use-cases/understanding-short-term-market-trends/derivative_metrics.png b/src/content/docs/guides/education-and-use-cases/understanding-short-term-market-trends/derivative_metrics.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-short-term-market-trends/derivative_metrics.png rename to src/content/docs/guides/education-and-use-cases/understanding-short-term-market-trends/derivative_metrics.png diff --git a/src/content/docs/guides/education-and-use-cases/understanding-short-term-market-trends/index.mdx b/src/content/docs/guides/education-and-use-cases/understanding-short-term-market-trends/index.mdx new file mode 100644 index 000000000..0dba95217 --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/understanding-short-term-market-trends/index.mdx @@ -0,0 +1,161 @@ +--- +title: Understanding Short-Term Market Trends +author: Santiment Team +datePublished: 2024-09-16 +dateModified: 2024-09-18 +sidebar: + label: Understanding Short-term Market Trends + order: 130 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + +## Overview + +This handbook aims to help traders and investors identify market tops. It’s +most useful for small to mid-cap coins driven by momentum and social +narratives. + +  + +For the purpose, we will use a layout with four charts with key indicators. We +will use SHIB as a proxy. + +  + +Key indicators are: + +- Network activity (address activity and network growth) +- Social metrics (volume and sentiment) +- Valuation metrics (MVRV) +- Derivative metrics (funding rate and open interest) + +  + +Open this layout with four charts and let’s dive in. + +[Sanbase Charts | Short-term market cycle](https://app.santiment.net/charts/short-term-over-under-valued-coins-24504) + +  + + + +## Network Activity + +Chart 1 of the layout combines address activity and network growth metrics. +The idea is to gauge if the price rise is supported by the network metrics +rise. If it isn’t - good chance for a top. + +![noborder](./network_activity.png) + + +Active Addresses 24h - the number of distinct addresses that participated in a +transfer for the given asset in the past 24 hours window. + +Network Growth - the number of new addresses that transferred a given coin for +the first time. + + + + + Assess if price rises are supported by network activity. + + + + If network metrics don't rise with the price, it often signals a potential + market top. + + +## Social Metrics + +Same idea applies to social volume and sentiment metrics on Chart 2 of the layout. Those metrics are usually the strongest mid-trend. When they start slumping but the price still pushes higher - that indicates narrative weakening and momentum exhaustion, which is a good signal to get out. + +![noborder](./social_metrics.png) + + +Social Volume - the total number of social media messages that contain the +given search term at least once. + +Weighted Sentiment - a numeric representation of social context around a coin. + + + + + 🎯 Assess mid-trend strength through social metrics. + + + + A decline in social volume and sentiment despite rising prices indicates + weakening narratives and momentum, hence an exit signal. + + +## Valuation Metrics + +Chart 3 of the layout shows Market Value to Realized Value (MVRV) Ratio metrics. The same approach applies as in long-term trend analysis, just on a much shorter timeframe. + +![noborder](./valuation_metrics.png) + + + MVRV - an asset's market capitalization divided by realized capitalization. + + + + Observe divergences between MVRV and price by analyzing MVRVs for different + timeframes based on coin movements. + + + +Rising Realized Value indicates "greed," often leading to a downward trend. + +Dropping Realized Value indicates losses, causing MVRV to diverge upwards. + +Divergences reveal market sentiment and potential price movements. + + + +## Derivatives Metrics + +On Chart 4 of the layout we look at funding rate and open interest metrics. +They allow us to analyse the derivatives market of a coin. Increase of open +interest and high funding while price staying seemingly slat might indicate +insiders positioning for an upcoming catalyst event. + +![noborder](./derivative_metrics.png) + + +Total Funding Rates Aggregated by Asset - the aggregation of all funding rates +by open interest for a given asset. + +Open Interest in coins - the sum of open interests of all contracts for a given +asset. + + + + + Analyse the derivatives market for potential insider activity. + + + + Rising open interest and high funding rates with stable prices indicate + insider positioning for upcoming catalyst events. + + +All of these metrics will help you better spot trend reversals early and to +identify potential infliction points. + +[Sanbase Charts | Short-term market cycle](https://app.santiment.net/charts/short-term-over-under-valued-coins-24504) + +Feel free to save the layout with charts as your own and use the master selector (the top one) to observe the same metrics for various tokens. + +![noborder](./selector.png) + +See what others in crypto can’t! diff --git a/src/docs/education-and-use-cases/understanding-short-term-market-trends/network_activity.png b/src/content/docs/guides/education-and-use-cases/understanding-short-term-market-trends/network_activity.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-short-term-market-trends/network_activity.png rename to src/content/docs/guides/education-and-use-cases/understanding-short-term-market-trends/network_activity.png diff --git a/src/docs/education-and-use-cases/understanding-short-term-market-trends/selector.png b/src/content/docs/guides/education-and-use-cases/understanding-short-term-market-trends/selector.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-short-term-market-trends/selector.png rename to src/content/docs/guides/education-and-use-cases/understanding-short-term-market-trends/selector.png diff --git a/src/docs/education-and-use-cases/understanding-short-term-market-trends/social_metrics.png b/src/content/docs/guides/education-and-use-cases/understanding-short-term-market-trends/social_metrics.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-short-term-market-trends/social_metrics.png rename to src/content/docs/guides/education-and-use-cases/understanding-short-term-market-trends/social_metrics.png diff --git a/src/docs/education-and-use-cases/understanding-short-term-market-trends/valuation_metrics.png b/src/content/docs/guides/education-and-use-cases/understanding-short-term-market-trends/valuation_metrics.png similarity index 100% rename from src/docs/education-and-use-cases/understanding-short-term-market-trends/valuation_metrics.png rename to src/content/docs/guides/education-and-use-cases/understanding-short-term-market-trends/valuation_metrics.png diff --git a/src/docs/education-and-use-cases/whale-activity-alert/image1.png b/src/content/docs/guides/education-and-use-cases/whale-activity-alert/image1.png similarity index 100% rename from src/docs/education-and-use-cases/whale-activity-alert/image1.png rename to src/content/docs/guides/education-and-use-cases/whale-activity-alert/image1.png diff --git a/src/docs/education-and-use-cases/whale-activity-alert/image2.png b/src/content/docs/guides/education-and-use-cases/whale-activity-alert/image2.png similarity index 100% rename from src/docs/education-and-use-cases/whale-activity-alert/image2.png rename to src/content/docs/guides/education-and-use-cases/whale-activity-alert/image2.png diff --git a/src/docs/education-and-use-cases/whale-activity-alert/image3.png b/src/content/docs/guides/education-and-use-cases/whale-activity-alert/image3.png similarity index 100% rename from src/docs/education-and-use-cases/whale-activity-alert/image3.png rename to src/content/docs/guides/education-and-use-cases/whale-activity-alert/image3.png diff --git a/src/docs/education-and-use-cases/whale-activity-alert/image4.png b/src/content/docs/guides/education-and-use-cases/whale-activity-alert/image4.png similarity index 100% rename from src/docs/education-and-use-cases/whale-activity-alert/image4.png rename to src/content/docs/guides/education-and-use-cases/whale-activity-alert/image4.png diff --git a/src/docs/education-and-use-cases/whale-activity-alert/image5.png b/src/content/docs/guides/education-and-use-cases/whale-activity-alert/image5.png similarity index 100% rename from src/docs/education-and-use-cases/whale-activity-alert/image5.png rename to src/content/docs/guides/education-and-use-cases/whale-activity-alert/image5.png diff --git a/src/docs/education-and-use-cases/whale-activity-alert/image6.png b/src/content/docs/guides/education-and-use-cases/whale-activity-alert/image6.png similarity index 100% rename from src/docs/education-and-use-cases/whale-activity-alert/image6.png rename to src/content/docs/guides/education-and-use-cases/whale-activity-alert/image6.png diff --git a/src/docs/education-and-use-cases/whale-activity-alert/image7.png b/src/content/docs/guides/education-and-use-cases/whale-activity-alert/image7.png similarity index 100% rename from src/docs/education-and-use-cases/whale-activity-alert/image7.png rename to src/content/docs/guides/education-and-use-cases/whale-activity-alert/image7.png diff --git a/src/docs/education-and-use-cases/whale-activity-alert/image8.png b/src/content/docs/guides/education-and-use-cases/whale-activity-alert/image8.png similarity index 100% rename from src/docs/education-and-use-cases/whale-activity-alert/image8.png rename to src/content/docs/guides/education-and-use-cases/whale-activity-alert/image8.png diff --git a/src/content/docs/guides/education-and-use-cases/whale-activity-alert/index.mdx b/src/content/docs/guides/education-and-use-cases/whale-activity-alert/index.mdx new file mode 100644 index 000000000..e1b7fb4c2 --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/whale-activity-alert/index.mdx @@ -0,0 +1,69 @@ +--- +title: Sanbase Alerts Example - Whale Activity +author: Daria Karpova +datePublished: 2022-04-04 +dateModified: 2025-08-14 +sidebar: + label: Alerts - Whale Activity + order: 30 +--- + +Whale activity consists of several related metrics; [Whale transaction volume](/metrics/whale-transaction-volume/), [Whale transaction count](/metrics/whale-transaction-count/#description), [Combined Balance of Holders](/metrics/supply-distribution/combined-balance-of-holders/), [Top Holders](/metrics/top-holders/#top-holders-balance) and [Amount in Top Holders](/metrics/amount-in-top-holders/). By closely monitoring the actions of major market players (which, depending on the asset, could be addresses worth $1M or more), you can gain insights to guide your own trading decisions. + +Many traders, understandably, are cautious about making decisions during volatile market periods. The risk of buying or selling at inopportune times is significant: will the prices fall? Will they rebound? + +At times, the market may appear calm, only for a whale to make a move and rapidly shift the landscape. + +Consider the following example. + +Between February and March 2021, we observed that whale activity (represented in pink and orange) for YFI often signaled price peaks (shown in green), which were invariably followed by substantial drops. However, starting from April, whale activity and price began to diverge. + +![whale-chart](image1.png) + +So, what happened next? + +In May 2021, YFI's price seemed to be steadily increasing, while whale activity remained stable. Then, on May 8, we noticed a sudden surge in transactions from whales, which coincided with another price peak, followed by a dramatic price drop. + +![whale-chart-2](image2.png) + +A wise trader could have considered the sudden surge as a possible reason to exit. Though how you choose to act on this information is entirely up to you, it can be just one additional data point that can inform a very valuable decision. Remember, knowledge is power, and timely knowledge is even more so, especially when it comes to trading. Spotting the surge manually requires a lot of manual effort, the smart trader utilizes the alerts feature. + +## Setting Up a Whale Transaction Alert + +In this guide, we will walk you through the process of setting up a Whale Transaction Alert. + +## Step 1: Navigate to Alerts and Choose an Asset to Monitor + +You can either select an asset you wish to monitor or use an asset from your existing watchlist. + +![alert-select-asset](image3.png) + +## Step 2: Selecting Metrics + +Navigate to the metrics section and choose your preferred 'Whale Transactions' from the On-Chain metrics set. + +![alert-select-metrics-1](image4.png) + +![alert-select-metrics-2](image5.png) + +Examine the chart thoroughly. In this example, the alert would have been triggered 79 times over a three-month period, which could be excessive. + +## Step 3: Fine-Tune Your Conditions + +Adjust your conditions until you're satisfied with the potential number of alerts. For example, you might want to switch to the percentage metric that moves up or down compared to the previous 7 days. + +In the example below, we've adjusted the conditions to yield a total of 21 alerts over a 3-month period. + +![alert-select-condition](image6.png) + +## Step 4: Choose Your Preferred Notification Methods and Frequency + +![alert-select-notifications](image7.png) + +## Step 5: Confirm Alert Name and Create Alert + +Ensure you are satisfied with the name of your alert. Once confirmed, click on the 'Create Alert' button. + +![alert-select-condition](image8.png) + +Congratulations, you have successfully created an alert! diff --git a/src/docs/education-and-use-cases/whale-monitoring-to-predict-market-moves/image10.png b/src/content/docs/guides/education-and-use-cases/whale-monitoring-to-predict-market-moves/image10.png similarity index 100% rename from src/docs/education-and-use-cases/whale-monitoring-to-predict-market-moves/image10.png rename to src/content/docs/guides/education-and-use-cases/whale-monitoring-to-predict-market-moves/image10.png diff --git a/src/docs/education-and-use-cases/whale-monitoring-to-predict-market-moves/image11.png b/src/content/docs/guides/education-and-use-cases/whale-monitoring-to-predict-market-moves/image11.png similarity index 100% rename from src/docs/education-and-use-cases/whale-monitoring-to-predict-market-moves/image11.png rename to src/content/docs/guides/education-and-use-cases/whale-monitoring-to-predict-market-moves/image11.png diff --git a/src/docs/education-and-use-cases/whale-monitoring-to-predict-market-moves/image12.png b/src/content/docs/guides/education-and-use-cases/whale-monitoring-to-predict-market-moves/image12.png similarity index 100% rename from src/docs/education-and-use-cases/whale-monitoring-to-predict-market-moves/image12.png rename to src/content/docs/guides/education-and-use-cases/whale-monitoring-to-predict-market-moves/image12.png diff --git a/src/docs/education-and-use-cases/whale-monitoring-to-predict-market-moves/image13.png b/src/content/docs/guides/education-and-use-cases/whale-monitoring-to-predict-market-moves/image13.png similarity index 100% rename from src/docs/education-and-use-cases/whale-monitoring-to-predict-market-moves/image13.png rename to src/content/docs/guides/education-and-use-cases/whale-monitoring-to-predict-market-moves/image13.png diff --git a/src/docs/education-and-use-cases/whale-monitoring-to-predict-market-moves/image9.png b/src/content/docs/guides/education-and-use-cases/whale-monitoring-to-predict-market-moves/image9.png similarity index 100% rename from src/docs/education-and-use-cases/whale-monitoring-to-predict-market-moves/image9.png rename to src/content/docs/guides/education-and-use-cases/whale-monitoring-to-predict-market-moves/image9.png diff --git a/src/content/docs/guides/education-and-use-cases/whale-monitoring-to-predict-market-moves/index.mdx b/src/content/docs/guides/education-and-use-cases/whale-monitoring-to-predict-market-moves/index.mdx new file mode 100644 index 000000000..5adf27d21 --- /dev/null +++ b/src/content/docs/guides/education-and-use-cases/whale-monitoring-to-predict-market-moves/index.mdx @@ -0,0 +1,166 @@ +--- +title: Whale Monitoring to Predict Market Moves +author: Santiment Team +datePublished: 2025-05-23 +dateModified: 2025-09-11 +sidebar: + order: 160 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + + + +It's important to monitor on how cryptocurrency whales are +treating their bags. Generally, if they're accumulating, it's a good sign +crypto market caps are continuing to rise. If they're moving many coins to +exchanges, on the other hand, it's a sign that a dump may be around the corner. + +There are several different methods to monitor whale activity on Santiment. +Let's go through a few of the most efficient ones: + +## Key Stakeholder Tiers (Supply Distribution) + +One of the best ways to get an idea of what whales are collectively doing with +their coins is by checking out the total holdings of key large whales that tend +to control the destiny of future price movements. For Bitcoin, we generally +suggest checking out the wallets holding 10 or more BTC (currently about \$1M +or more) or, more specifically the wallets holding between 10 to 10K BTC. You +can see them, and a few other [key whale tiers here](https://app.santiment.net/s/2wEU5Co9). + +![noborder](./image9.png) + +For most altcoins, since their market caps aren't nearly as massive as +Bitcoin's you can use a rule of thumb of finding the tier closest to \$100K, and +ranging up to the tier closest to \$10M. This range will typically (not always, +but usually) have some of the highest correlation on price movements. + +An easy way to create your own tiers and track groups of collective whale +wallets is to: + +1. Go to "Balance of Addresses" on the left panel, and add it to your current + chart template. + +2. Click on the "Merge" button on the chart tools that were added to your chart + template. + +3. Hit the checkmarks next to the tiers you'd like (do the math to calculate + how many coins equal \$100K up to $10M) + +4. Hit the confirm button + +## Specific Key Stakeholders Wallets + +Another method to keep tabs on whales is by opening the [Top Transactions table](https://app.santiment.net/s/kataWThn). For any asset that has whale +metrics on the platform, you will be presented with the 50 largest transfers +over the past 30 days. This table is complete with the date and time each +transaction occurred, as well as the wallet they sent to, and the raw +transaction hash link for further analysis/investigation. + +![noborder](./image10.png) + +You can either get to it from opening the linked text in the last paragraph, or +by going to the Charts page on Santiment, and searching for "Top Transactions" +in the left search bar, and double clicking the metric to add it to the current +chart. + +To take things further, you can always look up a specific wallet on +Santiment's [Historical +Balance](https://app.santiment.net/labs/balance?assets=) page to see how any +wallet's coin holdings have fluctuated over time. This feature also shows every +coin currently held within the wallet, as well as the total USD holdings of the +wallet. This can be highly useful when looking for specific whale addresses +that have a fairly strong correlation with where markets tend to move next. + +![noborder](./image11.png) + +If you see the chart page show up as blank, it may be because the wallet isn't +Bitcoin-based, Ethereum-based, or Litecoin-based. We do plan to have this +feature get further support for more networks down the road, though. + +## Whale Transaction Spikes + +For a more simplistic way to recognize when an asset's price pattern may be +about to change, check out the amount of "whale transactions" that exceed a +value of \$100K or more, or $1M or more. You can find the [default template for it here](https://app.santiment.net/s/n8ctb2Yd). + +An asset like Bitcoin, being the largest market cap in crypto, will naturally +have tens of thousands of \$100K+ whale transactions on any given day. But if +you venture outside the top 250 market caps or so, you'll come across coins +that only see 1 or 2 on any given day. + +![noborder](./image12.png) + +Whether the coin is a big or small asset, though, you'll still likely find +value in seeing when whales are becoming active again. Many make the mistake of +assuming that an increase in whale transactions is always a bullish sign. In +actuality, it is a sign of volatility and price direction change. When whales +make large transfers, they could equally be accumulating or dumping. So that's +why it can be very useful to reference it in tandem with the Key Stakeholder +Tiers. + +## Whale CEX Deposit Dashboard + + + +Often times, you may not be sure of what asset you are looking for, and you +simply want to see which coins may suddenly be getting significantly moved by +whales. We specifically have built a dashboard for tracking when large batches +of any coin are moving to centralized exchanges. This is especially useful as a +warning sign that a coin's price may soon dump, and it's a good time to take +profit. Coins typically move from cold wallets to centralized exchanges for one +reason, and it's to sell them. + +![noborder](./image13.png) + +We have written a couple of comprehensive articles about how to effectively use +this +dashboard [here](https://insights.santiment.net/read/try-the-new-centralized-exchange-deposit-dashboard-now-8202) and [here](https://insights.santiment.net/read/using-santiment-s-whale-deposit-centralized-exchange-dashboard-8463). +And we definitely encourage you to check them out to begin utilizing this +helpful tool. + +Do you have some other ways you like to track whale activity on Santiment? Let +us know what you think about our suggestions, or if you have further ideas of +your own. We may just integrate more features if you have an idea on more +useful blockchain data scraping! + +--- + + + +**Explore the data** + +To explore the data you can start a two-week free trial from [the pricing page](https://app.santiment.net/pricing) + + + +--- + + + +**Disclaimer** + +The opinions expressed in the post are for general informational +purposes only and are not intended to provide specific advice or +recommendations for any individual or on any specific security or investment +product. + + diff --git a/src/content/docs/guides/glossary/asset/index.mdx b/src/content/docs/guides/glossary/asset/index.mdx new file mode 100644 index 000000000..afeeb88d0 --- /dev/null +++ b/src/content/docs/guides/glossary/asset/index.mdx @@ -0,0 +1,50 @@ +--- +title: Asset +author: Santiment Team +datePublished: 2019-12-04 +dateModified: 2025-04-29 +--- + +An **asset** refers to any cryptocurrency or crypto token that can be associated with a price. Examples of assets include Bitcoin, Ethereum, and Santiment. + +The terms 'asset' and 'project' are often used interchangeably in most contexts. + +## Availability + +There are several methods to determine which assets are supported by the products within the Santiment platform. + +### [Sanpy](https://github.com/santiment/sanpy) + +To use Sanpy, you need to import the `san` module. After importing the module, you can use the `get` method to retrieve data. Here's how you can do it: + +```python +import san +san.get("projects/all") +``` + +### [SanAPI](https://api.santiment.net) + +The GraphQL request below retrieves a list of all assets: + +```graphql explorer +{ + allProjects { + name + slug + } +} +``` + +You can execute this query using `curl` as shown below: + +```sh +curl \ + -X POST \ + -H "Content-Type: application/json" \ + --data '{ "query": "{ allProjects { name slug }}" }' \ + https://api.santiment.net/graphql +``` + +### [Sansheets](https://sheets.santiment.net/) + +After installing the plugin, you can utilize the `=SAN_ALL_PROJECTS()` function to retrieve a comprehensive list of all projects. diff --git a/src/docs/glossary/deposit-addresses/exchange-768x413.png b/src/content/docs/guides/glossary/deposit-addresses/exchange-768x413.png similarity index 100% rename from src/docs/glossary/deposit-addresses/exchange-768x413.png rename to src/content/docs/guides/glossary/deposit-addresses/exchange-768x413.png diff --git a/src/content/docs/guides/glossary/deposit-addresses/index.mdx b/src/content/docs/guides/glossary/deposit-addresses/index.mdx new file mode 100644 index 000000000..9e4d287b6 --- /dev/null +++ b/src/content/docs/guides/glossary/deposit-addresses/index.mdx @@ -0,0 +1,30 @@ +--- +title: Deposit Addresses +author: Santiment Team +datePublished: 2019-11-21 +dateModified: 2023-07-11 +--- + +## Understanding Deposit Addresses + +When a user wishes to deposit into an exchange, two transactions take place: + +1. Coins are transferred from a personal wallet to a temporary wallet, which is created by the exchange for each individual user. +2. Coins are then moved from this temporary wallet to the main exchange wallet. + +[![wallet-to-exchange-flow](exchange-768x413.png)](https://santiment.net/wp-content/uploads/2019/02/exchange.png) + +These temporary wallets are referred to as **deposit addresses** or deposits. They provide valuable insights into the behavior of a specific network. + +Analyzing deposit addresses can be beneficial in several ways: + +1. The total number of deposit addresses can serve as a reliable indicator of the **actual number of people** trading a specific coin on the exchanges. While not 100% accurate, as a single person may have multiple deposit addresses, it provides a clear **upper limit** on the total number of users and works well dynamically. + +2. Network-level metrics, such as total transaction volume, do not provide detailed information about different sections of network activity. Distinguishing which part of total network activity is generated by deposit addresses allows for a **more granular** exploration of a specific market event. + +3. Monitoring the activity of deposit addresses can help us examine and predict market movements with a **new level of awareness**. + +Our metric for deposit addresses: + +[Daily Active Deposits (DAD)](/metrics/daily-active-deposits/) + diff --git a/src/content/docs/guides/glossary/index.mdx b/src/content/docs/guides/glossary/index.mdx new file mode 100644 index 000000000..afcb19bc2 --- /dev/null +++ b/src/content/docs/guides/glossary/index.mdx @@ -0,0 +1,215 @@ +--- +title: Glossary of API Terms +author: Ivan +datePublished: 2019-12-04 +dateModified: 2025-04-30 +sidebar: + label: Glossary + order: 80 +--- + +This glossary provides definitions for terms frequently used throughout our documentation. + +- [GraphQL-related](#graphql-related) + - [Query](#query) + - [Field](#field) +- [Santiment-related](#santiment-related) + - [Metric](#metric) + - [Asset](#asset) + - [Slug](#slug) + - [Interval](#interval) + - [ISO8601](#iso8601) + - [API Key](#api-key) + +## GraphQL-related + +More about all the GraphQL-related terms can be found on the [GraphQL documentation](https://graphql.org/learn/) website. + +### query + +A "query" in the context of [GraphQL](https://graphql.org/learn/) refers to a read operation. For instance, in the example below, `getAccessRestrictions` is the query. Essentially, in a GraphQL request, the `query` is the function that is invoked. + +```graphql +{ + getAccessRestrictions { + name + type + isRestricted + restrictedFrom + restrictedTo + } +} +``` + +**[Run in explorer](https://api.santiment.net/graphiql?query=%7B%0A%20%20getAccessRestrictions%20%7B%0A%20%20%20%20name%0A%20%20%20%20type%0A%20%20%20%20isRestricted%0A%20%20%20%20restrictedFrom%0A%20%20%20%20restrictedTo%0A%20%20%7D%0A%7D)** + +A single GraphQL request can accommodate multiple queries. In the following example, there are two `getMetric` queries. To avoid name collision in the returned result, each query is given an alias. + +```graphql +{ + price_usd_min_interval: getMetric(metric: "price_usd") { + metadata { + minInterval + } + } + nvt_min_interval: getMetric(metric: "nvt") { + metadata { + minInterval + } + } +} +``` + +**[Run in explorer]()** + +If different queries are used, aliases can be omitted. In the next example, the queries are `getMetric` and `currentUser`. + +```graphql +{ + getMetric(metric: "price_usd") { + metadata { + minInterval + } + } + currentUser { + id + username + email + } +} +``` + +**[Run in explorer]()** + +A query can either return the specified result directly or provide a set of fields that the user can choose from. + +### Field + +The term refers to a [GraphQL field](https://graphql.org/learn/queries/#fields). Fields are used to specify which parts of a complex object should be returned in a query. The following examples demonstrate the use of different fields in the same `getMetric` query. + +In the first example, the `timeseriesData` field is used. The `datetime` and `value` are also fields. This illustrates that fields can either have arguments or not. + +```graphql explorer +{ + getMetric(metric: "active_addresses_24h") { + timeseriesDataJson( + slug: "ethereum" + from: "2019-01-01T00:00:00Z" + to: "2019-01-01T03:00:00Z" + interval: "30m" + ) + } +} +``` + +In the second example, the `aggregatedTimeseriesData` field is used. + +```graphql explorer +{ + getMetric(metric: "active_addresses_24h") { + aggregatedTimeseriesData( + slug: "ethereum" + from: "2019-01-01T00:00:00Z" + to: "2019-01-01T03:00:00Z" + aggregation: AVG + ) + } +} +``` + +## Santiment-related + +### Metric + +In the context of Santiment's API, a metric is a term with a specific meaning. It refers to a set of data points that carry a particular significance. There are two types of metrics: [timeseries metrics](/metrics/details/data-type#timeseries-data) and [histogram metrics](/metrics/details/data-type#histogram-data). + +Consider the following example where `nvt` is the metric and `getMetric` is the query. + +```graphql explorer +{ + getMetric(metric: "nvt") { + timeseriesDataJson( + slug: "santiment" + from: "2019-01-01T00:00:00Z" + to: "2019-09-01T00:00:00Z" + includeIncompleteData: true + interval: "7d" + ) + } +} +``` + +In some instances, the query and the metric are identical. In the next example, `historicalBalance` is both the query and the metric. This scenario occurs when a query fetches exactly one metric (the metric argument is implicit), unlike `getMetric` where the metric argument is explicitly passed with the `metric` argument. + +```graphql +{ + historicalBalance( + selector: { slug: "santiment", infrastructure: "ETH" } + address: "0xA0D8F33Ef9B44DaAE522531DD5E7252962b09207" + from: "2019-01-01T00:00:00Z" + to: "2019-09-01T00:00:00Z" + interval: "30d" + ) { + datetime + balance + } +} +``` + +**[Run in explorer]()** + +### Asset + +An asset refers to any cryptocurrency or crypto token that can be associated with a specific price. Examples of assets include Bitcoin, Ethereum, and Santiment tokens. For more detailed information, please visit our [glossary on assets](/glossary/asset). + +### Slug + +A slug is a unique string that identifies an [asset](/glossary/asset). You can find the slug of various projects, along with their names, tickers, and other data, by using the [allProjects API](https://api.santiment.net/graphiql?query=%7B%0A%20%20allProjects%20%7B%0A%20%20%20%20slug%0A%20%20%20%20name%0A%20%20%20%20ticker%0A%20%20%20%20infrastructure%0A%20%20%20%20mainContractAddress%0A%20%20%7D%0A%7D%0A). + +### Interval + +An interval is a representation of time intervals such as 5 minutes, 12 hours, 10 days, or 4 weeks. There are two types of interval representations: fixed time intervals and functions. + +A fixed time interval is a string that begins with a number and is followed by one of these suffixes: + +- `s` - second +- `m` - minute +- `h` - hour +- `d` - day +- `w` - week + +Here are examples of intervals: + +- 5 minutes - `5m` +- 12 hours - `12h` +- 10 days - `10d` +- 4 weeks - `4w` + +> **Note:** There is no suffix for specifying months because a month does not contain a fixed number of days. + +The second type of interval representation is through function names. Functions can achieve two main objectives that fixed intervals cannot: + +- Functions can create non-fixed interval ranges, such as months, which can have between 28 and 31 days. +- Functions can change the alignment. For example, if the requirement is not just 7 days, but also for the time intervals to start on Monday or Sunday. + +The following functions are supported: + +- toStartOfHour +- toStartOfDay +- toMonday +- toStartOfWeek (aligns dates on Sundays) +- toStartOfMonth +- toStartOfQuarter +- toStartOfYear + +Intervals are used when fetching timeseries data. If the raw data is available at 5-minute intervals but you want to fetch it daily, you should provide `interval: "1d"` as a parameter. In this case, the default aggregation will be applied to all 288 5-minute data points in a day to compute the value for the entire day. The type of aggregation varies based on the metric. In some cases, taking the average or the last value is required (price), while in other cases, taking the sum of all values is necessary (transaction volume), and so on. + +### ISO8601 + +The API uses the ISO8601 format for date and time. The format is structured as follows: `--T::Z`. + +For instance, January 10th, 2019 at 12:34:56 would be represented as `2019-01-10T12:34:56Z`. + +### API Key + +Your API key is essential for accessing the premium features provided by our API. For more detailed information, please refer to the [API Authentication](/sanapi/accessing-the-api/#authentication) section. diff --git a/src/docs/products-and-plans/create-an-api-key/41_account_settings.png b/src/content/docs/guides/products-and-plans/create-an-api-key/41_account_settings.png similarity index 100% rename from src/docs/products-and-plans/create-an-api-key/41_account_settings.png rename to src/content/docs/guides/products-and-plans/create-an-api-key/41_account_settings.png diff --git a/src/docs/products-and-plans/create-an-api-key/42_account_settings2.png b/src/content/docs/guides/products-and-plans/create-an-api-key/42_account_settings2.png similarity index 100% rename from src/docs/products-and-plans/create-an-api-key/42_account_settings2.png rename to src/content/docs/guides/products-and-plans/create-an-api-key/42_account_settings2.png diff --git a/src/docs/products-and-plans/create-an-api-key/43_API_key.png b/src/content/docs/guides/products-and-plans/create-an-api-key/43_API_key.png similarity index 100% rename from src/docs/products-and-plans/create-an-api-key/43_API_key.png rename to src/content/docs/guides/products-and-plans/create-an-api-key/43_API_key.png diff --git a/src/docs/products-and-plans/create-an-api-key/account-icon.png b/src/content/docs/guides/products-and-plans/create-an-api-key/account-icon.png similarity index 100% rename from src/docs/products-and-plans/create-an-api-key/account-icon.png rename to src/content/docs/guides/products-and-plans/create-an-api-key/account-icon.png diff --git a/src/docs/products-and-plans/create-an-api-key/generate-apikey-button.png b/src/content/docs/guides/products-and-plans/create-an-api-key/generate-apikey-button.png similarity index 100% rename from src/docs/products-and-plans/create-an-api-key/generate-apikey-button.png rename to src/content/docs/guides/products-and-plans/create-an-api-key/generate-apikey-button.png diff --git a/src/content/docs/guides/products-and-plans/create-an-api-key/index.mdx b/src/content/docs/guides/products-and-plans/create-an-api-key/index.mdx new file mode 100644 index 000000000..45ff41d50 --- /dev/null +++ b/src/content/docs/guides/products-and-plans/create-an-api-key/index.mdx @@ -0,0 +1,34 @@ +--- +title: How to Create an API Key +author: Santiment Team +datePublished: 2019-11-22 +dateModified: 2023-10-20 +sidebar: + label: Create an API key + order: 60 +--- + +All of our current products use the [Sanbase](https://app.santiment.net) +account as reference. You cannot use Sanbase as a login +option for the API or for Sansheets. This is +where an API key comes in. + +When you create a Sanbase account, you have the ability to generate an API key that carries the same access rights for use with our other products. The access rights assigned to this key depend on your subscription plan. + +## Creating an API Key + +To create an API key, visit the account settings of [Sanbase](https://app.santiment.net/account), [SanAPI](https://api.santiment.net/account), or [Sansheets](https://sheets.santiment.net/account). + +In the account settings, click on the **`Generate`** button to create a new key. + +![generate apikey button](generate-apikey-button.png) + +The key will be displayed as a string. You can copy it and use it wherever needed. + +![revoke apikey button](revoke-apikey-button.png) + +You can revoke the key at any time from the same location. + +## Using an API Key + +The [Authentication Section](/sanapi#authentication) demonstrates how to include an API key in your requests. diff --git a/src/docs/products-and-plans/create-an-api-key/revoke-apikey-button.png b/src/content/docs/guides/products-and-plans/create-an-api-key/revoke-apikey-button.png similarity index 100% rename from src/docs/products-and-plans/create-an-api-key/revoke-apikey-button.png rename to src/content/docs/guides/products-and-plans/create-an-api-key/revoke-apikey-button.png diff --git a/src/docs/products-and-plans/how-to-pay-with-crypto/PaySan.jpg b/src/content/docs/guides/products-and-plans/how-to-pay-with-crypto/PaySan.jpg similarity index 100% rename from src/docs/products-and-plans/how-to-pay-with-crypto/PaySan.jpg rename to src/content/docs/guides/products-and-plans/how-to-pay-with-crypto/PaySan.jpg diff --git a/src/content/docs/guides/products-and-plans/how-to-pay-with-crypto/index.mdx b/src/content/docs/guides/products-and-plans/how-to-pay-with-crypto/index.mdx new file mode 100644 index 000000000..4af7194d3 --- /dev/null +++ b/src/content/docs/guides/products-and-plans/how-to-pay-with-crypto/index.mdx @@ -0,0 +1,64 @@ +--- +title: How to Pay with Crypto +author: Santiment Team +description: Instructions on how to pay with crypto +datePublished: 2020-02-05 +dateModified: 2025-10-28 +sidebar: + label: 'How to pay with crypto' + order: 50 +--- + +> **Note:** Payment in crypto is only available for yearly subscriptions, not for monthly ones. + +## Pay With ETH or DAI + +To drive cryptocurrency mass adoption, we let users pay with various cryptocurrencies for quick, easy access to our services. + +_[Make use of your SAN tokens for a hefty discount](/products-and-plans/how-to-pay-with-crypto/#burning-san-tokens-to-make-payments)._ + +To make a payment with crypto, you can choose to use `ETH`, `DAI`, `USDC`, or `USDT` for any of our products and services. If you would like to pay with an unlisted token, please contact us at [support@santiment.net](mailto:support@santiment.net). + +Send either form of crypto to this address: + +`pay.santiment.eth` +or +`0x1F3dF0b8390BB8e9e322972C5e75583E87608Ec2` + +![](PaySan.jpg) + +After making the payment please contact our team at [support@santiment.net](mailto:support@santiment.net) so we can activate your account. + +> **Note:** We accept `ETH`, `DAI`, `USDC`, or `USDT` for any of our products and services. + +## Burning SAN Tokens for Subscription Payments + +SAN token holders can burn their tokens to pay for subscriptions, instead of using regular payments. + +What is token burning? It's the process of sending tokens to an invalid address, permanently removing them from circulation. + +Benefits: + +- 2x Value: If you Burn SAN we credit you at 2x the current market rate. +- Supply reduction: Every burn decreases the total SAN supply, increasing proportional ownership for all holders. + +Please be aware of the following restrictions: + +> - Paying via SAN burn is limited to Sanbase subscriptions and is not available for SanAPI subscriptions. +> - SAN burn is not available for residents of the Swiss Confederation due to tax regulations. +> - SAN burn can only be applied to yearly base subscription prices. No other discounts are applicable when using SAN burn. + +If you are ready to burn SAN for a yearly Sanbase Pro subscription, please contact us at [support@santiment.net](mailto:support@santiment.net) and we will gladly guide you through the process. + +## Providing SAN Uniswap Liquidity + +Another way to gain Pro access to Sanbase is by providing liquidity for the SAN/ETH trading pair on Uniswap V2! As long as you provide 3000+ SAN to our Uniswap V2 pool (and the corresponding amount of ETH), you will receive FREE access to Sanbase Pro, including all our metrics, new templates, and daily market insights! + +You can add liquidity to the SAN|ETH pool here: [https://app.uniswap.org/#/add/v2/ETH/0x7C5A0CE9267ED19B22F8cae653F198e3E8daf098](https://app.uniswap.org/#/add/v2/ETH/0x7C5A0CE9267ED19B22F8cae653F198e3E8daf098). + +As soon as you hold the LP tokens in your wallet and connect it to your account or log in with it, you will automatically receive a Pro subscription within one hour. 💗 + +- [How to sign up/sign in with Metamask](/sanbase/logging-into-sanbase/#first-login-using-metamask) +- [How to connect your wallet to an existing account](/san-tokens/connect-a-wallet-to-the-sanbase-account/#connecting-a-wallet-to-an-existing-account) + +_Please make sure to do your own due diligence regarding the Uniswap protocol and the risks involved in providing liquidity. Santiment has no control over the Uniswap protocol and cannot be held accountable for any potential losses of any kind._ diff --git a/src/content/docs/guides/products-and-plans/index.mdx b/src/content/docs/guides/products-and-plans/index.mdx new file mode 100644 index 000000000..e775ea08b --- /dev/null +++ b/src/content/docs/guides/products-and-plans/index.mdx @@ -0,0 +1,17 @@ +--- +title: Santiment products and plans +author: Santiment Team +datePublished: 2019-12-03 +dateModified: 2025-10-28 +sidebar: + label: Products and Plans + order: 60 +--- + +- [Plans - Sanbase](/products-and-plans/sanbase-plans) +- [Plans - SanAPI](/products-and-plans/sanapi-plans) +- [Sanbase subscription via SanR NFT](/products-and-plans/sanbase-subscription-via-sanr-nft) +- [Santiment products](/products-and-plans/santiment-products/) +- [How to pay with crypto](/products-and-plans/how-to-pay-with-crypto/) +- [Create an API key](/products-and-plans/create-an-api-key/) +- [Sanbase PRO features](/products-and-plans/sanbase-pro-features/) diff --git a/src/content/docs/guides/products-and-plans/sanapi-plans/index.mdx b/src/content/docs/guides/products-and-plans/sanapi-plans/index.mdx new file mode 100644 index 000000000..e4e015e4c --- /dev/null +++ b/src/content/docs/guides/products-and-plans/sanapi-plans/index.mdx @@ -0,0 +1,44 @@ +--- +title: Santiment API Plans +author: David Utro +datePublished: 2020-04-08 +dateModified: 2025-10-28 +sidebar: + label: 'Plans - SanAPI' + order: 20 +--- + +## Overview + +Santiment API Plans provide access to various metrics through the API endpoint: [https://api.santiment.net](https://api.santiment.net). +Check the [pricing page](https://app.santiment.net/pricing) for the latest plans and pricing. + +## Plans for Individuals + +| Feature | **Free Plan** | **Sanbase Pro Plan** | **Sanbase Max Plan** | +| ------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| **API Access** | | | | +| Free Metrics | Full access | Full access | Full access | +| Restricted Metrics | Partial access:
    • 1 years of historical data
    • 30 days lag | Partial access:
    • 1 years of historical data
    • 30 days lag | Partial access:
    • 1 years of historical data
    • No realtime restriction | +| **Rate Limits** | | | | +| Monthly Limit | 1,000 API calls | 5,000 API calls | 80,000 API calls | +| Hourly Limit | 500 API calls | 1,000 API calls | 4,000 API calls | +| Per Minute Limit | 100 API calls | 100 API calls | 100 API calls | +| **Sanbase Access** | | | | +| Free Metrics | Full access | Full access | Full access | +| Restricted Metrics | Partial access:
    • 1 years of historical data
    • 30 days lag | Partial access:
    • 1 years of historical data
    • 30 days lag | Partial access:
    • 1 years of historical data
    • Realtime data | +| Alerts Limit | 3 alerts allowed | 20 alerts allowed | 20 alerts allowed | +| Insights Access | Limited access | Full access | Full access | + +## Plans for Business + +| Feature | **Business Pro Plan** | **Business Max Plan** | **Enterprise Plan** | +| ------------------ | ------------------------------------------------------------------------------ | --------------------------------------------------- | --------------------------------------------------- | +| **API Access** | | | | +| Free Metrics | Full access | Full access | Full access | +| Restricted Metrics | Partial access:
    • 2 years of historical data
    • No realtime restriction | Full access | Full access | +| **Rate Limits** | | | | +| Monthly Limit | 600,000 API calls | 1,200,000 API calls | custom | +| Hourly Limit | 30,000 API calls | 60,000 API calls | custom | +| Per Minute Limit | 600 API calls | 1,200 API calls | custom | +| **Sanbase Access** | Full access to [Sanbase](https://app.santiment.net) | Full access to [Sanbase](https://app.santiment.net) | Full access to [Sanbase](https://app.santiment.net) | diff --git a/src/content/docs/guides/products-and-plans/sanbase-plans/index.mdx b/src/content/docs/guides/products-and-plans/sanbase-plans/index.mdx new file mode 100644 index 000000000..7336b6873 --- /dev/null +++ b/src/content/docs/guides/products-and-plans/sanbase-plans/index.mdx @@ -0,0 +1,76 @@ +--- +title: Sanbase Plans +author: David Utro +datePublished: 2020-04-08 +dateModified: 2025-10-28 +sidebar: + label: 'Plans - Sanbase' + order: 10 +--- + +## Overview + +Sanbase Plans provide access to various metrics through the [Sanbase website](https://app.santiment.net). + +## Free Plan + +### Sanbase + +- Full access to free metrics +- Partial access to restricted metrics on the Sanbase website: + - 2 years of historical data + - Last 30 days of data are cut-off +- Allowed number of alerts: 3 +- Limited access to insights + +### API + +- Full access to free metrics +- Partial access to restricted metrics via Graphql API: + - 1 year of historical data + - Last 30 days of data are cut-off +- Rate limits: + - 1000 API calls per month + - 500 API calls per hour + - 100 API calls per minute +- Detailed metrics access restrictions can be found [here]() + +## Pro Plan + +The Pro Plan includes everything in the Free Plan, plus: + +### Sanbase + +- Full access to all metrics on the Sanbase website +- Allowed number of alerts: 20 +- Full access to PRO insights +- Full access to [Google Sheets plugin](https://sheets.santiment.net) + +### API + +- Partial access to restricted metrics via Graphql API: + - 1 year of historical data + - The last 30 days of data are cut-off +- Rate limits: + - 5000 API calls per month + - 1000 API calls per hour + - 100 API calls per minute +- Detailed metrics access restrictions can be found [here]() + +## Max Plan + +The Max Plan includes everything in the Pro Plan, plus: + +### Sanbase + +- Allowed number of alerts: 50 + +### API + +- Partial access to restricted metrics via the Graphql API: + - 2 years of historical data + - No realtime restriction +- Rate limits + - 80K API calls per month + - 4K API calls per hour + - 100 API calls per minute diff --git a/src/content/docs/guides/products-and-plans/sanbase-pro-features/index.mdx b/src/content/docs/guides/products-and-plans/sanbase-pro-features/index.mdx new file mode 100644 index 000000000..7d395f168 --- /dev/null +++ b/src/content/docs/guides/products-and-plans/sanbase-pro-features/index.mdx @@ -0,0 +1,82 @@ +--- +title: Sanbase PRO Features +description: A rundown of everything you have access to with Sanbase Pro +author: Santiment Team +datePublished: 2019-12-19 +dateModified: 2022-12-14 +sidebar: + order: 70 +--- + +Our crypto behavior analysis & monitoring platform is packed with custom tools and features to give you context and remove noise from the crypto markets. + +Here’s a rundown of everything you now have access to with Sanbase Pro: + +## Full Historical and Present-Day Data for All Sanbase Metrics + +Here are a few examples of how to use our metrics: + +- [6 Different Ways](https://insights.santiment.net/read/6-ways-you-could-have-caught-ren%E2%80%99s-summer-tops-643) to use Sanbase to spot forming tops +- [Using Token Age Consumed](https://insights.santiment.net/read/btc-%22coin-days-destroyed%22-spiked.-volatility-is-coming.-672) to predict volatility cycles +- [Identifying Trend Reversals](https://insights.santiment.net/read/chainlink-hits-ath-following-coinbase-listing---perhaps-it's-time-to-chill-541) with a combination of on-chain and social indicators + +## Access to our private #sanbase-pro Discord channel + +With Sanbase Pro, you also get access to our private Discord channel on the Santiment server, known as #sanbase-pro. This exclusive channel is for our paid members, where you can engage in discussions about the current state of the markets and the direction of our data with both our staff and top-tier traders who use our platform! Discussions include: + +- In-depth analysis of Santiment's key leading indicators, and whether they're pointing to buy, hold, or sell opportunities +- Assistance with any aspect of the platform that is causing you trouble +- Improvement suggestions for our staff, and how we can create a better experience for you as a VIP member of Santiment's community + +Enjoy discussing anything and everything beyond just the more generic content found in our #general channel on the Discord server. You'll be amazed by the high-level discussions we have there, and the insights uncovered from our most valued members! + +## Exclusive Market Insights with Sanbase Pro + +Sanbase Pro grants you access to special market reports and daily analysis produced by the Santiment team. Pro Insights include: + +- Actionable market calls based on our in-house signals and indicators +- Daily briefs on the behavior of whales, miners, traders, and other market stakeholders +- Timely analysis of short-term market trends and top coins to watch + +Each Santiment Insight doubles as a crash course on exactly how to use on-chain, social, and development data to clarify the crypto markets and its biggest driving forces. + +Learn it today, apply it tomorrow. + +## Full Access to Sansheets + +Our plugin allows you to import Santiment data directly into Google Spreadsheets. To help you get started, we've provided a few pre-made Sansheets templates: + +- [Determine the most profitable trading days](https://docs.google.com/spreadsheets/d/1RD9AMy2hLWPix0DCupl-LaN5aloFkd_BQDvzJrgU0qI/edit?usp=sharing) for any coin +- [Analyze any coin's risk-adjusted returns](https://docs.google.com/spreadsheets/d/1mHLRlP2H3hFvomO1fVDlxdmpWWZcQcUx-eT6WUDMgqs/edit?usp=sharing) (Sharpe and Sortino ratios) +- [Backtest a 'moving average' strategy](https://docs.google.com/spreadsheets/d/1YEm8qdqJvkHCTUwEmOyQLfkZqtQ0ndwo0GWxGsCRnSQ/edit?usp=sharing) for any coin +- Set up a [dynamic portfolio manager](https://docs.google.com/spreadsheets/d/1itY_q3KvC-KhOpY21wtmeAj5lL4qT8gbMvilgt8avZw/edit?usp=sharing) +- [Track the NVT](https://docs.google.com/spreadsheets/d/1Sb8SjyvJYdRTvxZZtFRfLnLrEssF6Uq2feCmK8VSgF8/view) of any coin + +## Unlimited number of Signals + +and Access to All Future Signals Added to Sanbase (Coming Soon!) + +Here are a few pre-made Signals to get you started: + +- [15% spike in daily addresses transferring ETH](https://app.santiment.net/sonar/signal/789?title=Ethereum%20daily%20active%20addresses%20up%2015%25%20compared%20to%201%20day%28s%29%20earlier) (signaling elevated on-chain activity) +- [5%+ dip in BTC’s price in 24 hours](https://app.santiment.net/sonar/signal/790?title=Bitcoin%20price%20goes%20down%205%25%20compared%20to%201%20day%28s%29%20earlier) (triggered at several bottoms in past 3 months) +- [Chainlink’s (LINK) appearance on our daily Emerging Trends](https://app.santiment.net/sonar/signal/787?title=ChainLink%20in%20trending%20assets%2Fprojects) (indicating a potential top) +- [Price/volume divergence for XMR](https://app.santiment.net/sonar/signal/788?title=Price%2Fvolume%20difference%20between%20an%20Monero%20price%20and%20trading%20volume) (previously triggered at Monero’s 1-year high) + +## Weekly Performance Analytics for All Your Sanbase Watchlists + +To activate them, click on "Weekly Report" in the upper right corner of your Watchlist's page. + +## Special End-of-Month Reports from the Santiment Team + +We cover the most important findings from our data and metrics. + +
    + +If you have any questions, please let us know as soon as possible. [Join our Discord](https://santiment.net/discord) for even faster assistance! + +A message from Maksim Balashevich, our founder: + +> Excited to have you onboard - together we are crossing the sea from a centralized to a decentralized world, from uncertainty to clarity, from too much noise to "I get only what I need when I need it." +> +> This is a pretty long way to get to the final destination. But as is the case with every big journey, it starts with the first step. I’m excited we get to walk it together. diff --git a/src/content/docs/guides/products-and-plans/sanbase-subscription-via-sanr-nft/index.mdx b/src/content/docs/guides/products-and-plans/sanbase-subscription-via-sanr-nft/index.mdx new file mode 100644 index 000000000..1019f9fd7 --- /dev/null +++ b/src/content/docs/guides/products-and-plans/sanbase-subscription-via-sanr-nft/index.mdx @@ -0,0 +1,61 @@ +--- +title: Sanbase subscription via SanR NFT +description: How to use SanR points to obtain Santiment's Sanbase PRO subscription +author: Santiment Team +datePublished: 2024-08-29 +dateModified: 2024-09-06 +sidebar: + order: 30 +--- + +Registered [SanR.app](https://sanr.app/) users can unlock free access to the [Sanbase platform](https://app.santiment.net/) by earning **SanR points**. This access includes all features provided under the [Sanbase Pro plan](/products-and-plans/sanbase-pro-features), valid for 12 months. Points are earned through active participation and performance in SanR Epochs and Leagues, giving SanR users a chance to enjoy premium analytics without spending money! + +## How it works + +To obtain a SanR NFT, users would need to compete in the Epoch Competitions and earn points by winning the SanR Leagues. Players can compete in the Leagues by providing crypto price signals. Each Epoch includes three distinct Leagues, each ranking players based on different performance criteria. These Leagues renew every two weeks, rewarding the top 10 players in each League at the end of the period. [Video guide on how to navigate SanR.](https://www.youtube.com/watch?v=NvsqZMdhQNg) + +The key to success is simple: post high-quality signals and stay consistent—whether your signals go up or down, consistency is what counts! + +![SanR League Rewards](https://github.com/user-attachments/assets/80e20f57-0126-452a-94ba-b5d42f70016f) + +**Minting the SanR NFT**: When a user has collected 10,000 points, they can exchange their points to mint an NFT via SanR.app, granting them 12-month access to the Sanbase Pro plan. + +![Minting NFT](minting-nft.png) + +
    + +Important notes + +- The Sanbase Pro subscription obtained via the SanR NFT is valid for **12 months**. +- Each user is allowed to mint the NFT and claim the free Sanbase subscription **only once**. +- The same MetaMask address used to mint the NFT must also be connected to the **Sanbase** account. +- Users with an existing Sanbase Pro plan **cannot activate** the free plan from the NFT. +- After the free NFT subscription expires, users must [pay](https://app.santiment.net/pricing) to continue accessing Sanbase Pro features. + +
    + +## Step-by-step process to claim your NFT + +![SanR Profile Page](https://github.com/user-attachments/assets/2f26bb0e-5627-4ddc-a048-83047c179d67) + +1. **Head to your SanR profile page** + To mint an NFT, you'll need a connected [MetaMask](https://metamask.io/) wallet. Start by visiting your profile page on [SanR.app](http://sanr.app/) by clicking the profile icon in the top-right corner of the application. +2. **Mint your NFT** + Once you’ve accumulated 10,000 SanR points, head to the **Reward History** section of your profile and exchange the points to mint your Sanbase subscription NFT. +3. **Create Sanbase account** + + If you don’t already have an account, go to the [Sanbase](https://app.santiment.net/) page and create one. If you’re already a user, simply log in. + + ![image](https://github.com/user-attachments/assets/2b7fcb78-9f3d-4b58-9946-b7f39ad44c9f) + +4. **Connect your MetaMask wallet to your Sanbase account in Account Settings** + + In your [Sanbase Account Settings](https://app.santiment.net/account), connect the **same MetaMask address** that was used to mint your NFT. This step is crucial to access the Sanbase Pro features. + + ![subscription.png](nft-subscription.png) + +5. **Click on the “Check NFT access” button** + + Scroll down to the subscription section of your [Account Settings](https://app.santiment.net/account) page and click the **“Check NFT access”** button. If your MetaMask wallet holds the SanR NFT, your Sanbase Pro plan will be activated automatically. + +If you encounter any issues, feel free to reach out via the [Santiment Discord](https://santiment.net/discord) for support. diff --git a/src/docs/products-and-plans/sanbase-subscription-via-sanr-nft/minting-nft.png b/src/content/docs/guides/products-and-plans/sanbase-subscription-via-sanr-nft/minting-nft.png similarity index 100% rename from src/docs/products-and-plans/sanbase-subscription-via-sanr-nft/minting-nft.png rename to src/content/docs/guides/products-and-plans/sanbase-subscription-via-sanr-nft/minting-nft.png diff --git a/src/docs/products-and-plans/sanbase-subscription-via-sanr-nft/nft-subscription.png b/src/content/docs/guides/products-and-plans/sanbase-subscription-via-sanr-nft/nft-subscription.png similarity index 100% rename from src/docs/products-and-plans/sanbase-subscription-via-sanr-nft/nft-subscription.png rename to src/content/docs/guides/products-and-plans/sanbase-subscription-via-sanr-nft/nft-subscription.png diff --git a/src/content/docs/guides/products-and-plans/santiment-products/index.mdx b/src/content/docs/guides/products-and-plans/santiment-products/index.mdx new file mode 100644 index 000000000..15df62247 --- /dev/null +++ b/src/content/docs/guides/products-and-plans/santiment-products/index.mdx @@ -0,0 +1,45 @@ +--- +title: Current products of Santiment +author: Santiment Team +datePublished: 2019-11-22 +dateModified: 2025-10-28 +sidebar: + label: 'Santiment Products' + order: 40 +--- + +## Sanbase + +Sanbase is our main product. It offers development, financial, on-chain, and social data for the cryptocurrency market which includes over 1500 crypto assets across an expanding number of blockchains. + +[https://app.santiment.net](https://app.santiment.net) + +## SanAPI + +SanAPI is the GraphQL API that powers Sanbase. We provide a Python library called [Sanpy](https://github.com/santiment/sanpy), which offers Python users easy access to the data. + +[https://api.santiment.net](https://api.santiment.net) + +![](neuro.png) + +## Sansheets + +Sansheets is a Google Sheets plugin that provides access to our data using simple functions directly within your spreadsheet. + +[https://sheets.santiment.net](https://sheets.santiment.net) + +![](sheets.png) + +![](sheets2.png) + +## Insights + +Insights is a comprehensive crypto analytics feed and research hub designed to deliver timely, data-driven market intelligence for cryptocurrency investors, traders, and project teams. Expect market reports, behavioral analysis, alerts, signals, and more posted by both the team and our community. + +[https://insights.santiment.net](https://insights.santiment.net) + +## SanR + +SanR is a decentralized price prediction platform designed to enhance transparency and accountability in price forecasting by leveraging the power of blockchain technology. SanR ensures that every prediction is immutable, verified, and recorded on a blockchain, eliminating the possibility of faked performance which creates real reputation for forecasters. + +[https://sanr.app/](https://sanr.app/) diff --git a/src/docs/products-and-plans/santiment-products/neuro.png b/src/content/docs/guides/products-and-plans/santiment-products/neuro.png similarity index 100% rename from src/docs/products-and-plans/santiment-products/neuro.png rename to src/content/docs/guides/products-and-plans/santiment-products/neuro.png diff --git a/src/docs/products-and-plans/santiment-products/sandata.png b/src/content/docs/guides/products-and-plans/santiment-products/sandata.png similarity index 100% rename from src/docs/products-and-plans/santiment-products/sandata.png rename to src/content/docs/guides/products-and-plans/santiment-products/sandata.png diff --git a/src/docs/products-and-plans/santiment-products/sheets.png b/src/content/docs/guides/products-and-plans/santiment-products/sheets.png similarity index 100% rename from src/docs/products-and-plans/santiment-products/sheets.png rename to src/content/docs/guides/products-and-plans/santiment-products/sheets.png diff --git a/src/docs/products-and-plans/santiment-products/sheets2.png b/src/content/docs/guides/products-and-plans/santiment-products/sheets2.png similarity index 100% rename from src/docs/products-and-plans/santiment-products/sheets2.png rename to src/content/docs/guides/products-and-plans/santiment-products/sheets2.png diff --git a/src/docs/san-tokens/connect-a-wallet-to-the-sanbase-account/41_account_settings_v4.png b/src/content/docs/guides/san-tokens/connect-a-wallet-to-the-sanbase-account/41_account_settings_v4.png similarity index 100% rename from src/docs/san-tokens/connect-a-wallet-to-the-sanbase-account/41_account_settings_v4.png rename to src/content/docs/guides/san-tokens/connect-a-wallet-to-the-sanbase-account/41_account_settings_v4.png diff --git a/src/docs/san-tokens/connect-a-wallet-to-the-sanbase-account/44_connect_wallet_with_mm_v2.png b/src/content/docs/guides/san-tokens/connect-a-wallet-to-the-sanbase-account/44_connect_wallet_with_mm_v2.png similarity index 100% rename from src/docs/san-tokens/connect-a-wallet-to-the-sanbase-account/44_connect_wallet_with_mm_v2.png rename to src/content/docs/guides/san-tokens/connect-a-wallet-to-the-sanbase-account/44_connect_wallet_with_mm_v2.png diff --git a/src/docs/san-tokens/connect-a-wallet-to-the-sanbase-account/45_connect_wallet_with_mm2.png b/src/content/docs/guides/san-tokens/connect-a-wallet-to-the-sanbase-account/45_connect_wallet_with_mm2.png similarity index 100% rename from src/docs/san-tokens/connect-a-wallet-to-the-sanbase-account/45_connect_wallet_with_mm2.png rename to src/content/docs/guides/san-tokens/connect-a-wallet-to-the-sanbase-account/45_connect_wallet_with_mm2.png diff --git a/src/docs/san-tokens/connect-a-wallet-to-the-sanbase-account/45_v2.png b/src/content/docs/guides/san-tokens/connect-a-wallet-to-the-sanbase-account/45_v2.png similarity index 100% rename from src/docs/san-tokens/connect-a-wallet-to-the-sanbase-account/45_v2.png rename to src/content/docs/guides/san-tokens/connect-a-wallet-to-the-sanbase-account/45_v2.png diff --git a/src/docs/san-tokens/connect-a-wallet-to-the-sanbase-account/46_connect_wallet_with_mm_sign_v2.png b/src/content/docs/guides/san-tokens/connect-a-wallet-to-the-sanbase-account/46_connect_wallet_with_mm_sign_v2.png similarity index 100% rename from src/docs/san-tokens/connect-a-wallet-to-the-sanbase-account/46_connect_wallet_with_mm_sign_v2.png rename to src/content/docs/guides/san-tokens/connect-a-wallet-to-the-sanbase-account/46_connect_wallet_with_mm_sign_v2.png diff --git a/src/content/docs/guides/san-tokens/connect-a-wallet-to-the-sanbase-account/index.mdx b/src/content/docs/guides/san-tokens/connect-a-wallet-to-the-sanbase-account/index.mdx new file mode 100644 index 000000000..2210477d4 --- /dev/null +++ b/src/content/docs/guides/san-tokens/connect-a-wallet-to-the-sanbase-account/index.mdx @@ -0,0 +1,70 @@ +--- +title: Connect a Wallet to Your Sanbase Account +author: Santiment Team +datePublished: 2022-09-26 +dateModified: 2023-05-17 +sidebar: + label: Connect a wallet to the Sanbase Account + order: 20 +--- + +import Notebox from '$components/markdown/Notebox.svelte' +import Resource from '$components/markdown/Resource.svelte' + + + This article describes how to stake SAN tokens that are already in your + possession. Please refer to [this article](/san-tokens/how-to-buy-san-tokens/) + to learn how to buy SAN tokens in the first place. + + +There are two ways to connect an Ethereum address to a Sanbase account. You can use MetaMask as a first login (and add an email address later) or add it to an existing account. + +## Logging into Sanbase using MetaMask + +This procedure is described in the article [Logging into Sanbase](/sanbase/logging-into-sanbase/). Please refer to this resource as needed. + +## Connecting a Wallet to an Existing Account + +After logging into Sanbase using your email address, open the account settings. These settings can be found in the upper right corner by hovering over your account icon: + +![noborder](./41_account_settings_v4.png) + +In account settings, you will find the following option. Click it: + +![noborder](./44_connect_wallet_with_mm_v2.png) + +If your MetaMask plugin is not logged in yet, please do so now as prompted. + + + Please note that MetaMask can create a local wallet within the browser, import + a wallet in multiple ways, or be connected to a hardware wallet like the + Ledger Nano S. Make sure your tokens are safe! + + +Please confirm the following steps to let Sanbase connect to MetaMask (and the selected wallet): + +![noborder](./45_v2.png) + +You will now be asked to sign a message with your private key. Please note that this is not a transaction, no tokens are sent, and no changes are made to the blockchain. This step simply proves that the connected account is in your control, and hereby belongs to you. + +![noborder](./46_connect_wallet_with_mm_sign_v2.png) + +After confirmation, you will see your address and SAN token balance in the account settings. + + + Staking currently means that you are holding a certain number of tokens at an + ETH address that Sanbase can check each time you visit. This is a lot like + maintaining a minimum balance in a bank account. In the future, we plan to + implement a more advanced staking mechanism. + + +## What's Next? + +Congratulations! You can now enjoy all the benefits provided to users holding SAN Tokens. + + + 💎 [SAN Tokens Holding Benefits](/san-tokens/san-tokens-holding-benefits) + +💰 [How to Buy SAN Tokens](/san-tokens/how-to-buy-san-tokens) + + diff --git a/src/docs/san-tokens/how-to-buy-san-tokens/Bancor.png b/src/content/docs/guides/san-tokens/how-to-buy-san-tokens/Bancor.png similarity index 100% rename from src/docs/san-tokens/how-to-buy-san-tokens/Bancor.png rename to src/content/docs/guides/san-tokens/how-to-buy-san-tokens/Bancor.png diff --git a/src/docs/san-tokens/how-to-buy-san-tokens/Kyber.png b/src/content/docs/guides/san-tokens/how-to-buy-san-tokens/Kyber.png similarity index 100% rename from src/docs/san-tokens/how-to-buy-san-tokens/Kyber.png rename to src/content/docs/guides/san-tokens/how-to-buy-san-tokens/Kyber.png diff --git a/src/docs/san-tokens/how-to-buy-san-tokens/Uniswap.png b/src/content/docs/guides/san-tokens/how-to-buy-san-tokens/Uniswap.png similarity index 100% rename from src/docs/san-tokens/how-to-buy-san-tokens/Uniswap.png rename to src/content/docs/guides/san-tokens/how-to-buy-san-tokens/Uniswap.png diff --git a/src/content/docs/guides/san-tokens/how-to-buy-san-tokens/index.mdx b/src/content/docs/guides/san-tokens/how-to-buy-san-tokens/index.mdx new file mode 100644 index 000000000..725586246 --- /dev/null +++ b/src/content/docs/guides/san-tokens/how-to-buy-san-tokens/index.mdx @@ -0,0 +1,74 @@ +--- +title: How to Buy SAN Tokens +author: Santiment Team +description: Instructions on how to acquire SAN tokens +datePublished: 2019-12-18 +dateModified: 2024-06-25 +sidebar: + order: 10 +--- + +import Notebox from '$components/markdown/Notebox.svelte' +import Resource from '$components/markdown/Resource.svelte' + +To use SAN tokens with our platform, you need to have them in a MetaMask wallet or a wallet supported by MetaMask (such as Trezor or Ledger). We will outline the three necessary steps to accomplish this. + +## Step 1: Install and Set Up MetaMask + +For instructions on how to install and set up MetaMask, visit [MetaMask.io](https://metamask.io). You will need an Ethereum address to hold SAN tokens and interact with the Santiment platform. You can create a new wallet in MetaMask, import an existing wallet, or connect MetaMask to a hardware wallet like **Ledger** or **Trezor**. + +**Result of Step 1:** Installed and working Metamask + +## Step 2: Add Funds to MetaMask Wallet + +To acquire SAN tokens, you will need to swap them for ETH or another ERC20 token. You can obtain ETH from a centralized exchange like [Bitfinex](https://bitfinex.com/t/ETH:USD) and then transfer it to your MetaMask wallet. + + + +**Result of Step 2:** Metamask wallet with ETH or ERC-20 token balance + + + +## Step 3: Swap ETH to SAN Tokens + +You can use decentralized exchanges or decentralized exchange aggregators to swap ETH or another ERC20 token for SAN tokens. These platforms operate in a similar manner. First, connect your Metamask wallet, and then proceed to swap ETH for SAN tokens. + +### Decentralized Exchanges + +#### Uniswap + +The SAN token is also available on [Uniswap](https://app.uniswap.org/#/swap?outputCurrency=0x7C5A0CE9267ED19B22F8cae653F198e3E8daf098&inputCurrency=ETH) at competitive rates. + +![noborder](Uniswap.png) + +#### Kyber + +San tokens are also available on [Kyber](https://kyber.network/) via [Kyber Swap](https://kyberswap.com/swap/ethereum/eth-to-san). If you don’t have any crypto, you may get it on [Kyber](https://kyberswap.com/buy-crypto) using your credit card. + +![noborder](Kyber.png) + +#### Bancor + +The SAN token is available on [Bancor](https://app.bancor.network/trade?from=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&to=0x7C5A0CE9267ED19B22F8cae653F198e3E8daf098). Once you connect your Metamask, you can [purchase ETH on Bancor](https://app.bancor.network/fiat) using your credit card and then swap it for SAN Tokens. + +![noborder](Bancor.png) + +### Decentralized Exchange Aggregators + +You can use a decentralized exchange aggregator like [ParaSwap.io](http://app.paraswap.io/) or [1inch.exchange](https://1inch.exchange/) to acquire SAN tokens. Using an aggregator may sometimes provide a better price than using an exchange directly. + +**Result of Step 3:** Metamask wallet with SAN token balance + +## What to do next? + +Now, simply [log in with a MetaMask](https://app.santiment.net/login) account that holds SAN tokens. Alternatively, you can [connect your Sanbase account](/san-tokens/connect-a-wallet-to-the-sanbase-account) with your MetaMask wallet in the settings. + +We'll detect the SAN tokens you're holding and grant you access to our discounts, based on the amount of tokens you hold. + + + +🔮 [Connect a wallet to the Sanbase account](/san-tokens/connect-a-wallet-to-the-sanbase-account/) + +💎 [SAN tokens holding benefits](/san-tokens/san-tokens-holding-benefits) + + diff --git a/src/content/docs/guides/san-tokens/index.mdx b/src/content/docs/guides/san-tokens/index.mdx new file mode 100644 index 000000000..c8dc3d489 --- /dev/null +++ b/src/content/docs/guides/san-tokens/index.mdx @@ -0,0 +1,28 @@ +--- +title: SAN tokens +author: Santiment Team +datePublished: 2019-12-03 +dateModified: 2024-04-17 +sidebar: + order: 70 +--- + +[SAN token](https://etherscan.io/token/0x7c5a0ce9267ed19b22f8cae653f198e3e8daf098) is an ERC-20 token issued by Santiment on the Ethereum blockchain. Santiment is a market data and analytic research platform that aims to help crypto beginners and experts by providing in-depth and accessible analyses of the market's condition at any given time. + +## Understanding Santiment business model + +Santiment is at the forefront of a strategic evolution, pivoting from a traditional Web 2.0 subscription model towards a Web 3.0 framework, with a stronger integration of SAN token economy. During the transition, access to a suite of tools, data, and metrics remains versatile. + +As we navigate through this transition, anticipate a gradual shift where the utility of SAN token will become central to the operation and governance of Santiment. Stay informed and be part of the journey towards a token-centric future. + +## [How to Buy SAN Tokens](/san-tokens/how-to-buy-san-tokens/) + +Learn how to acquire SAN tokens with our simple 3-step guide and enjoy the benefits of holding them. You can swap ETH or any ERC-20 tokens for SAN tokens. We are also working on an improved method to purchase SAN tokens directly on our website using a credit card. + +## [Connect a Wallet to Your Sanbase Account](/san-tokens/connect-a-wallet-to-the-sanbase-account/) + +Easily connect your cryptocurrency wallet and SAN token balance to your Sanbase account by following our straightforward and comprehensive instructions. + +## [SAN Token Holding Benefits](/san-tokens/san-tokens-holding-benefits/) + +Discover all the benefits provided to users who hold, stake, and contribute to SAN token liquidity. This includes various levels of discounts, the option to pay by burning SAN tokens, and even FREE access to a Sanbase PRO subscription. diff --git a/src/content/docs/guides/san-tokens/san-tokens-holding-benefits/index.mdx b/src/content/docs/guides/san-tokens/san-tokens-holding-benefits/index.mdx new file mode 100644 index 000000000..eecbe3e15 --- /dev/null +++ b/src/content/docs/guides/san-tokens/san-tokens-holding-benefits/index.mdx @@ -0,0 +1,62 @@ +--- +title: Benefits of Holding SAN Tokens +author: Santiment Team +datePublished: 2022-09-26 +dateModified: 2025-08-07 +sidebar: + label: SAN Tokens Holding Benefits + order: 30 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + +There are several benefits for our SAN token holders: + +- Sanbase Subscription Discount +- Sanbase Payment with SAN Tokens +- Sanbase Subscription in exchange for providing liquidity in the SAN/ETH Liquidity Pool on Uniswap + +## Use SAN Tokens for Discounts + +> :bulb: You can now use SAN tokens for a discount. +> :point_right: Holding more than 1,000 SAN tokens provides a 20% discount on all our plans. + +This discount will be automatically applied to your account if you log in with your crypto wallet or connect your wallet to your existing account. + +![noborder](sanpricing_v3.png) + +## Sanbase Payment with SAN Tokens + +You can burn your SAN Tokens to pay for a Sanbase subscription at 50% off the normal price. Once you burn your SAN tokens, we will credit your Sanbase account at a rate of twice the current market value. You can use your credits to pay for any available Sanbase plans. + + + +**Example:** If you burn 1000 SANs with an estimated value of $114.50 USD, we will credit your account with $229 USD in credit. + + + +If you're unfamiliar with what burning entails, it's simply the act of intentionally sending tokens to an invalid address to permanently remove them from the available circulating supply. + +You can pay for your subscription plan partially by using credits from SAN burning, and pay the remainder in USD. + + + +If you are ready to burn SAN for a yearly Sanbase Pro subscription, please let us know at [support@santiment.net](mailto:support@santiment.net) and we will be happy to walk you through the process. + + + +## Sanbase Access for Providing SAN Uniswap Liquidity + +By providing 3,000+ SAN to our Uniswap V2 pools (and the corresponding amount of ETH), you get FREE access to Sanbase Pro, including all our metrics, new templates, and daily market insights! + +![noborder](liquidity.png) + +You can add liquidity to the SAN/ETH pool here: [https://app.uniswap.org/#/add/v2/ETH/0x7C5A0CE9267ED19B22F8cae653F198e3E8daf098](https://app.uniswap.org/#/add/v2/ETH/0x7C5A0CE9267ED19B22F8cae653F198e3E8daf098) + +As soon as you hold the LP tokens in your wallet and connect it to your account or login with it, you will automatically receive a Pro subscription within one hour. 💗 + + + +Please make sure to do your own due diligence regarding the Uniswap protocol and understand the risks involved in providing liquidity. Santiment has no control over the Uniswap protocol and cannot be held accountable for any potential losses of any kind. + + diff --git a/src/docs/san-tokens/san-tokens-holding-benefits/liquidity.png b/src/content/docs/guides/san-tokens/san-tokens-holding-benefits/liquidity.png similarity index 100% rename from src/docs/san-tokens/san-tokens-holding-benefits/liquidity.png rename to src/content/docs/guides/san-tokens/san-tokens-holding-benefits/liquidity.png diff --git a/src/docs/san-tokens/san-tokens-holding-benefits/sanpricing_v3.png b/src/content/docs/guides/san-tokens/san-tokens-holding-benefits/sanpricing_v3.png similarity index 100% rename from src/docs/san-tokens/san-tokens-holding-benefits/sanpricing_v3.png rename to src/content/docs/guides/san-tokens/san-tokens-holding-benefits/sanpricing_v3.png diff --git a/src/docs/sanapi/accessing-the-api/graphiql_header.png b/src/content/docs/guides/sanapi/accessing-the-api/graphiql_header.png similarity index 100% rename from src/docs/sanapi/accessing-the-api/graphiql_header.png rename to src/content/docs/guides/sanapi/accessing-the-api/graphiql_header.png diff --git a/src/content/docs/guides/sanapi/accessing-the-api/index.mdx b/src/content/docs/guides/sanapi/accessing-the-api/index.mdx new file mode 100644 index 000000000..9e8487a4d --- /dev/null +++ b/src/content/docs/guides/sanapi/accessing-the-api/index.mdx @@ -0,0 +1,353 @@ +--- +title: Accessing the API +author: Santiment Team +datePublished: 2019-11-21 +dateModified: 2025-04-30 +sidebar: + order: 10 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + +- [Overview](#overview) +- [Access the API](#access-the-api) + - [GraphiQL API Explorer](#graphiql-api-explorer) + - [Python library](#python-library) + - [Programming language of your choice](#programming-language-of-your-choice) + - [curl](#curl) +- [Authentication](#authentication) + - [GraphiQL API Explorer](#authentication-with-graphiql-explorer) + - [curl](#authentication-with-curl) +- [Errors](#errors) + +## Overview + +Santiment API utilizes [GraphQL](https://graphql.org). The reasons for choosing +GraphQL over REST include: + +- It allows for precise data requests and easy batching of requests. This + effectively addresses the problems of underfetching and overfetching data. + For instance, why fetch all 20+ fields of a project when only its name is + required? + +- The request outlines the format of the response. This eliminates the need to + guess what data the result contains and how to parse it. + +- It provides an easy, ready-to-use method to explore our API via our Live + Explorer. + +## Access the API + +Please note that some metrics may not be freely available or may have +restrictions, such as limited historical and real-time data. To explore these +metrics without restrictions, use the slug `santiment`. + +There are several methods to retrieve data from Santiment's API: + +### GraphiQL API Explorer + +The Graph**i**QL (graphical interactive in-browser GraphQL IDE) allows you to +run queries directly from your browser. You can access the explorer at the +following link: +[https://api.santiment.net/graphiql](https://api.santiment.net/graphiql). + +Here's an example of how to run a query and view the results directly in your +browser: + +[GraphQL Request fetching transaction volume]() + +### Python library + +Santiment offers a Python wrapper for the GraphQL API, known as `sanpy`. You +can find the documentation and installation instructions for this library +[here](https://github.com/santiment/sanpy). + +You can install `sanpy` using `pip` with the following command: + +```bash +pip install sanpy +``` + +To fetch Ethereum development activity data using this library, use the following code: + +```python +san.get( + "dev_activity/ethereum", + from_date="2019-01-01T00:00:00Z", + to_date="2019-01-07T00:00:00Z", + interval="1d" +) +``` + +The result will be a pandas dataframe, as shown below: + +```python +datetime activity +2019-01-01 00:00:00+00:00 44.0 +2019-01-02 00:00:00+00:00 89.0 +2019-01-03 00:00:00+00:00 140.0 +2019-01-04 00:00:00+00:00 177.0 +2019-01-05 00:00:00+00:00 46.0 +2019-01-06 00:00:00+00:00 22.0 +``` + +### Programming language of your choice + +In the [san-sdk](https://github.com/santiment/san-sdk) repository, you can find +examples of how to query the API using various programming languages. Here are +some examples: + +- [R](https://github.com/santiment/san-sdk/tree/master/R-graphql) +- [Ruby](https://github.com/santiment/san-sdk/blob/master/ruby-graphql/example.rb) +- [Elixir](https://github.com/santiment/san-sdk/blob/master/elixir-graphql/san_graphql_ex/lib/san_graphql_ex.ex) + +### curl + +The following GraphQL request will be executed with curl: + +```graphql explorer +{ + getMetric(metric: "dev_activity") { + timeseriesDataJson( + slug: "ethereum" + from: "utc_now-60d" + to: "utc_now-50d" + interval: "1d" + ) + } +} +``` + +Copy and paste the following curl request into your console: + +```bash +curl \ +-X POST \ +-H "Content-Type: application/graphql" \ +--data ' +{ getMetric(metric: "dev_activity"){ timeseriesDataJson( slug: "ethereum" from: "utc_now-60d" to: "utc_now-50d" interval: "1d") } }' https://api.santiment.net/graphql +``` + +The response should look similar to this: + +```bash +{"data":{"getMetric":{"timeseriesDataJson":[{"value":38,"datetime":"2025-02-23T00:00:00Z"},{"value":345,"datetime":"2025-02-24T00:00:00Z"},{"value":411,"datetime":"2025-02-25T00:00:00Z"},{"value":461,"datetime":"2025-02-26T00:00:00Z"},{"value":364,"datetime":"2025-02-27T00:00:00Z"},{"value":334,"datetime":"2025-02-28T00:00:00Z"},{"value":164,"datetime":"2025-03-01T00:00:00Z"},{"value":186,"datetime":"2025-03-02T00:00:00Z"},{"value":262,"datetime":"2025-03-03T00:00:00Z"},{"value":236,"datetime":"2025-03-04T00:00:00Z"},{"value":155,"datetime":"2025-03-05T00:00:00Z"}]}}} +``` + +If you have the `jq` tool installed, you can use it to visualize the response more effectively: + +```bash +curl \ +-X POST \ +-H "Content-Type: application/graphql" \ +--data ' +{ getMetric(metric: "dev_activity"){ timeseriesDataJson( slug: "ethereum" from: "utc_now-60d" to: "utc_now-50d" interval: "1d")} }' https://api.santiment.net/graphql \ +| jq .data.getMetric.timeseriesDataJson +``` + +The output should look like this: + +```json +[ + { + "value": 38, + "datetime": "2025-02-23T00:00:00Z" + }, + { + "value": 345, + "datetime": "2025-02-24T00:00:00Z" + }, + { + "value": 411, + "datetime": "2025-02-25T00:00:00Z" + }, + { + "value": 461, + "datetime": "2025-02-26T00:00:00Z" + }, + { + "value": 364, + "datetime": "2025-02-27T00:00:00Z" + }, + { + "value": 334, + "datetime": "2025-02-28T00:00:00Z" + }, + { + "value": 164, + "datetime": "2025-03-01T00:00:00Z" + }, + { + "value": 186, + "datetime": "2025-03-02T00:00:00Z" + }, + { + "value": 262, + "datetime": "2025-03-03T00:00:00Z" + }, + { + "value": 236, + "datetime": "2025-03-04T00:00:00Z" + }, + { + "value": 155, + "datetime": "2025-03-05T00:00:00Z" + } +] +``` + +## Authentication + +Certain APIs necessitate a valid API key, which must be linked to an account +with a paid subscription to access additional data. You can generate your API +key on your [Account Settings](https://app.santiment.net/account#api-keys) +page. + +After generating your API key, you need to include it as an additional HTTP +header in the format `Authorization: Apikey `. + +### Authentication with GraphiQL Explorer + +Santiment also offers an advanced version of GraphiQL that is particularly useful!\[\] +for API users: +[https://api.santiment.net/graphiql_advanced](https://api.santiment.net/graphiql_advanced). +This version allows users to add HTTP headers, which can be used to include an +API key and authenticate your requests. To do this, simply add the following +header: `Authorization: Apikey YOUR_OWN_API_KEY`. + +![](./graphiql_header.png) + +### Authentication with curl + +Include the `Authorization: Apikey ` header using the `-H` option: + +```bash +curl \ + -X POST \ + -H "Content-Type: application/graphql" \ + -H "Authorization: Apikey "\ + --data '{ curentUser { id} }' \ + https://api.santiment.net/graphql +``` + +## Errors + +GraphQL errors are returned with HTTP status code 200. + +To check for errors, you need to check for the presence of the `errors` key in the JSON response. + +If the query does not return a status code of `200`, it indicates a different +issue. Here are some possibilities: + +- `429` - You're being rate-limited. Reduce the number of requests you're + making. Check the [Rate limits](/sanapi/rate-limits) page for more + information. +- `5xx` - An internal server error has occurred. Please let us know in the + support channel on our [Discord server](https://santiment.net/discord). + +### Error example - syntax error + +For instance, if an invalid query is passed to the API, the following will occur: + +```bash +$ curl \ + -X POST \ + -H "Content-Type: application/graphql" \ + --data '{getMetric' \ + https://api.santiment.net/graphql | jq . +``` + +```json +{ + "errors": [ + { + "message": "syntax error before: ", + "locations": [ + { + "line": 1, + "column": 2 + } + ] + } + ] +} +``` + +### Error example - missing parameter + +If your query is missing an argument, the error response will describe this: + +```bash +$ curl \ + -X POST \ + -H "Content-Type: application/graphql" \ + --data '{ getMetric(metric: "price_usd"){ timeseriesDataJson(slug: "bitcoin") } }' \ + https://api.santiment.net/graphql | jq . +``` + +```json +{ + "errors": [ + { + "message": "In argument \"to\": Expected type \"DateTime!\", found null.", + "locations": [ + { + "line": 1, + "column": 35 + } + ] + }, + { + "message": "In argument \"from\": Expected type \"DateTime!\", found null.", + "locations": [ + { + "line": 1, + "column": 35 + } + ] + } + ] +} +``` + +### Error example - historical and realtime data restriction + +If the `from` and/or `to` parameters are outside of the allowed interval for the subscription plan and +[Historical and Realtime data restrictions](/sanapi/historical-and-realtime-data-restrictions) are applied, +the error will look like this: + +```bash +$ curl \ + -X POST \ + -H "Content-Type: application/graphql" \ + --data '{ getMetric(metric: "mvrv_usd_1d"){ timeseriesDataJson(slug: "bitcoin" from: "2015-01-01T00:00:00Z" to: "2016-01-01T00:00:00Z") } }' \ + https://api.santiment.net/graphql | jq . +``` + +```json +{ + "data": { + "getMetric": { + "timeseriesDataJson": null + } + }, + "errors": [ + { + "message": "Both `from` and `to` parameters are outside the allowed interval you can query timeseries_data_json with your current subscription SANAPI FREE. Upgrade to a higher tier in order to access more data.\n\nAllowed time restrictions:\n - `from` - 2024-04-24 12:55:45.778508Z\n - `to` - 2025-03-25 12:55:45.778508Z\n", + "path": ["getMetric", "timeseriesDataJson"], + "locations": [ + { + "line": 1, + "column": 37 + } + ] + } + ] +} +``` + + + +**Read next: [Fetching Metrics](/sanapi/fetching-metrics)** + + diff --git a/src/content/docs/guides/sanapi/common-queries/index.mdx b/src/content/docs/guides/sanapi/common-queries/index.mdx new file mode 100644 index 000000000..99704d036 --- /dev/null +++ b/src/content/docs/guides/sanapi/common-queries/index.mdx @@ -0,0 +1,377 @@ +--- +title: Common Santiment API GraphQL Queries +author: Santiment Team +date: 2024-07-01 +datePublished: 2021-08-26 +dateModified: 2025-04-30 +sidebar: + label: Common Queries + order: 30 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + +## Overview + +In this article we explore some of the most frequently used queries in the SanAPI. + +### Retrieve data for one asset + +This query obtains the daily active addresses for bitcoin for a period of 30 days. + +```graphql explorer +{ + getMetric(metric: "daily_active_addresses") { + timeseriesDataJson( + selector: { slug: "bitcoin" } + from: "2024-01-01T00:00:00Z" + to: "2024-01-31T23:59:59Z" + interval: "1d" + ) + } +} +``` + +### Retrieve data for one asset, apply some transformation - I + +The development activity is very sensitive to day/night cycles, as well as public holidays or vacation days taken by the team. +To smooth the data we can apply a moving average transformation to the data direclty in the API call. + +```graphql +{ + getMetric(metric: "dev_activity") { + timeseriesDataJson( + slug: "ethereum" + from: "utc_now-365d" + to: "utc_now" + interval: "7d" + transform: { type: "moving_average", movingAverageBase: 4 } + ) + } +} +``` + +You can test this query in the [GraphiQL Explorer](). + +### Retrieve data for one asset, apply some transformation - II + +The `twitter_followers` metric shows the total number of twitter followers of +the handle of a project. If we apply the `consecutive_difference` we can +directly see how the total number of followers changes week by week (because we +use 7 day interval). The values show how many followers the project gained or +lost for each time period. + +```graphql +{ + getMetric(metric: "twitter_followers") { + timeseriesDataJson( + slug: "ethereum" + from: "utc_now-365d" + to: "utc_now" + interval: "7d" + transform: { type: "consecutive_differences" } + ) + } +} +``` + +You can test this query in the [GraphiQL Explorer]() + +### Retrieve data for multiple assets with a single API call + +This query obtains data for a list of assets in a single request. +You can specify the assets by providing a list of their slugs using the `slugs` +selector. + +```graphql +{ + getMetric(metric: "price_usd") { + timeseriesDataPerSlugJson( + from: "utc_now-1d" + to: "utc_now" + interval: "15m" + selector: { + slugs: [ + "ethereum" + "tezos" + "eos" + "color-platform" + "enecuum" + "slink" + ] + } + ) + } +} +``` + +You can test this query in the [GraphiQL Explorer](). + +> **Note:** If you want to retrieve the most recent data, you can use "utc_now" as the value for the `to` argument, instead of specifying a date. + +### Retrieving Prices at 1-Second Intervals + +Only the price data with source `cryptocompare` is available at such small +intervals. + +If you need to fetch the price of a cryptocurrency that changes every second +within a specific time frame, you can do so using our API. + +Here is an example of how to retrieve the price of Bitcoin in USD at 1-second +intervals for the past minute: + +```graphql +{ + getMetric(metric: "price_usd") { + timeseriesDataJson( + selector: { slug: "bitcoin", source: "cryptocompare" } + from: "utc_now-1m" + to: "utc_now" + interval: "1s" + cachingParams: { baseTtl: 1, maxTtlOffset: 1 } + ) + } +} +``` + +You can test this query in the [GraphiQL Explorer](). + +### Get some information about each project + +Get some data for each project + +```graphql +{ + allProjects { + slug + name + ticker + description + logoUrl + websiteLink + twitterLink + discordLink + slackLink + telegramLink + facebookLink + marketSegments + githubLinks + infrastructure + } +} +``` + +You can test this query in the [GraphiQL Explorer](https://api.santiment.net/graphiql?query=%7B%0A%20%20allProjects%20%7B%0A%20%20%20%20slug%0A%20%20%20%20name%0A%20%20%20%20ticker%0A%20%20%20%20description%0A%20%20%20%20logoUrl%0A%20%20%20%20websiteLink%0A%20%20%20%20twitterLink%0A%20%20%20%20discordLink%0A%20%20%20%20slackLink%0A%20%20%20%20telegramLink%0A%20%20%20%20facebookLink%0A%20%20%20%20marketSegments%0A%20%20%20%20githubLinks%0A%20%20%20%20infrastructure%0A%20%20%7D%0A%7D%0A) + +### Aggregate Data for Multiple Assets + +If you need to retrieve the most recent MVRV data for multiple assets, such as +Ethereum, Bitcoin, and Aave, you can accomplish this with a single query. The +following is a simple solution: + +```graphql +{ + allProjects( + selector: { baseProjects: { slugs: ["ethereum", "bitcoin", "aave"] } } + ) { + slug + aggregatedTimeseriesData( + metric: "mvrv_usd_intraday_365d" + from: "utc_now-1d" + to: "utc_now" + aggregation: LAST + ) + } +} +``` + +You can test this query in the [GraphiQL Explorer](). + +### Get an aggregated value for each asset + +The example below returns 3 values for each asset: + +- The latest known price in the last 24 hours, `null` if no new price is known; +- The highest price of the past 7 days; +- The total [development activity](/metrics/development-activity/development-activity/) for the past 30 days. + +```graphql +{ + allProjects(page: 1, pageSize: 100) { + slug + name + ticker + latestPrice: aggregatedTimeseriesData( + metric: "price_usd" + aggregation: LAST + from: "utc_now-1d" + to: "utc_now" + ) + highestWeeklyPrice: aggregatedTimeseriesData( + metric: "price_usd" + aggregation: MAX + from: "utc_now-7d" + to: "utc_now" + ) + devActivity30d: aggregatedTimeseriesData( + metric: "dev_activity-1d" + aggregation: SUM + from: "utc_now-30d" + to: "utc_now" + ) + } +} +``` + +[Run the example]() + +### Filter and order assets and get data for them + +The API allows for very complex queries that filter, order and paginate projects. The example below: + +- Runs on the watchlist `stablecoins` (one can use their own watchlists) with the addition of `santiment`, `bitcoin` and `ethereum`; +- Keeps only those projects that have at least 1000 daily active addresses on average for the last 7 days; +- Orders the result in descending order using the current daily active addresses; +- Returns the first 10 projects according to these filter and orderding rules. + +```graphql +{ + allProjects( + selector: { + baseProjects: [ + { watchlistSlug: "stablecoins" } + { slugs: ["santiment", "bitcoin", "ethereum"] } + ] + filters: [ + { + metric: "daily_active_addresses" + from: "utc_now-7d" + to: "utc_now" + aggregation: AVG + operator: GREATER_THAN + threshold: 1000 + } + ] + orderBy: { + metric: "daily_active_addresses" + from: "utc_now-3d" + to: "utc_now" + aggregation: LAST + direction: DESC + } + pagination: { page: 1, pageSize: 10 } + } + ) { + slug + avgDaa7d: aggregatedTimeseriesData( + metric: "daily_active_addresses" + from: "utc_now-7d" + to: "utc_now" + aggregation: AVG + ) + } +} +``` + +[Run the example]() + +### Retrieve all available projects for a specific metric + +```graphql +{ + getMetric(metric: "daily_active_addresses") { + metadata { + availableProjects { + slug + } + } + } +} +``` + +You can test this query in the [GraphiQL Explorer](). + +### Retrieve all available metrics for a specific project + +```graphql +{ + projectBySlug(slug: "bitcoin") { + # All metrics + availableMetrics + # Only the timeseries metrics -- those that are fetched by getMetric's timeseriesData field + availableTimeseriesMetrics + # The available metrics paired with the link to their documentation + availableMetricsExtended { + metric + docs { + link + } + } + } +} +``` + +You can test this query in the [GraphiQL Explorer]() + +### Retrieve the access restrictions for each metric for a given subscription plan + +```graphql +{ + getAccessRestrictions(filter: METRIC, product: SANAPI, plan: BUSINESS_PRO) { + # Name of the metric + name + # Is the metric accessible at all, some metrics are not accessible in FREE plan + isAccessible + # If some time range restrictions are applied + isRestricted + # If the metric is scheduled for deprecation + isDeprecated + # What is the earliest date you can access. null if no restriction is applied + restrictedFrom + # What is the latest date you can access. null if no restriction is applied + restrictedTo + docs { + link + } + } +} +``` + +You can test this query in the [GraphiQL Explorer]() + +### Retrieve Current Prices for All Assets + +```graphql explorer +{ + allProjects { + slug + price: aggregatedTimeseriesData( + metric: "price_usd" + from: "utc_now-1d" + to: "utc_now" + aggregation: LAST + ) + } +} +``` + +### Retrieve Current Trending Words + +```graphql explorer +{ + getTrendingWords( + from: "utc_now-3h" + to: "utc_now" + size: 20 + interval: "1h" + ) { + datetime + topWords { + word + score + } + } +} +``` + +**Read next: [Rate Limits](/sanapi/rate-limits)** diff --git a/src/content/docs/guides/sanapi/complexity/index.mdx b/src/content/docs/guides/sanapi/complexity/index.mdx new file mode 100644 index 000000000..e1b1b516c --- /dev/null +++ b/src/content/docs/guides/sanapi/complexity/index.mdx @@ -0,0 +1,104 @@ +--- +title: API Complexity +author: Santiment Team +date: 2023-05-09 +datePublished: 2023-05-19 +dateModified: 2025-06-12 +sidebar: + label: Complexity + order: 60 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + +## Overview + +API queries for metrics, such as [this NVT example](/metrics/nvt#sanapi), can +potentially yield extensive results (ranging from thousands to hundreds of thousands of +data points). They may also generate queries that scan the entire +database, thereby consuming substantial resources. This could potentially +expose the system to DoS attacks. + +To prevent such scenarios, every GraphQL request is analyzed before execution. +The **complexity** of each query is calculated, and if it exceeds a certain +threshold, the API server rejects it and returns an error without executing the +query. Generally, the complexity is proportional to the number of data points +and the size of the time interval included in the result. + +The complexity calculation considers the following factors: + +- Number of data points returned - **N**. For instance, fetching 30 days of + data at daily intervals results in 30 data points. +- Number of fields in a data point - **F**. Most metrics include two fields: + **datetime** and **value**. +- Years time range span - **Y**. If the request uses a large interval (like 30 + days), the number of data points is small. However, the time range spans + several years. The query still needs to read and aggregate a lot of data in + the database. +- Metric weight - **W**. Most metrics are stored in specialized fast data + storage, so they have a smaller weight (0.3). The remaining metrics have a + weight of 1. +- Weighted number of assets - **A**. In case of returning data for many assets (timeseriesDataPerSlugJson API), + the number of assets multiplied by a weight of 0.1, minimum of 1. In case of returning + data for a single asset, the weight is 1. +- Subscription plan tier - **S**. The higher the user's plan, the larger the + complexity limit (3 for Basic, 5 for Pro, 7 for Premium). As the complexity + threshold is constant, the computed complexity is divided by **S**. This + means that the same query executed by a Pro user will have a complexity five + times smaller than the same query executed by a Free user. + +Given the above-defined values, the complexity is calculated using the +following formula: + +$$ +Complexity(Q) := \dfrac{N(Q) * F(Q) * Y(Q) * W(Q) * A(Q)}{S(Q)} +$$ + +In this formula, Q represents the query being analyzed, and N(Q)...S(Q) are the described values computed for that query. + +## Example + +Let's examine how to calculate the complexity when a Business PRO subscription user executes the following query: + +```graphql explorer +{ + getMetric(metric: "price_usd") { + timeseriesDataPerSlugJson( + selector: { slugs: ["bitcoin", "ethereum", "xrp"] } + from: "utc_now-1500d" + to: "utc_now" + interval: "30m" + ) + } +} +``` + +- `N(Q) = 1500 * 24 * 2 = 72000` - The time range spans 3650 days and the interval is set to 1 hour. +- `F(Q) = 2` - The data points count in practice is 4, but it is explicitly set to 2, so it mimics the behavior + of `timeseriesDataJson` which returns just a list of `datetime` and `value`. +- `Y(Q) = 2` - Computed as: `max(diff(2025-04-24, 2021-03-16, "years"), 2) / 2`, where `/` is integer division +- `S(Q) = 5` - The SanAPI PRO plan offers complexity limits that are 5 times higher than those of the SanAPI Free plan. +- `A(Q) = 1` - The API call returns data for 3 assets, so the value is `max(1, 3\*0.1) = 1` + - if the number of assets was 50, then the weight would be `max(1, 50*0.1) = max(1, 5) = 5` + +The complexity of the query, Q, is calculated as follows: + +$$ +Complexity(Q) = \frac{72000 * 2 * 2 * 0.3 * 1}{5} = 17280 +$$ + +The complexity threshold is 50000, so this query is valid and the API server +will execute it. If a SanAPI Free user attempts to execute this query, S(Q) +will equal 1 and the complexity will be 86400. This will trigger the +following error: + +``` +Operation is too complex: +complexity is 86400 and maximum is 50000 +``` + + + +**Read next: [Supported Blockchains](/sanapi/supported-blockchains)** + + diff --git a/src/content/docs/guides/sanapi/fetching-metrics/index.mdx b/src/content/docs/guides/sanapi/fetching-metrics/index.mdx new file mode 100644 index 000000000..6e649f908 --- /dev/null +++ b/src/content/docs/guides/sanapi/fetching-metrics/index.mdx @@ -0,0 +1,603 @@ +--- +title: Fetching Metrics +author: Santiment Team +date: 2020-04-06 +datePublished: 2019-11-21 +dateModified: 2025-04-30 +sidebar: + order: 20 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + +- [Overview](#overview) +- [Available Metrics](#available-metrics) +- [Metrics Restrictions Per Plan](#metrics-restrictions-per-plan) +- [Metrics Documentation](#metrics-documentation) +- [Available Assets](#available-assets) +- [Available Metrics Per Project](#available-metrics-per-project) +- [Available Projects Per Metric](#available-projects-per-metric) +- [Minimal Interval](#minimal-interval) +- [Aggregation](#aggregation) +- [Queryable Fields](#queryable-fields) + - [timeseriesDataJson](#timeseriesdatajson) + - [timeseriesDataPerSlugJson](#timeseriesdataperslugjson) + - [aggregatedTimeseriesData](#aggregatedtimeseriesdata) + - [histogramData](#histogramdata) + - [metadata](#metadata) + - [availableSince](#availablesince) + - [lastDatetimeComputedAt](#lastdatetimecomputedat) +- [Examples](#examples) + +## Overview + +The `getMetric` GraphQL query provides a unified method for accessing a variety +of metrics for all supported assets. This query enables you to retrieve +metadata, datetime availability, assets availability, and various metric representations, including +timeseries data, histogram data, and aggregated timeseries data. + +Here is an example of a GraphQL `getMetric` query: + +```graphql explorer +{ + getMetric(metric: "active_addresses_24h") { + timeseriesDataJson( + slug: "bitcoin" + from: "2023-05-01T08:00:00Z" + to: "2023-05-02T08:00:00Z" + interval: "30m" + ) + } +} +``` + +This query retrieves the timeseries data for the metric "active_addresses_24h" +for Bitcoin, from 8:00 on May 1, 2023, to 8:00 on May 2, 2023, with a 30-minute +interval between data points. + +## Available Metrics + +You can fetch the list of all available metrics using the following [query](https://api.santiment.net/graphiql?query=%7B%0A++getAvailableMetrics%0A%7D%0A): + +```graphql explorer +{ + getAvailableMetrics +} +``` + +To fetch the list of available metrics for a specific plan and product, provide +the `plan` and `product` arguments in the +[query](https://api.santiment.net/graphiql?query=%7B%0A++getAvailableMetrics%28product%3A+SANAPI+plan%3A+BUSINESS_PRO%29%0A%7D): + +```graphql explorer +{ + getAvailableMetrics(product: SANAPI, plan: BUSINESS_PRO) +} +``` + +## Metrics restrictions per plan + +Access to certain metrics may be limited in various ways based on your subscription plan: + +- Some metrics may not be accessible to users on lower-tier subscription plans. +- Lower-tier subscription plans may have limited access to certain metrics, + excluding access to historical and real-time data, or no access at all. + +You can obtain detailed information about the restrictions on all metrics for a specific subscription plan using this query: + +```graphql explorer +{ + getAccessRestrictions(product: SANAPI, plan: BUSINESS_PRO, filter: METRIC) { + name + minInterval + isAccessible + isRestricted + isDeprecated + restrictedFrom + restrictedTo + docs { + link + } + } +} +``` + +The following fields are selected: + +- `name` - the name of the metric +- `minInterval` - what is the minimal interval between two data points (5 minutes or 1 day in most cases) +- `isDeprecated` - is the deprecated. If true, you must stop using this metric as it will be removed in the future. +- `isAccessible` - is the metric accessible with the selected subscription plan. +- `restrictedFrom` - what is the earliest date for which this subscription plan can fetch data. If `null`, then no restrictions apply. +- `restrictedTo` - what is the latest date for which this subscription plan can fetch data. If `null`, then no restrictions apply. +- `docs` - link to the documentation of the metric. + +## Metrics Documentation + +You can find the documentation for most of the metrics on [this page](/metrics). + +## Available Assets + +Each metric is retrieved for a specific asset, which is identified by its `slug`. +You can obtain a list of all slugs using this query: + +```graphql explorer +{ + allProjects { + slug + name + ticker + } +} +``` + +## Available metrics per project + +The range of available metrics varies for each asset. The query below +demonstrates three distinct lists: + +- All accessible metrics +- A subset of all accessible metrics that are timeseries metrics +- A subset of all accessible metrics that are histogram metrics + +You can retrieve these lists of metrics using this query: + +```graphql explorer +{ + projectBySlug(slug: "ethereum") { + availableMetrics + availableTimeseriesMetrics + availableHistogramMetrics + } +} +``` + +## Available projects per metric + +To fetch the list of available slugs for a specific metric, use this query: + +```graphql explorer +{ + getMetric(metric: "mvrv_usd") { + metadata { + availableProjects { + slug + } + } + } +} +``` + +## Minimal Interval + +Metrics are stored as pairs of datetime and value. The term `minInterval` +refers to the time interval between two consecutive data points. It signifies +the smallest interval that can be utilized when querying the metric. + +The most frequently used `minInterval`s include: + +- 1 day (`1d`): Metrics with this interval are typically referred to as "daily" + metrics. +- 5 minutes (`5m`): Metrics with this interval are often called "intraday" + metrics. + +When querying data, the `interval` argument is used to determine the resolution +of the data. This interval can be significantly larger than the `minInterval`. +In such instances, all the values within that larger interval must be +aggregated into a single value. The `aggregation` parameter controls how this +data is aggregated. + +## Aggregation + +Fields that return timeseries data accept an `aggregation` parameter. When an +`interval` larger than `minInterval` is provided for a specific metric, +multiple data point values will be consolidated into a single data point. + +> **Note**: Each metric has a manually selected default aggregation that is +> used if the `aggregation` parameter is not specified. The default aggregation +> is chosen to be the most logical one. + +The types of aggregations are: + +- `SUM` - The sum of all values. +- `AVG` - The average of the values. +- `MEDIAN` - The median of all values. +- `FIRST` - The earliest value (with the smallest datetime). +- `LAST` - The most recent value (with the latest datetime). +- `MAX` - The largest value. +- `MIN` - The smallest value. +- `ANY` - Any value within the interval. This is typically used when all values + are expected to be the same, and you just want to select one of them. No + metrics use this as their default aggregation. This type of aggregation is + more commonly used when users write their own SQL queries using the + [Santiment Queries](/santiment-queries) product. + +> **Note:** The aggregation is of the [GraphQL enum +> type](https://graphql.org/learn/schema/#enumeration-types) and should be +> provided in uppercase without quotes, like this: `aggregation: MAX`. + +The following query retrieves the default aggregation and all available aggregations for each metric: + +```graphql explorer +{ + getMetric(metric: "daily_active_addresses") { + metadata { + defaultAggregation + availableAggregations + } + } +} +``` + +## Queryable fields + +In the `getMetric` function, you can query the following fields: + +- `timeseriesDataJson` +- `timeseriesDataPerSlugJson` +- `aggregatedTimeseriesData` +- `histogramData` +- `metadata` +- `availableSince` +- `lastDatetimeComputedAt` + +### timeseriesDataJson + +Timeseries data is a sequence of data points collected at consistent intervals +over time. Each data point provided by the API includes a `datetime` and a +`value` field. + +To retrieve the values for a specific metric, slug, and time range, you can use +the `timeseriesDataJson` field of the `getMetric` API. + +#### Parameters + +| Parameter | Description | +| --------------------- | ----------------------------------------------------------------------------------------------------------------- | +| slug | The slug of the project | +| from | The starting date for the values to be returned, in ISO8601 format | +| to | The ending date for the values to be returned, in ISO8601 format | +| interval | The intervals to be returned. The default is `1d`. This is optional | +| aggregation | The aggregation to be used when fetching data for longer intervals. This is optional | +| includeIncompleteData | Exclude the last incomplete day (today) if it could lead to misleading data. Default is `false`. This is optional | +| fields | Optionally give aliases the returned fields `datetime` and `value` | +| transform | Apply a transformation to the result. Default is `none`. This is optional | + +- `aggregation`: This parameter is optional. If not provided, each metric has a + default aggregation that is most suitable. You can view the default + aggregation function using the [metadata](#metadata) query. +- `includeIncompleteData`: In some cases, if the day is not yet complete, the + current value can be misleading. For instance, fetching daily active + addresses at 12pm would include only half a day's data, potentially making + the data for that day appear too low. +- `fields`: If the returned fields name should be something other than `datetime` or `value`, aliases can be given. + In case of `aggregation: OHLC`, the fields that can be overriden are `valueOhlc`, `open`, `high`, `close` and `low` + - `{datetime: "dt", value: "v"}` +- `transform`: Apply a transformation to the timeseries data result. Available transformations include: + - `{type: "none"}`: Do not apply any transformation + - `{type: "moving_average", moving_average_base: base}`: Apply a simple moving average. Each data point value is calculated as the average of the last `base` intervals. To compute this, it fetches enough data before `from` so it can be computed. + - `{type: "changes"}`: For each data point, change the value to the difference between the value and the previous value. + +```graphql explorer +{ + getMetric(metric: "dev_activity") { + timeseriesDataJson( + slug: "santiment" + from: "utc_now-60d" + to: "utc_now-50d" + interval: "1d" + aggregation: SUM + transform: { type: "moving_average", moving_average_base: 3 } + ) + } +} +``` + +### timeseriesDataPerSlugJson + +This API acts similar to timeseriesDataJson, but it can return data for more than one asset at a time. +The differences in parameters compared to timeseriesDataJson are as follows: + +- Instead of `slug` it can accept the `selector` parameters where multiple assets can be provided at once: + `selector: {slugs: ["bitcoin", "ethereum"]}` +- It does not support the `transform` parameter + +```graphql explorer +{ + getMetric(metric: "price_usd") { + timeseriesDataPerSlugJson( + selector: { slugs: ["bitcoin", "ethereum"] } + from: "utc_now-60d" + to: "utc_now-50d" + includeIncompleteData: true + interval: "1d" + ) + } +} +``` + +### aggregatedTimeseriesData + +Aggregated timeseries data is useful when you require a single value instead of +multiple values separated by an even interval. This can be utilized to fetch +the All-Time High (ATH) price or the highest number of daily active addresses, +among other examples. + +#### Parameters + +| Parameter | Description | +| ----------- | ----------------------------------------------------------------------------- | +| slug | The slug of the project | +| from | The start date for the returned values in ISO8601 format | +| to | The end date for the returned values in ISO8601 format | +| aggregation | The aggregation to be used when fetching data for longer intervals (Optional) | + +- `aggregation`: This parameter is optional. If not provided, each metric has a default aggregation function that is most suitable. The default aggregation function can be viewed using the [metadata](#metadata) query. + +The following query fetches the all-time highest price for Santiment: + +```graphql explorer +{ + getMetric(metric: "price_usd") { + highest_price: aggregatedTimeseriesData( + slug: "santiment" + from: "2017-07-01T00:00:00Z" + to: "2020-04-01T00:00:00Z" + aggregation: MAX + ) + } +} +``` + +### aggregatedTimeseriesData on the project type + +Queries like `allProject` or `projectBySlug` also have `aggregatedTimeseriesData` field that works the same way. +The only difference is that when using `getMetric` the `metric` is already pinned and the `slug` needs to be provided, while +for `allProjects` and `projectBySlug` it is vice versa. +Using aliases, the `aggregatedTimeseriesData` can be selected multiple times. + +```graphql explorer +{ + allProjects(page: 1, pageSize: 20) { + slug + devActivity: aggregatedTimeseriesData( + metric: "dev_activity_1d" + from: "utc_now-30d" + to: "utc_now" + aggregation: SUM + ) + priceUsd: aggregatedTimeseriesData( + metric: "price_usd" + from: "utc_now-1d" + to: "utc_now" + aggregation: LAST + ) + } +} +``` + +### histogramData + +A histogram is a graphical representation that organizes a group of data points +into a specified range. For instance, if we consider the period from January +2018 to January 2019, we can fetch the amount of Ether that was bought in every +100-dollar price range: \$0-\$100, \$100-\$200, ..., \$1300-\$1400. + +To fetch the values for a given histogram metric, slug, and time interval, you +can use the `histogramData` subquery of the `getMetric` API. + +#### Parameters + +| Parameter | Description | +| --------- | ------------------------------------------------ | +| slug | The slug of the project | +| from | The start date for the values in ISO 8601 format | +| to | The end date for the values in ISO 8601 format | +| interval | The intervals to be returned. Default is `1d` | +| limit | The number of results to be returned. Optional | + +Different histogram metrics may have different response types or formats. + +```graphql explorer +{ + getMetric(metric: "age_distribution") { + histogramData( + slug: "ethereum" + from: "utc_now-90d" + to: "utc_now-80d" + limit: 20 + ) { + labels + values { + ... on FloatList { + data + } + } + } + } +} +``` + +### metadata + +Each metric is accompanied by metadata that describes the following: + +- The minimum interval for which it can be fetched. Different metrics are + available at varying granularities. +- The default aggregation that will be used when retrieving the metric at a + higher resolution. +- The supported aggregations for the metric. +- The existing selectors for the metric. +- The projects for which the metric is available. +- The type of the metric, which can be either a timeseries or a histogram. + +```graphql explorer +{ + getMetric(metric: "daily_active_addresses") { + metadata { + availableAggregations + availableSelectors + availableSlugs + dataType + defaultAggregation + minInterval + } + } +} +``` + +### availableSince + +You can fetch the date from which a specific metric is available for an asset using the following query: + +```graphql explorer +{ + getMetric(metric: "transaction_volume") { + availableSince(slug: "bitcoin") + } +} +``` + +Typically, a metric is available for a given asset from the moment the contract +or blockchain is created. However, there are exceptions. For instance, if the +calculation of a metric requires pricing data that is not available, the metric +will only be available from the date the pricing data becomes available. + +For example, Bitcoin has been operational since early 2009, but there were no +exchanges or markets for over a year. Therefore, the pricing data only starts +from July 2010. As a result, the MVRV metric, which requires market +capitalization, is also only available since July 2010. + +### lastDatetimeComputedAt + +> **Note:** This field may be complex to understand. However, in the general +> case, this field is not used. + +The `lastDatetimeComputedAt` shows the when the latest +data point was computed. + +```graphql explorer +{ + getMetric(metric: "daily_active_addresses") { + lastDatetimeComputedAt(slug: "santiment") + } +} +``` + +## Examples + +**Timeseries Data Example** + +```graphql explorer +{ + getMetric(metric: "active_addresses_24h") { + timeseriesDataJson( + slug: "bitcoin" + from: "2023-05-01T08:00:00Z" + to: "2023-05-02T08:00:00Z" + interval: "30m" + ) + } +} +``` + +This example query retrieves the `development_activity` metric for the Ethereum +project over the last 60 days, with a 1-day interval. + +**Timeseries Data Example** + +```graphql explorer +{ + getMetric(metric: "twitter_followers") { + timeseriesData( + slug: "maker" + from: "2023-01-01T00:00:00Z" + to: "2023-02-01T00:00:00Z" + interval: "7d" + transform: { type: "consecutive_differences" } + ) { + datetime + value + } + } +} +``` + +**Aggregated Timeseries Data Example** + +```graphql explorer +{ + getMetric(metric: "daily_active_addresses") { + highest_daa: aggregatedTimeseriesData( + slug: "ethereum" + from: "2022-01-01T00:00:00Z" + to: "2023-01-01T00:00:00Z" + aggregation: MAX + ) + lowest_daa: aggregatedTimeseriesData( + slug: "ethereum" + from: "2022-01-01T00:00:00Z" + to: "2023-01-01T00:00:00Z" + aggregation: MIN + ) + } +} +``` + +**Histogram Metric Example I** + +```graphql explorer +{ + getMetric(metric: "age_distribution") { + histogramData( + slug: "santiment" + from: "2020-02-10T07:00:00Z" + to: "2020-03-30T07:00:00Z" + interval: "1d" + ) { + values { + ... on DatetimeRangeFloatValueList { + data { + range + value + } + } + } + } + } +} +``` + +The response result is a list that contains a 2-element range of datetimes and a float value. + +**Histogram Metric Example** + +```graphql explorer +{ + getMetric(metric: "price_histogram") { + histogramData( + slug: "santiment" + from: "2020-02-10T07:00:00Z" + to: "2020-03-30T07:00:00Z" + interval: "1d" + ) { + values { + ... on FloatRangeFloatValueList { + data { + range + value + } + } + } + } + } +} +``` + +The response is a list that contains a 2-element range of float (prices) and a float value. + + + +**Read next: [Common GraphQL Queries](/sanapi/common-queries)** + + diff --git a/src/content/docs/guides/sanapi/historical-and-realtime-data-restrictions/index.mdx b/src/content/docs/guides/sanapi/historical-and-realtime-data-restrictions/index.mdx new file mode 100644 index 000000000..63ffcc061 --- /dev/null +++ b/src/content/docs/guides/sanapi/historical-and-realtime-data-restrictions/index.mdx @@ -0,0 +1,85 @@ +--- +title: API Historical and Realtime data restrictions +author: Santiment Team +datePublished: 2024-07-02 +dateModified: 2025-04-30 +sidebar: + label: Historical and Realtime data restrictions + order: 50 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + +## Overview + +This articles outlines the restrictions that apply to historical and realtime +data for the [metrics](/sanapi/fetching-metrics). + +Example: If you are on the Free plan, you cannot access `mvrv_usd_1d` values: + +- older than 1 year; +- from the last 30 days. + +When you query a metric it can happen that some of the data is cut off, or if +the whole date range you request is outside the allowed range, you will get an +error. + +For example, if you are on the Free plan, for most metrics you will have access +to the last 2 years of data with the last 30 days excluded. To access more historical +and current-day data, you should upgrade to a higher subscription plan. + +## Free Metrics + +Some of the metrics have their entire historical data and realtime data +available without any restrictions. These metrics are available to all users, +regardless of their subscription level. However, the [Rate +Limits](/sanapi/rate-limits) still apply and lower subscription plan users can +make fewer API calls, so they can get less data in the end. + +## Restricted Metrics + +The metrics that are not free have their historical and realtime data access +restricted depending on the subscription plan. + +Users without any subscription plan are represented as using the FREE subscription plan. +They have access to 1 year old historical data without the last 30 days. + +The historical and realtime restrictions seen on the [Pricing Page](https://app.santiment.net/pricing?plans=business) +apply only to those restricted metrics. + +![](./pricing-plans-restrictions.png) + +## How to determine the restrictions of each metric + +You can obtain detailed information about the restrictions of each metric for a +specific subscription plan using this query: + +```graphql explorer +{ + getAccessRestrictions(product: SANAPI, plan: BUSINESS_PRO, filter: METRIC) { + name + isDeprecated + isAccessible + isRestricted + restrictedFrom + restrictedTo + } +} +``` + +The following fields are selected: + +- `name` - the name of the metric +- `isDeprecated` - is the deprecated. If true, you must stop using this metric as it will be removed in the future. +- `isAccessible` - is the metric accessible with the selected subscription plan. +- `restrictedFrom` - what is the earliest date for which this subscription plan can fetch data. If `null`, then no restrictions apply. +- `restrictedTo` - what is the latest date for which this subscription plan can fetch data. If `null`, then no restrictions apply. + +You are interested in the `restrictedFrom` and `restrictedTo` fields. +If they are both `null` -- the selected subscription plan has access to the full historical and realtime data for that plan. + + + +**Read next: [Complexity](/sanapi/complexity)** + + diff --git a/src/docs/sanapi/historical-and-realtime-data-restrictions/pricing-plans-restrictions.png b/src/content/docs/guides/sanapi/historical-and-realtime-data-restrictions/pricing-plans-restrictions.png similarity index 100% rename from src/docs/sanapi/historical-and-realtime-data-restrictions/pricing-plans-restrictions.png rename to src/content/docs/guides/sanapi/historical-and-realtime-data-restrictions/pricing-plans-restrictions.png diff --git a/src/content/docs/guides/sanapi/index.mdx b/src/content/docs/guides/sanapi/index.mdx new file mode 100644 index 000000000..63d0ff038 --- /dev/null +++ b/src/content/docs/guides/sanapi/index.mdx @@ -0,0 +1,94 @@ +--- +title: API Reference +author: Santiment Team +description: This page serves as a comprehensive guide to all the APIs provided by Santiment. +datePublished: 2019-11-21 +dateModified: 2025-04-30 +sidebar: + label: SanAPI + order: 40 +--- + +- [Overview](#overview) +- [How to Access the API](#how-to-access-the-api) +- [Fetching Metrics](#fetching-metrics) +- [Rate Limits](#rate-limits) +- [Complexity](#complexity) +- [Glossary](#glossary) +- [Supported Blockchains](#supported-blockchains) + +## Overview + +Santiment API utilizes [GraphQL](https://graphql.org). The decision to use +GraphQL over REST was made due to several reasons: + +- It allows you to request precisely the data you need and conveniently batch + requests together. This effectively addresses the issues of underfetching and + overfetching data. For instance, why fetch all 20+ fields of a project when + you only need its name? + +- The request describes the format of the response. This eliminates the need to + guess what data the result contains and how to parse it. + +- It provides an easy, out-of-the-box method to explore our API via our Live + Explorer. + +### Example + +The example below demonstrates a GraphQL query used to fetch timeseries price +data. The parameters control the time range, the interval between data points, +and how all the values within an interval are aggregated. + +```graphql explorer +{ + getMetric(metric: "twitter_followers") { + timeseriesDataJson( + slug: "ethereum" + from: "utc_now-90d" + to: "utc_now-60d" + interval: "1d" + ) + } +} +``` + +## How to access the API + +Instructions how to access the API can be found on the [Accessing the API](/sanapi/accessing-the-api) page. + +## Fetching Metrics + +You can find information on how to explore and fetch the available metrics on the [Fetching Metrics](/sanapi/fetching-metrics) page. + +## Common GraphQL queries + +The list of [Common GraphQL queries](/sanapi/common-queries) gives examples for +the different type of queries one can craft and execute. + +## Rate Limits + +The [Rate Limits Page](/sanapi/rate-limits) provides detailed information on +how API calls are counted and how rate limits are applied. + +## Historical and Realtime data restrictions + +The [Historical and Realtime data +restrictions](/sanapi/historical-and-realtime-data-restrictions) provides +information about the applied restrictions per plan. + +## Complexity + +Each API query has a limit to the amount of data points it can fetch. The +[Complexity Page](/sanapi/complexity) provides a detailed explanation on how +complexity analysis determines whether a given query will be executed or +rejected. + +## Glossary + +You can find the definitions of some terms used on this page in our dedicated +[glossary page](/glossary). + +## Supported Blockchains + +You can find information about the blockchains we support on our [Supported +Blockchains page](/sanapi/supported-blockchains). diff --git a/src/content/docs/guides/sanapi/rate-limits/index.mdx b/src/content/docs/guides/sanapi/rate-limits/index.mdx new file mode 100644 index 000000000..3ff6b30df --- /dev/null +++ b/src/content/docs/guides/sanapi/rate-limits/index.mdx @@ -0,0 +1,146 @@ +--- +title: API Rate Limits +author: Santiment Team +datePublished: 2023-05-09 +dateModified: 2025-04-30 +sidebar: + label: Rate Limits + order: 40 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + +## Overview + +Santiment API Rate Limiting is a mechanism that restricts the number of +requests a user can make within a specific time frame. This limitation is +crucial for maintaining stability and optimal performance for a large number of +clients. + +1. **Maintaining Service Stability and Performance:** API Rate Limits prevent a + single entity from excessively using the API service, which could + potentially degrade the performance for other users. + +2. **Fair Resource Allocation:** API Rate Limits ensure a more equitable + distribution of API resources among users. They prevent individual users or + applications from monopolizing the available resources, ensuring that all + users have equal access and opportunity to use the API services. + +3. **Protection Against Malicious Activities:** API Rate Limits serve as a + basic security measure to protect against malicious activities such as DoS + (Denial of Service) attacks. By limiting the number of requests from a + single source, Santiment can mitigate potential harm. + +## How are API calls counted? + +Each [GraphQL Query](/glossary/#query) is counted +as one API call. One GraphQL request can contain any number of GraphQL queries +inside of it. This means that one GraphQL request can count as multiple API +calls. In most cases, a single GraphQL request will contain only one GraphQL +query. + +Executing the following GraphQL request will count as 1 API calls: + +```graphql explorer +{ + getMetric(metric: "active_addresses_24h") { + timeseriesDataJson( + slug: "ethereum" + from: "2019-01-01T00:00:00Z" + to: "2019-01-01T03:00:00Z" + interval: "30m" + ) + } +} +``` + +Executing the following GraphQL request will count as 2 API calls: + +```graphql explorer +{ + activeAddresses: getMetric(metric: "active_addresses_24h") { + timeseriesDataJson( + slug: "ethereum" + from: "2019-01-01T00:00:00Z" + to: "2019-01-01T03:00:00Z" + interval: "30m" + ) + } + + transactionVolume: getMetric(metric: "transaction_volume") { + timeseriesDataJson( + slug: "ethereum" + from: "2019-01-01T00:00:00Z" + to: "2019-01-01T03:00:00Z" + interval: "30m" + ) + } +} +``` + +## How are rate limits applied and refreshed? + +API Rate Limits are applied on a **per account** basis. This means that all API +keys associated with a single account share the same limits. It's important to +note that API keys used for testing or development purposes can impact the rate +limits of the API key used for production. + +The rate limits vary based on the subscription plan. You can find the details +for each plan in [this article](products-and-plans/sanapi-plans). + +Rate limits are applied on a **per minute**, **per hour** and **per month** +basis, with all dates and times set to the UTC timezone. + +The refreshment of these limits occurs **at the start of the next minute, hour, +or month**. This means that regardless of when the subscription was created, +the count of API calls will reset at the start of the next month, specifically +at 00:00:00 UTC on the 1st of the month. + +## How to Determine If You Are Being Rate Limited? + +When the rate limit is reached, an error response with HTTP code 429 is +returned. The content of the response body includes a human-readable format of +the error and the remaining time until you can make another request. The +remaining time, measured in seconds, is also provided as the value of the +`x-ratelimit-reset` HTTP header. + +Several other HTTP headers provide information about the rate limits: + +The following three HTTP headers indicate the limits of your current +subscription plan. These values remain constant from request to request and +only change when your subscription plan changes: + +- `x-ratelimit-limit-month` +- `x-ratelimit-limit-hour` +- `x-ratelimit-limit-minute` + +The next three HTTP headers change from request to request and show the number +of API calls remaining before you reach the limit of allowed API calls: + +- `x-ratelimit-remaining-month` +- `x-ratelimit-remaining-hour` +- `x-ratelimit-remaining-minute` + +## What to do if the rate limits are reached? + +Rate limits can be reached for various different reasons: + +- Excessive usage of the API during a development phase; +- Programming error that consumes many API calls; +- Unexpected usage peak; +- Need for more API calls in the long term. + +In case of a temporary issue or error, you can go to you [Account page](https://app.santiment.net/account#api-keys) +and press the `Reset`. The self-reset of API rate limits is available once per 90 days: +![](./reset_api_rate_limits.png) + +Contact Santiment support if additional issues are encountered. + +In case the need for more API calls is long-term, please consider upgrading to a higher subscription plan. +If the highest subscription plan does not cover your needs, contact Santiment support. + + + +**Read next: [Historical and Realtime data restrictions](/sanapi/historical-and-realtime-data-restrictions)** + + diff --git a/src/docs/sanapi/rate-limits/reset_api_rate_limits.png b/src/content/docs/guides/sanapi/rate-limits/reset_api_rate_limits.png similarity index 100% rename from src/docs/sanapi/rate-limits/reset_api_rate_limits.png rename to src/content/docs/guides/sanapi/rate-limits/reset_api_rate_limits.png diff --git a/src/content/docs/guides/sanapi/supported-blockchains/index.mdx b/src/content/docs/guides/sanapi/supported-blockchains/index.mdx new file mode 100644 index 000000000..28c321982 --- /dev/null +++ b/src/content/docs/guides/sanapi/supported-blockchains/index.mdx @@ -0,0 +1,37 @@ +--- +title: Supported Blockchains +author: Santiment Team +date: 2023-05-31 +datePublished: 2023-05-31 +dateModified: 2025-11-17 +sidebar: + order: 70 +--- + +When Santiment designates a blockchain as supported, it signifies that on-chain transactions (including events, receipts, and other pertinent data) are exported, and metrics are constructed based on these data. + +Please note that not all supported blockchains have metrics related to exchanges, labels, or miners. + +For more information on the types of metrics available for each blockchain, please check [here](https://api.santiment.net/graphiql?variables=&query=%7B%0A++getAvailableBlockchains+%7B%0A++++blockchain%0A++++slug%0A++++infrastructure%0A++++createdOn%0A++++hasLabelMetrics%0A++++hasMinersMetrics%0A++++hasExchangeMetrics%0A++++hasTopHoldersMetrics%0A++++hasPureOnchainMetrics%0A++++hasOnchainFinancialMetrics%0A++%7D%0A%7D%0A). + +Price data may be available for blockchains not listed here. + +| Bitcoin | Ethereum | XRPL | +| ------------------ | ------------------ | ------------------ | +| :white_check_mark: | :white_check_mark: | :white_check_mark: | + +| BNB Chain | Bitcoin Cash | Litecoin | +| ------------------ | ------------------ | ------------------ | +| :white_check_mark: | :white_check_mark: | :white_check_mark: | + +| Cardano | Dogecoin | Polygon | +| ------------------ | ------------------ | ------------------ | +| :white_check_mark: | :white_check_mark: | :white_check_mark: | + +| Avalanche | Optimism | Arbitrum | +| ------------------ | ------------------ | ------------------ | +| :white_check_mark: | :white_check_mark: | :white_check_mark: | + +| ICP | Solana | +| ------------------ | ------------------ | +| :white_check_mark: | :white_check_mark: | diff --git a/src/docs/sanbase/account-settings/api.png b/src/content/docs/guides/sanbase/account-settings/api.png similarity index 100% rename from src/docs/sanbase/account-settings/api.png rename to src/content/docs/guides/sanbase/account-settings/api.png diff --git a/src/docs/sanbase/account-settings/connections.png b/src/content/docs/guides/sanbase/account-settings/connections.png similarity index 100% rename from src/docs/sanbase/account-settings/connections.png rename to src/content/docs/guides/sanbase/account-settings/connections.png diff --git a/src/content/docs/guides/sanbase/account-settings/index.mdx b/src/content/docs/guides/sanbase/account-settings/index.mdx new file mode 100644 index 000000000..ae7c5d4e5 --- /dev/null +++ b/src/content/docs/guides/sanbase/account-settings/index.mdx @@ -0,0 +1,49 @@ +--- +title: Account Settings +author: Santiment Team +datePublished: 2019-12-03 +dateModified: 2023-07-07 +sidebar: + label: Alerts settings + order: 10 +--- + +To customize your profile, please visit [Account Settings](https://app.santiment.net/account) on the Santiment website. + +## Overview + +Depending on your method of logging into Sanbase, you may already see some information displayed in the Account Settings upon your first visit. + +![](primary.png) + +## Connections and Notifications + +If you initially logged in using your email, this section will display your email address, as shown in the screenshot below. You can use the `Connect with Metamask` option to associate an Ethereum address with your active account. + +If you logged in using MetaMask, your ETH address will be displayed, and you can now add an email address and username. + +![](connections.png) + +The Notifications section allows you to choose the channels through which you want to receive notifications from Sanbase, such as triggered signals. Once you've connected an account, you can activate it. Please note that currently, you need Telegram Desktop to connect a Telegram account. + +## Get tokens + +If your login wallet contains any SAN tokens, they will be displayed in the `Get tokens` section located in the center of the page. + +In case you wish to purchase SAN tokens, we provide links to exchanges that offer trading pairs with SAN. Alternatively, you can utilize the `Convert` button to leverage our Bancor integration. For more information on how to use this feature, please refer to [this article](/san-tokens/how-to-buy-san-tokens/#bancor). + +![](tokens.png) + +## Creating an API Key + +At the bottom of the page, you'll find options to create new API keys and view existing ones. You also have the ability to revoke any previously created keys from this location. + +For more information on API usage, consider starting with [this article](/products-and-plans/create-an-api-key/). + +![](api.png) + +## Subscription + +From this section, you can upgrade your current plan, modify your billing cycle, or cancel your subscription as needed. + +![](subscriptions.png) diff --git a/src/docs/sanbase/account-settings/primary.png b/src/content/docs/guides/sanbase/account-settings/primary.png similarity index 100% rename from src/docs/sanbase/account-settings/primary.png rename to src/content/docs/guides/sanbase/account-settings/primary.png diff --git a/src/docs/sanbase/account-settings/subscriptions.png b/src/content/docs/guides/sanbase/account-settings/subscriptions.png similarity index 100% rename from src/docs/sanbase/account-settings/subscriptions.png rename to src/content/docs/guides/sanbase/account-settings/subscriptions.png diff --git a/src/docs/sanbase/account-settings/tokens.png b/src/content/docs/guides/sanbase/account-settings/tokens.png similarity index 100% rename from src/docs/sanbase/account-settings/tokens.png rename to src/content/docs/guides/sanbase/account-settings/tokens.png diff --git a/src/content/docs/guides/sanbase/alerts-page/index.mdx b/src/content/docs/guides/sanbase/alerts-page/index.mdx new file mode 100644 index 000000000..bd509e85c --- /dev/null +++ b/src/content/docs/guides/sanbase/alerts-page/index.mdx @@ -0,0 +1,40 @@ +--- +title: Alerts Page +author: Santiment Team +description: Learn how to create custom alerts, subscribe to existing ones, monitor recent activities, manage your alerts, and share them with other users. +datePublished: 2019-12-03 +dateModified: 2023-07-07 +sidebar: + label: Alerts page + order: 20 +--- + +To start using the **Alerts** feature on Sanbase, click here: [https://app.santiment.net/alerts](https://app.santiment.net/alerts). + +## Introduction + + + +## How to Create an Alert + + + +## Use Cases for Alerts + +- [Example of Age Consumed Alert on Sanbase](/education-and-use-cases/age-consumed-alert/) +- [Example of Social Trends/Trending Words Alert on Sanbase](/education-and-use-cases/social-trend-alerts/) +- [Example of Whale Alert on Sanbase](/education-and-use-cases/whale-activity-alert/) diff --git a/src/docs/sanbase/assets-page/assets.png b/src/content/docs/guides/sanbase/assets-page/assets.png similarity index 100% rename from src/docs/sanbase/assets-page/assets.png rename to src/content/docs/guides/sanbase/assets-page/assets.png diff --git a/src/content/docs/guides/sanbase/assets-page/index.mdx b/src/content/docs/guides/sanbase/assets-page/index.mdx new file mode 100644 index 000000000..fd7d7625c --- /dev/null +++ b/src/content/docs/guides/sanbase/assets-page/index.mdx @@ -0,0 +1,46 @@ +--- +title: Assets Overview page +author: Santiment Team +description: This page provides a quick overview of your watchlists and common categories. +datePublished: 2019-12-03 +dateModified: 2023-07-07 +sidebar: + order: 30 +--- + +## Structure + +This page is divided into two main sections: + +1. **`Categories`** + + These are specific asset lists curated by the Santiment Team based on various aspects of the assets, such as `Stablecoins`. If you have any feedback or believe we might be missing tokens in any of these categories, please feel free to get in touch with us. + +2. **`Watchlists`** + + These are similar to **Categories**, but the key difference is that they can be created by any user. + + ![](assets.png) + +## Available Categories + +- **`All Assets`**: This category contains all tokens we track across various blockchains. +- **`ERC 20`**: This category exclusively displays Ethereum-based ERC20 tokens. +- **`Top 50 ERC20`**: This is a dynamic category that showcases the 50 most prominent ERC20 projects we track. +- **`Stablecoins`**: This is a curated list of assets that are intended to maintain a fixed value. +- **`Decentralized Exchanges`**: This category contains a curated list of decentralized exchanges and their utility tokens. +- **`Centralized Exchanges`**: This category features a curated list of regular exchanges and their utility tokens. +- **`Emerging Trending Assets`**: This is a dynamic category with assets that are currently trending in our [**_Emerging Trends_**](/metrics/emerging-trends/). + +Each category page contains a table similar to the one found on the **_Watchlist page_**, but the list of assets cannot be modified. + +## How to Create a Watchlist + + diff --git a/src/docs/sanbase/assets-page/page.png b/src/content/docs/guides/sanbase/assets-page/page.png similarity index 100% rename from src/docs/sanbase/assets-page/page.png rename to src/content/docs/guides/sanbase/assets-page/page.png diff --git a/src/content/docs/guides/sanbase/index.mdx b/src/content/docs/guides/sanbase/index.mdx new file mode 100644 index 000000000..602e94800 --- /dev/null +++ b/src/content/docs/guides/sanbase/index.mdx @@ -0,0 +1,20 @@ +--- +title: Sanbase +author: Santiment Team +description: A platform for comprehensive coin analysis, low-latency signals, and asset watchlists +datePublished: 2019-11-22 +dateModified: 2023-07-11 +sidebar: + order: 20 +--- + +Sanbase is a platform designed for in-depth coin analysis, low-latency signals, and asset watchlists. Here are some of the key features you can explore: + +- [Account Settings](/sanbase/account-settings): Manage your account settings here. +- [Alerts](/sanbase/alerts-page): Here, you can create and manage your own alerts or subscribe to existing alerts from other users. +- [Assets Overview page](/sanbase/assets-page): This page provides an overview of your watchlists, screeners, and common categories. +- [Insights](/sanbase/insights): This feature allows you to create note-like posts, share them with the community, or browse existing posts. +- [Keyboard Shortcuts](/sanbase/keyboard-shortcuts/): Learn the keyboard shortcuts to navigate Sanbase more efficiently. +- [Logging into Sanbase](/sanbase/logging-into-sanbase): Find out how to log into your Sanbase account. +- [Request to Display New Project](/sanbase/requesting-display-new-project): Learn how to request a new project display on Sanbase. +- [Social Trends](/sanbase/social-trends/): This feature contains the `Top 10` trending words in crypto, providing a quick overview of the top developing topics in the crypto world at the moment. diff --git a/src/content/docs/guides/sanbase/insights/index.mdx b/src/content/docs/guides/sanbase/insights/index.mdx new file mode 100644 index 000000000..4d91633f6 --- /dev/null +++ b/src/content/docs/guides/sanbase/insights/index.mdx @@ -0,0 +1,36 @@ +--- +title: Sanbase Insights +author: Santiment Team +description: Learn how to create, share, and browse note-like posts using "Sanbase Insights". +datePublished: 2019-12-03 +dateModified: 2023-07-07 +sidebar: + label: Insights + order: 40 +--- + +Begin your journey with **Sanbase Insights** here: [https://insights.santiment.net/](https://insights.santiment.net/) + +Sanbase Insights enables you to create your own note-like posts, share them with the Santiment community, or browse through existing insights. + +![](page.png) + +## Creating a New Insight + +To begin creating a new insight, click on `New Insight` located in the profile dropdown menu. + +During the creation process, you will be asked to provide a title and body for your insight: + +![](new.png) + +Once you've filled in the title and body, Sanbase will automatically begin saving your progress as a draft. + +You also have the option to add tags to your insight. Each insight can have up to five tags, which should correspond to the tickers of the crypto assets your insight is discussing. + +![](prepublish.png) + +Additionally, you have the option to immediately share your insight with the public. + +## Publishing or Deleting Draft Insights + +Under the `My drafts` section, you will find insights that you have initiated but have not yet published for other users. These drafts can be deleted or edited. Once edited, they can be shared using the buttons located on the right side of the screen. diff --git a/src/docs/sanbase/insights/new.png b/src/content/docs/guides/sanbase/insights/new.png similarity index 100% rename from src/docs/sanbase/insights/new.png rename to src/content/docs/guides/sanbase/insights/new.png diff --git a/src/docs/sanbase/insights/page.png b/src/content/docs/guides/sanbase/insights/page.png similarity index 100% rename from src/docs/sanbase/insights/page.png rename to src/content/docs/guides/sanbase/insights/page.png diff --git a/src/docs/sanbase/insights/prepublish.png b/src/content/docs/guides/sanbase/insights/prepublish.png similarity index 100% rename from src/docs/sanbase/insights/prepublish.png rename to src/content/docs/guides/sanbase/insights/prepublish.png diff --git a/src/content/docs/guides/sanbase/keyboard-shortcuts/index.mdx b/src/content/docs/guides/sanbase/keyboard-shortcuts/index.mdx new file mode 100644 index 000000000..a4ef48b4f --- /dev/null +++ b/src/content/docs/guides/sanbase/keyboard-shortcuts/index.mdx @@ -0,0 +1,47 @@ +--- +title: Keyboard Shortcuts +author: Santiment Team +datePublished: 2020-11-24 +dateModified: 2023-07-07 +sidebar: + order: 50 +--- + +### Site Wide Shortcuts + +| Keyboard shortcut | Description | +| ----------------- | ----------------------------------------------------------------- | +| **/** | Select the Sanbase search bar | +| **esc** | Close pop-up modals like alerts, and return to the parent element | + +## Charts + +### General Shortcuts + +| Keyboard Shortcut | Description | +| ----------------------------- | --------------------------------------------------------------------------------------------- | +| **CMD(CTRL) + CLICK** | Hover over any metric on the left-side menu to add it to the first chart | +| **CMD(CTRL) + SHIFT + CLICK** | Hover over any metric on the left-side menu to create a new chart with this metric selected | +| **CMD(CTRL) + CLICK** | For Holder Distribution metrics - select only a single group of holders (deselect all others) | +| **CMD(CTRL) + \*** | Collapse the tree of metrics (left-side menu) | +| **CMD(CTRL) + M** | Open Mapview | +| **CMD(CTRL) + L** | Open Chart layout explorer | +| **CMD(CTRL) + S** | Save Chart layout | + +### Drawing Tools + +| Keyboard Shortcut | Description | +| ----------------- | -------------------------------------------------------------------------------------- | +| **SHIFT + CLICK** | Draw straight lines on the chart by holding the "Shift" key while using the draw tool. | + +## Social Tool Shortcuts + +| Keyboard Shortcut | Description | +| --------------------- | ---------------------------------- | +| **CMD(CTRL) + CLICK** | Add trending word to compare input | + +## Tables + +| Keyboard Shortcut | Description | +| ----------------- | --------------------------------------------------------------------------------------------- | +| **SHIFT + CLICK** | Apply multiple sorting by holding the "Shift" key and clicking on the sortable column header. | diff --git a/src/docs/sanbase/logging-into-sanbase/09_account_menu.png b/src/content/docs/guides/sanbase/logging-into-sanbase/09_account_menu.png similarity index 100% rename from src/docs/sanbase/logging-into-sanbase/09_account_menu.png rename to src/content/docs/guides/sanbase/logging-into-sanbase/09_account_menu.png diff --git a/src/docs/sanbase/logging-into-sanbase/13_login.png b/src/content/docs/guides/sanbase/logging-into-sanbase/13_login.png similarity index 100% rename from src/docs/sanbase/logging-into-sanbase/13_login.png rename to src/content/docs/guides/sanbase/logging-into-sanbase/13_login.png diff --git a/src/docs/sanbase/logging-into-sanbase/14_mm.png b/src/content/docs/guides/sanbase/logging-into-sanbase/14_mm.png similarity index 100% rename from src/docs/sanbase/logging-into-sanbase/14_mm.png rename to src/content/docs/guides/sanbase/logging-into-sanbase/14_mm.png diff --git a/src/docs/sanbase/logging-into-sanbase/25_login_choice.png b/src/content/docs/guides/sanbase/logging-into-sanbase/25_login_choice.png similarity index 100% rename from src/docs/sanbase/logging-into-sanbase/25_login_choice.png rename to src/content/docs/guides/sanbase/logging-into-sanbase/25_login_choice.png diff --git a/src/docs/sanbase/logging-into-sanbase/26_metamask_seperate.png b/src/content/docs/guides/sanbase/logging-into-sanbase/26_metamask_seperate.png similarity index 100% rename from src/docs/sanbase/logging-into-sanbase/26_metamask_seperate.png rename to src/content/docs/guides/sanbase/logging-into-sanbase/26_metamask_seperate.png diff --git a/src/docs/sanbase/logging-into-sanbase/28_metamask_connected.png b/src/content/docs/guides/sanbase/logging-into-sanbase/28_metamask_connected.png similarity index 100% rename from src/docs/sanbase/logging-into-sanbase/28_metamask_connected.png rename to src/content/docs/guides/sanbase/logging-into-sanbase/28_metamask_connected.png diff --git a/src/docs/sanbase/logging-into-sanbase/29_metamask_signin.png b/src/content/docs/guides/sanbase/logging-into-sanbase/29_metamask_signin.png similarity index 100% rename from src/docs/sanbase/logging-into-sanbase/29_metamask_signin.png rename to src/content/docs/guides/sanbase/logging-into-sanbase/29_metamask_signin.png diff --git a/src/content/docs/guides/sanbase/logging-into-sanbase/index.mdx b/src/content/docs/guides/sanbase/logging-into-sanbase/index.mdx new file mode 100644 index 000000000..57c4bb6ba --- /dev/null +++ b/src/content/docs/guides/sanbase/logging-into-sanbase/index.mdx @@ -0,0 +1,63 @@ +--- +title: How to Log in Sanbase +author: Santiment Team +datePublished: 2019-12-03 +dateModified: 2023-07-11 +sidebar: + label: Logging into Sanbase + order: 50 +--- + +There are two methods to log into Sanbase: through [**MetaMask**](https://metamask.io/) and via **email**. For convenience, both methods can and should be linked to the same account. + +## Logging in to Sanbase Using MetaMask + +When you first visit Sanbase at [https://app.santiment.net](https://app.santiment.net), you can find the login option in the upper right corner of the screen. Simply hover your mouse over the last symbol to see it: + +![](13_login.png) + +Click on `Log in`. This will present you with two options for logging in: using MetaMask or your email. For this guide, choose the MetaMask option. + +![](25_login_choice.png) + +At this point, the MetaMask plugin will request permission to display your currently selected account's public data on the Sanbase website. Click `Connect` to allow the plugin and the website to communicate. + +![](26_metamask_seperate.png) + +If you don't see this window, look for the MetaMask icon in the upper right corner of the screen. It should display a small message indicator: + +![](14_mm.png) + +Clicking the MetaMask icon will bring the missing window to the front. + +Once MetaMask and Sanbase are connected, you should see the following screen: + +![](28_metamask_connected.png) + +Click `Sign in with Metamask`. Another prompt will appear: + +![](29_metamask_signin.png) + +Click `SIGN` to securely sign a message with your private key. This action verifies that you are the owner of the connected account. Congratulations, you are now logged into Sanbase. + +#### Adding Your Email + +To add your email, hover over the account icon located at the top right corner of the screen. This action will reveal additional options, including 'Account Settings'. + +![](09_account_menu.png) + +In the 'Account Settings', enter your email address. Once this is done, you can log in using either MetaMask or your email. Regardless of the method you choose, you will be directed to the same account. + +For more information about the 'Account Settings' page, please refer to [this article](/sanbase/account-settings). + +## Logging in via Email + +Logging into Sanbase via email is a straightforward process. Simply enter your email address, and you will receive a link that directs you to a logged-in Sanbase session. + +If this is your first time logging in via email, you have the option to add an Ethereum (ETH) address. This can be done using MetaMask through the Account Settings page, as mentioned above. + +### Purchasing and Staking SAN Tokens + +You are now prepared to stake SAN tokens in order to avail discounts on your access plan. To learn how to stake SAN tokens, please refer to [this article](/san-tokens/connect-a-wallet-to-the-sanbase-account). + +If you need assistance on how to purchase SAN tokens initially, you can find guidance in [this article](/san-tokens/how-to-buy-san-tokens). diff --git a/src/content/docs/guides/sanbase/requesting-display-new-project/index.mdx b/src/content/docs/guides/sanbase/requesting-display-new-project/index.mdx new file mode 100644 index 000000000..2fc2ed0f7 --- /dev/null +++ b/src/content/docs/guides/sanbase/requesting-display-new-project/index.mdx @@ -0,0 +1,26 @@ +--- +title: How to Request New Projects and Tokens for Display on Sanbase +author: Santiment Team +datePublished: 2019-12-03 +dateModified: 2023-07-07 +sidebar: + label: Request to Display New Project + order: 70 +--- + +At Santiment, we work directly with Ethereum on-chain data, which allows us to display information about any token whose contract address is known. However, due to the high volume of tokens available, we have chosen to only make a curated and continuously expanding list of tokens searchable on Sanbase. + +To request the addition of a new token to Sanbase, or to add a known team wallet containing significant assets held by the team, please use the form provided below: + + + +While we appreciate token holders requesting their favorite tokens, we prioritize direct requests from a project's team, especially those that provide information about their funding. diff --git a/src/docs/sanbase/social-trends/image1.png b/src/content/docs/guides/sanbase/social-trends/image1.png similarity index 100% rename from src/docs/sanbase/social-trends/image1.png rename to src/content/docs/guides/sanbase/social-trends/image1.png diff --git a/src/docs/sanbase/social-trends/image10.png b/src/content/docs/guides/sanbase/social-trends/image10.png similarity index 100% rename from src/docs/sanbase/social-trends/image10.png rename to src/content/docs/guides/sanbase/social-trends/image10.png diff --git a/src/docs/sanbase/social-trends/image11.png b/src/content/docs/guides/sanbase/social-trends/image11.png similarity index 100% rename from src/docs/sanbase/social-trends/image11.png rename to src/content/docs/guides/sanbase/social-trends/image11.png diff --git a/src/docs/sanbase/social-trends/image12.png b/src/content/docs/guides/sanbase/social-trends/image12.png similarity index 100% rename from src/docs/sanbase/social-trends/image12.png rename to src/content/docs/guides/sanbase/social-trends/image12.png diff --git a/src/docs/sanbase/social-trends/image13.png b/src/content/docs/guides/sanbase/social-trends/image13.png similarity index 100% rename from src/docs/sanbase/social-trends/image13.png rename to src/content/docs/guides/sanbase/social-trends/image13.png diff --git a/src/docs/sanbase/social-trends/image14.png b/src/content/docs/guides/sanbase/social-trends/image14.png similarity index 100% rename from src/docs/sanbase/social-trends/image14.png rename to src/content/docs/guides/sanbase/social-trends/image14.png diff --git a/src/docs/sanbase/social-trends/image15.png b/src/content/docs/guides/sanbase/social-trends/image15.png similarity index 100% rename from src/docs/sanbase/social-trends/image15.png rename to src/content/docs/guides/sanbase/social-trends/image15.png diff --git a/src/docs/sanbase/social-trends/image16.png b/src/content/docs/guides/sanbase/social-trends/image16.png similarity index 100% rename from src/docs/sanbase/social-trends/image16.png rename to src/content/docs/guides/sanbase/social-trends/image16.png diff --git a/src/docs/sanbase/social-trends/image17.png b/src/content/docs/guides/sanbase/social-trends/image17.png similarity index 100% rename from src/docs/sanbase/social-trends/image17.png rename to src/content/docs/guides/sanbase/social-trends/image17.png diff --git a/src/docs/sanbase/social-trends/image18.png b/src/content/docs/guides/sanbase/social-trends/image18.png similarity index 100% rename from src/docs/sanbase/social-trends/image18.png rename to src/content/docs/guides/sanbase/social-trends/image18.png diff --git a/src/docs/sanbase/social-trends/image19.png b/src/content/docs/guides/sanbase/social-trends/image19.png similarity index 100% rename from src/docs/sanbase/social-trends/image19.png rename to src/content/docs/guides/sanbase/social-trends/image19.png diff --git a/src/docs/sanbase/social-trends/image2.png b/src/content/docs/guides/sanbase/social-trends/image2.png similarity index 100% rename from src/docs/sanbase/social-trends/image2.png rename to src/content/docs/guides/sanbase/social-trends/image2.png diff --git a/src/docs/sanbase/social-trends/image20.png b/src/content/docs/guides/sanbase/social-trends/image20.png similarity index 100% rename from src/docs/sanbase/social-trends/image20.png rename to src/content/docs/guides/sanbase/social-trends/image20.png diff --git a/src/docs/sanbase/social-trends/image21.png b/src/content/docs/guides/sanbase/social-trends/image21.png similarity index 100% rename from src/docs/sanbase/social-trends/image21.png rename to src/content/docs/guides/sanbase/social-trends/image21.png diff --git a/src/docs/sanbase/social-trends/image22.png b/src/content/docs/guides/sanbase/social-trends/image22.png similarity index 100% rename from src/docs/sanbase/social-trends/image22.png rename to src/content/docs/guides/sanbase/social-trends/image22.png diff --git a/src/docs/sanbase/social-trends/image23.png b/src/content/docs/guides/sanbase/social-trends/image23.png similarity index 100% rename from src/docs/sanbase/social-trends/image23.png rename to src/content/docs/guides/sanbase/social-trends/image23.png diff --git a/src/docs/sanbase/social-trends/image24.png b/src/content/docs/guides/sanbase/social-trends/image24.png similarity index 100% rename from src/docs/sanbase/social-trends/image24.png rename to src/content/docs/guides/sanbase/social-trends/image24.png diff --git a/src/docs/sanbase/social-trends/image25.png b/src/content/docs/guides/sanbase/social-trends/image25.png similarity index 100% rename from src/docs/sanbase/social-trends/image25.png rename to src/content/docs/guides/sanbase/social-trends/image25.png diff --git a/src/docs/sanbase/social-trends/image26.png b/src/content/docs/guides/sanbase/social-trends/image26.png similarity index 100% rename from src/docs/sanbase/social-trends/image26.png rename to src/content/docs/guides/sanbase/social-trends/image26.png diff --git a/src/docs/sanbase/social-trends/image27.png b/src/content/docs/guides/sanbase/social-trends/image27.png similarity index 100% rename from src/docs/sanbase/social-trends/image27.png rename to src/content/docs/guides/sanbase/social-trends/image27.png diff --git a/src/docs/sanbase/social-trends/image28.png b/src/content/docs/guides/sanbase/social-trends/image28.png similarity index 100% rename from src/docs/sanbase/social-trends/image28.png rename to src/content/docs/guides/sanbase/social-trends/image28.png diff --git a/src/docs/sanbase/social-trends/image29.png b/src/content/docs/guides/sanbase/social-trends/image29.png similarity index 100% rename from src/docs/sanbase/social-trends/image29.png rename to src/content/docs/guides/sanbase/social-trends/image29.png diff --git a/src/docs/sanbase/social-trends/image3.png b/src/content/docs/guides/sanbase/social-trends/image3.png similarity index 100% rename from src/docs/sanbase/social-trends/image3.png rename to src/content/docs/guides/sanbase/social-trends/image3.png diff --git a/src/docs/sanbase/social-trends/image30.png b/src/content/docs/guides/sanbase/social-trends/image30.png similarity index 100% rename from src/docs/sanbase/social-trends/image30.png rename to src/content/docs/guides/sanbase/social-trends/image30.png diff --git a/src/docs/sanbase/social-trends/image31.png b/src/content/docs/guides/sanbase/social-trends/image31.png similarity index 100% rename from src/docs/sanbase/social-trends/image31.png rename to src/content/docs/guides/sanbase/social-trends/image31.png diff --git a/src/docs/sanbase/social-trends/image4.png b/src/content/docs/guides/sanbase/social-trends/image4.png similarity index 100% rename from src/docs/sanbase/social-trends/image4.png rename to src/content/docs/guides/sanbase/social-trends/image4.png diff --git a/src/docs/sanbase/social-trends/image5.png b/src/content/docs/guides/sanbase/social-trends/image5.png similarity index 100% rename from src/docs/sanbase/social-trends/image5.png rename to src/content/docs/guides/sanbase/social-trends/image5.png diff --git a/src/docs/sanbase/social-trends/image6.png b/src/content/docs/guides/sanbase/social-trends/image6.png similarity index 100% rename from src/docs/sanbase/social-trends/image6.png rename to src/content/docs/guides/sanbase/social-trends/image6.png diff --git a/src/docs/sanbase/social-trends/image7.png b/src/content/docs/guides/sanbase/social-trends/image7.png similarity index 100% rename from src/docs/sanbase/social-trends/image7.png rename to src/content/docs/guides/sanbase/social-trends/image7.png diff --git a/src/docs/sanbase/social-trends/image8.png b/src/content/docs/guides/sanbase/social-trends/image8.png similarity index 100% rename from src/docs/sanbase/social-trends/image8.png rename to src/content/docs/guides/sanbase/social-trends/image8.png diff --git a/src/docs/sanbase/social-trends/image9.png b/src/content/docs/guides/sanbase/social-trends/image9.png similarity index 100% rename from src/docs/sanbase/social-trends/image9.png rename to src/content/docs/guides/sanbase/social-trends/image9.png diff --git a/src/content/docs/guides/sanbase/social-trends/index.mdx b/src/content/docs/guides/sanbase/social-trends/index.mdx new file mode 100644 index 000000000..9a97cf74d --- /dev/null +++ b/src/content/docs/guides/sanbase/social-trends/index.mdx @@ -0,0 +1,339 @@ +--- +title: Social Trends +author: Santiment Team +datePublished: 2025-03-20 +dateModified: 2025-03-20 +sidebar: + order: 80 +--- + +**Social Trends by Santiment** is a comprehensive set of tools for analyzing +cryptocurrency trends. These tools enable the examination of current trends, +identification of underlying factors, and studying of trend changes and how +they correlate with asset prices. + + + +Social trends functionality consists of 5 tools: + +- [Trending words](https://app.santiment.net/social-trends) +- [Trending coins](https://app.santiment.net/social-trends/trending-coins) +- [Historical Crypto Trends](https://app.santiment.net/social-trends/crypto-trends) +- [Key narratives](https://app.santiment.net/social-trends/crypto-narratives) +- [Alpha narratives](https://app.santiment.net/social-trends/crypto-narratives?dialog=alpha_narratives#alpha-narratives) + +Let's take a closer look at each of these tools: + +## Trending Words + +[Trending words](https://app.santiment.net/social-trends?) **page contains the +hourly `Top 10` trending words related to crypto, sourced from more than 6000 +crypto-specific social media channels.** + +The more mentions a word starts receiving compared to the previous period, the +more it is trending. This allows you to find words whose discussions in the +cryptocurrency space are currently gaining popularity. + +![noborder](image1.png) + +**Two purposes for this tool:** + +- To provide a quick overview of the most discussed topics currently in the + crypto social media. +- To provide simple AI explanations for why topics are trending and why they + might be growing. + +### Calculation Methodology + +The analysis of a large number of crypto information sources identifies the +stories that are gaining popularity in the crypto community. So at any given +moment, you can see what's trending in crypto. + +To do this, _every 60 minutes we calculate the top 10 words with the biggest +spike in social media mentions compared to their average social volume over the +previous 2 weeks._ + +This signals an abnormally high interest in a previously uninspiring topic, +making the list practical for discovering new and developing talking points in +the crypto community. + +The results are sourced from more than 6000 crypto-specific social media +channels, including: + +- 500+ Telegram groups +- 500+ crypto subreddits +- 400+ crypto substack newsletters +- 5000+ Twitter accounts + +![noborder](image2.png) + +#### Hype Score + +The Hype Score is the primary criterion for ranking words on our list. It's +based on this [formula](/metrics/emerging-trends/#hype-score) developed +by Santiment, which analyzes all social media messages. + +Using [social volume](/metrics/social-volume) +and number of unique authors we rank words by popularity in social media at the +moment. + +A higher **Hype Score** indicates that for the last 24 hours this particular +word or topic became more valuable for the audience compared to previous 14 +days. + +### How to use it + +1. **Get a 1-minute overview of the biggest (developing) stories in crypto** + + Crypto social media is filled with noise and numerous minor or irrelevant + stories. Our curated list is designed to filter out this noise, focusing + only on topics that have garnered significant attention. Additionally, our + list often highlights important stories that might have been overlooked by + major crypto publications. + +2. **Spot local tops and hype peaks** + + Based on our experience, we've found that the appearance of a token's ticker + on our Top 10 list can serve as an effective indicator of a local top. If + the coin is already in an uptrend, its presence on our list could suggest + that a local top is imminent, indicating that the hype surrounding the coin + has reached its peak. [See our + research.](https://insights.santiment.net/read/can-you-trade-on-trending-crypto-tokens-7396) + +### Explanation for all columns + +#### Social dominance SUM + +![noborder](image3.png) + +Displays the percentage of the total discussions in the crypto space that +the top 10 words occupy. + +#### Trending Chart + +![noborder](image4.png) + +Displays a chart of the popularity of a word over the last 7 days + +#### Social Dominance, 7d + +![noborder](image5.png) + +Displays the average social volume of this word over 7 days; It’s a +percentage of the total number of discussions in the crypto space this word +takes up. + +#### AI Summary + +![noborder](image6.png) + +![noborder](image7.png) + +Our AI integrations helps readers understand of the reasons behind the +sudden rise in popularity of a word. Previously, people could infer the +context from the word cloud of related words, but now AI gives a more +specific answer based on many inputs and sources. In short, it answers the +common question: "**Why is this topic trending? What is the history and +opinions behind it?**" + +#### Connected Words + +![noborder](image8.png) + +Displays a word cloud, showing the words that are most frequently used in +conjunction with your primary keyword on crypto social media. The larger the +displayed word, the more often it appears in comments that also contain your +primary keyword. + +## Trending Coins + +![noborder](image9.png) + +[Trending coins](https://app.santiment.net/social-trends?t=trending-tokens) +shows the top 10 tokens with the most growing number of mentions in the +cryptocurrency space. The more mentions a coin starts receiving compared to +the previous period, the more it is trending. This allows you to find tokens +whose discussions in the cryptocurrency space are currently gaining +popularity. + +By tracking trending tokens, you can find effective entry points into coins +at their price peaks and then play down effectively. You can learn more by +reading [this +article](https://insights.santiment.net/read/can-you-trade-on-trending-crypto-tokens-7396). + +### Token Sentiment + +The social volume of token mentions is categorized into neutral, positive +and negative sentiment based on our [Social +Sentiment](/metrics/sentiment-metrics/#sentiment-analysis) +metric. Studying the distribution of opinions will help you understand the +prevailing sentiment. + +![noborder](image10.png) + +### Top Gainers & Losers + +![noborder](image11.png) + +This block shows the top gainers and losers of coins by change in Social +Dominance over the last 24 hours. + +### Bull-bear meter + +![noborder](image12.png) + +Methodology of bullish, neutral or bearish meters based on custom BERT-like +LLM trained on crypto-related messages from our social media so. + +### AI summary + +![noborder](image13.png) + +![noborder](image14.png) + +Our AI integrations helps readers understand of the reasons behind the +sudden rise in popularity of a word. Previously, people could infer the +context from the word cloud of related words, but now AI gives a more +specific answer based on many inputs and sources. In short, it answers the +common question: "**Why is this topic trending? What is the history and +opinions behind it?**" + +### Bullish summary + +![noborder](image15.png) + +![noborder](image16.png) + +The AI does a summary of messages that have been categorized as bullish. +This way, we can get an overview of all the bullish opinions on social media +and learn in detail why. + +### Bearish summary + +![noborder](image17.png) + +![noborder](image18.png) + +The AI makes a summary of messages that have been categorized as bearish. +This way we can get an overview of all the bearish opinions on social media +and learn in detail why. + +## Historical Crypto Trends + +[Historical Crypto Trends](https://app.santiment.net/dashboards/social-tool#popular-mid-term-trends) +allows you to analyze the dynamics of narratives in the cryptocurrency space +over time and study the impact of these changes on asset prices. This tool +is useful for those who want to see the big picture and historical changes +in trends. + +![noborder](image19.png) + +The main page shows the most popular trends at the moment. But if you need +information on a specific trend, you can use the search bar. + +### Using keywords (OR and AND) and parentheses in searches + +One graph will be displayed for the total mentions, as well as one for each +data source. You can use `AND`, `OR`, and parentheses to logically combine +multiple search terms. Here are some examples: + +- `btc moon` – This will search for the exact phrase "btc moon". +- `btc AND moon` – This will search for messages where both "btc" and "moon" + appear. The words do not need to be next to each other. +- `btc OR moon` – This will search for messages where either "btc" or "moon" + appears. +- `(btc OR bitcoin) AND moon` – This will search for messages where "moon" + appears with either "btc" or "bitcoin". + +### Page with social context analysis of a particular trend + +For example, let's take the Trend Analysis page for the query [bitcoin or +btc](https://app.santiment.net/labs/trends/explore/bitcoin%20or%20btc). + +On the page you can see the [social volume](/metrics/social-volume/) chart of this +trend, on which you can overlay the [social dominance chart](/metrics/social-dominance/#definition), the +price of a certain asset, the correlation of the social trend with the price of +which you want to study, and more. + +![noborder](image20.png) + +Below you can see the dynamics of [social volume](/metrics/social-volume/) change by social +data sources separately. + +You can see graphs for Telegram, Reddit, Twitter, 4chan, and sometimes others. + +![noborder](image21.png) + +The example on the screenshot shows that the spike in social activity on the +\$PEPE coin on the 4Chan site preceded a sharp price increase, while on the +other sources the spike in social activity occurred during or after the price +increase. + +![noborder](image22.png) + +Under “Average” you can see the total social volume compared to the social +volume of your selected topic. + +![noborder](image23.png) + +Nearby, the Social Context feature shows the most used words around your main +keyword on cryptocurrency social media. The size and color of each word in the +cloud represents its frequency in comments that also mention your main keyword. + +![noborder](image24.png) + +If you want to compare the dynamics of one social trend with another, you need +to click “Compare” and add a trend. + +![noborder](image25.png) + +Example comparison of trends: Bitcoin vs. Ethereum + +![noborder](image26.png) + +Average social volume trends comparison example + +![noborder](image27.png) + +## Key Narratives + +The [Key Narratives](https://app.santiment.net/social-trends/crypto-narratives) +chart displays the social media volume of curated, key narratives over time. + +![noborder](image28.png) + +Hover over the chart to view the detailed query. To edit this chart, first copy +it to your Narratives. + +![noborder](image29.png) + +At the bottom of the page you can see the list of narratives shown on the +chart, the social query behind them, as well as the Soc. volume chart and the +Soc. dominance value, 7d. + +![noborder](image30.png) + +## Alpha Narratives + +[Alpha Narratives](https://app.santiment.net/social-trends/crypto-narratives?dialog=alpha_narratives#alpha-narratives) +are an invaluable tool for those looking to identify the most popular +discussion topics from the past week. They provide a clear and data-informed +view of trends, steering clear of subjective opinions. + +Explore how various narratives from X (formerly Twitter) influence the crypto +market. Our AI detects these narratives within the daily message volume, +providing insights into crypto community discussions. + +Track how each narrative evolves over time and access AI-generated explanations +for deeper understanding. + +![noborder](image31.png) diff --git a/src/docs/sansheets/adding-an-api-key/11_add_api_key.png b/src/content/docs/guides/sansheets/adding-an-api-key/11_add_api_key.png similarity index 100% rename from src/docs/sansheets/adding-an-api-key/11_add_api_key.png rename to src/content/docs/guides/sansheets/adding-an-api-key/11_add_api_key.png diff --git a/src/docs/sansheets/adding-an-api-key/12_add_api_key2.png b/src/content/docs/guides/sansheets/adding-an-api-key/12_add_api_key2.png similarity index 100% rename from src/docs/sansheets/adding-an-api-key/12_add_api_key2.png rename to src/content/docs/guides/sansheets/adding-an-api-key/12_add_api_key2.png diff --git a/src/docs/sansheets/adding-an-api-key/13_add_api_key_confirmation.png b/src/content/docs/guides/sansheets/adding-an-api-key/13_add_api_key_confirmation.png similarity index 100% rename from src/docs/sansheets/adding-an-api-key/13_add_api_key_confirmation.png rename to src/content/docs/guides/sansheets/adding-an-api-key/13_add_api_key_confirmation.png diff --git a/src/content/docs/guides/sansheets/adding-an-api-key/index.mdx b/src/content/docs/guides/sansheets/adding-an-api-key/index.mdx new file mode 100644 index 000000000..d72102194 --- /dev/null +++ b/src/content/docs/guides/sansheets/adding-an-api-key/index.mdx @@ -0,0 +1,32 @@ +--- +title: Adding an API Key to Sansheets +author: Max Bartel +datePublished: 2019-11-22 +dateModified: 2023-06-07 +sidebar: + label: Adding an API Key + order: 20 +--- + +Adding an API key to Sansheets is very simple. Before you begin, make sure you have completed the following steps: + +- [Setting up Sansheets](/sansheets/setting-up/) +- [Creating an API key](https://sheets.santiment.net/account#api-keys) + +If you have already completed these steps, you can proceed with adding the API key to Sansheets. + +You will find the option to add an API key in the **`Add-ons`** menu under **`Santiment Data`**: + +![](11_add_api_key.png) + +A popup will appear, prompting you to enter your API key: + +![](12_add_api_key2.png) + +Copy the API key from your Sanbase account settings, paste it into the popup, and click `Ok`. + +Sansheets will confirm that you have entered a valid API key: + +![](13_add_api_key_confirmation.png) + +You will now have access to more data, depending on your stake of SAN tokens. diff --git a/src/docs/sansheets/asset-activity-matrix/ActivityMatrix.png b/src/content/docs/guides/sansheets/asset-activity-matrix/ActivityMatrix.png similarity index 100% rename from src/docs/sansheets/asset-activity-matrix/ActivityMatrix.png rename to src/content/docs/guides/sansheets/asset-activity-matrix/ActivityMatrix.png diff --git a/src/docs/sansheets/asset-activity-matrix/anomolieview.png b/src/content/docs/guides/sansheets/asset-activity-matrix/anomolieview.png similarity index 100% rename from src/docs/sansheets/asset-activity-matrix/anomolieview.png rename to src/content/docs/guides/sansheets/asset-activity-matrix/anomolieview.png diff --git a/src/docs/sansheets/asset-activity-matrix/bar1.png b/src/content/docs/guides/sansheets/asset-activity-matrix/bar1.png similarity index 100% rename from src/docs/sansheets/asset-activity-matrix/bar1.png rename to src/content/docs/guides/sansheets/asset-activity-matrix/bar1.png diff --git a/src/docs/sansheets/asset-activity-matrix/bluesqq.png b/src/content/docs/guides/sansheets/asset-activity-matrix/bluesqq.png similarity index 100% rename from src/docs/sansheets/asset-activity-matrix/bluesqq.png rename to src/content/docs/guides/sansheets/asset-activity-matrix/bluesqq.png diff --git a/src/docs/sansheets/asset-activity-matrix/chainlinkexample.png b/src/content/docs/guides/sansheets/asset-activity-matrix/chainlinkexample.png similarity index 100% rename from src/docs/sansheets/asset-activity-matrix/chainlinkexample.png rename to src/content/docs/guides/sansheets/asset-activity-matrix/chainlinkexample.png diff --git a/src/docs/sansheets/asset-activity-matrix/column1.png b/src/content/docs/guides/sansheets/asset-activity-matrix/column1.png similarity index 100% rename from src/docs/sansheets/asset-activity-matrix/column1.png rename to src/content/docs/guides/sansheets/asset-activity-matrix/column1.png diff --git a/src/docs/sansheets/asset-activity-matrix/datarefreshhowto.png b/src/content/docs/guides/sansheets/asset-activity-matrix/datarefreshhowto.png similarity index 100% rename from src/docs/sansheets/asset-activity-matrix/datarefreshhowto.png rename to src/content/docs/guides/sansheets/asset-activity-matrix/datarefreshhowto.png diff --git a/src/content/docs/guides/sansheets/asset-activity-matrix/index.mdx b/src/content/docs/guides/sansheets/asset-activity-matrix/index.mdx new file mode 100644 index 000000000..403a7e507 --- /dev/null +++ b/src/content/docs/guides/sansheets/asset-activity-matrix/index.mdx @@ -0,0 +1,147 @@ +--- +title: The Activity Matrix +author: David Utrobin & Brian +datePublished: 2025-11-04 +dateModified: 2025-11-04 +sidebar: + label: Asset Activity Matrix + order: 40 +--- + +# The Activity Matrix + +What if you could absorb all of your daily crypto analytic research on one page? No tab changing, no switching between individual assets one after another, and no scrolling between different metrics to see which are pointing to valuable future tops and bottoms forming. + +Here is the tool for you. Available through SanSheets, the Activity Matrix captures all of the information necessary to make more informed investing and trading decisions for your portfolio. This powerful tool provides the past week of data for 114 of crypto's most well known assets, displaying how the top eight metrics currently stand compared to each asset's respective 3-month averages. + +[Open the FULL version of the Activity Matrix here](https://docs.google.com/spreadsheets/d/1XSYTrBAY6b5oLO5btRRh40I7CftN76gJ1bKU_owHHeA/view), then go to File > Make a Copy, then download and enable the Sansheets Extension, and plug in your API located in your Sanbase Account Settings. + +[Open the MINI version of the Activity Matrix here](https://docs.google.com/spreadsheets/d/1o3WJQCVn5wz66c33B8NZHQPf7epOSwHVAaf9iN3SrFk/view), then go to File > Make a Copy, then download and enable the Sansheets Extension, and plug in your API located in your Sanbase Account Settings. + +## Activity Matrix Guide + +### General Instructions and Guidelines + +**Requirements for Full Version:** + +- Sanbase PRO membership or an active trial. +- A paid Google Suite subscription associated with your Sanbase PRO email address. +- Sansheets [Add-on installed on Google Sheets](/sansheets/setting-up/) + +**Requirements for Mini Version:** + +- Sanbase PRO membership or an active trial. + +**First time user instructions:** + +- Go to File, then copy for an exact replica of the main Activity Matrix file. The source file is not editable and does not allow API data to load, but your copy will! +- Update this spreadsheet once per day, after 12am UTC. All metrics (other than price) are daily metrics and only update on Santiment's API once daily at 12:00am UTC. Even on fast computers, expect the entire loading process to take 10-20 minutes. +- To refresh, go to the Data tab and hit the 'Backspace' button on your keyboard while highlighting cell A1, wait 1 minute, then hit the Undo button. Alternatively, hit 'Ctrl' + 'Shift' + "R" or your system's equivalent for a hard refresh. +- Depending on your timezone, certain times of day will show either the past 7 full days or past 6 full days (with the bottom row intentionally blank). The amount of days loaded will depend on how far past 12AM UTC time the new partial day has elapsed. If you prefer to see all 7 days loaded at the same time, it is best to refresh 2-6 hours after 12AM UTC. +- The 'Table' and 'Data' tabs don't need to be touched, unless you plan on changing asset slugs(names). These tabs are where the calculations happen to provide the data that feeds to the more useful tabs. + +**Tips:** + +- Keep view of spreadsheet on 150% View magnification for optimal font & color scaling. Use keyboard shortcuts CTRL+ or CTRL- to zoom accordingly. The main 3 tabs are 'Detailed', 'Anomalies', and 'Top 10', and they will all fit a standard or widescreen monitor perfectly with this zoom percentage. +- On the 'Detailed' and 'Anomalies' tabs, you will see the amount of data loaded and completed in cell A1. With the default amount of boxes set (6,948), cell A1 on these two tabs will be considered 100.0% complete if at least 6 out of 7 full days are loaded. + +### What am I Looking at? + +In the Activity Matrix 'Detailed' tab, you'll see a wide range of multi-colored squares ranging from red to blue. And every single one of them has meaning. + +- The y-axis for each square, as you'll see on the far left, represents the day of the week. +- The x-axis for each square, as you'll see on the top, represents the leading alpha metric that helps predict future market movement. + +![](ActivityMatrix.png) + +A red square indicates that the asset's metric is significantly higher than the average of its past 3 months. +For example, [Active Addresses](/metrics/active-addresses-24h): High activity is important to monitor because it generally reflects more utility on a coin's network, which can support the thesis of long-term future price growth. + +![](redsq.png) + +A blue square indicates that the asset's metric is significantly lower than the average of its past 3 months. +For example, [Whale Transaction Count 100k+ USD](/metrics/whale-transaction-count): Low whale transaction numbers reflect minimal engagement and interest levels from the key stakeholders for that asset, which generally is a bit more bearish than bullish in most cases. + +![](bluesqq.png) + +A yellow square indicates an average day for that metric compared to the asset's 3-month average, meaning nothing of significance is happening there. + +![](yellowsq.png) + +Colors in between should be fairly intuitive to understand: red > orange > yellow > green > blue + +These colors are also present in the cells containing the name of each asset. You'll see each asset's name in alphabetical order from top to bottom and left to right, with its most recent day's market cap rank in parentheses. + +![](nameorganization.png) + +If the average of the most recent full day's activity for that asset has been high (for the eight metrics combined), then the name should show as red or orange. Alternatively, if the most recent full day's activity for that asset has been low, you'll see the coin's name in blue or green. Yellow would be an average day in reference to the eight metrics combined. + +Additionally, on the 'Detailed' and 'Anomalies' tabs alike, four percentages appear beneath each asset’s name. Reading left to right, they show the 1-day, 7-day, 30-day, and 90-day price percentage changes. Note that the color of each percentage is based on the price returned for that interval, compared to the average of all other coins on the Activity Matrix. So if it's green, it's overperforming compared to other assets. If it's yellow, it's neutral. If it's red, it's underperforming. For example, the 7-day % for Chainlink(image below) is showing +38% in solid green, meaning it is performing better than almost every other coin based on 7-day percentages. + +![](chainlinkexample.png) + +Having price data can be extremely important, as sometimes an asset gets hot before its price has pumped while other times it gets hot because the price has pumped. The scenario where a price hasn't yet reacted to a hot metric usually provides a better opportunity for a trade. + +### The Eight Key Metrics + +![](column1.png) + +Let us examine the eight key metrics we track and the reasons each matters for future price movement. Please note that not every asset reports all eight; most do, but any missing value will appear as a blank (white) square. + +[Active Addresses](/metrics/active-addresses-24h): The amount of unique addresses interacting on the coin's network. Red squares indicating high address activity show that there is a rising amount of various individuals on the sending or receiving side of transactions, and rising utility is a necessary ingredient for long-term market cap growth. + +[Network Growth](/metrics/network-growth/): The amount of new addresses created on the coin's network. Similar to Active Addresses, red squares indicating high Network Growth imply that there are more opportunities for rising utility in the future. Simply put, more new existing addresses means more possibilities for transactions to take place. + +[Whale Transaction Count 100k+ USD](/metrics/whale-transaction-count/): The amount of transactions that exceed $100K in value. Red squares indicating high amounts of whale transactions for that day are an indication that major key stakeholders are taking interest in the asset at an increasing rate. Yes, this can mean that whales could be selling off. But more commonly, a rising amount of large valued transactions means that there is increased interest in the asset overall from a group of traders that can cause an asset's price to rise quickly. + +[$100K-$1M Supply Held](/metrics/supply-distribution/#our-supply-distribution-metrics): The percentage of the overall available supply of a coin that is held by wallets with ~$100K-$1M worth of the asset. This metric can work hand in hand with Whale Transactions. If there is a rising amount of $100K+ transactions AND a red square indicates that the supply held from this key tier of investors is rising, that is a sure sign that they key stakeholders are accumulating. Note that the asterisk next to this metric means that changing prices could mean that whales holding 100K-1M when the asset costs $2, may actually eventually turn into the $1M-$10M tier instead if the asset's value becomes $20. Look for new model updates from the team that reflect updated prices every few months and/or years. + +[Social Dominance](/metrics/social-dominance): The only social metric among these eight metrics, social dominance measures the overall percentage of discussion related to an asset when combining chats on Twitter, Reddit, Telegram, and 4Chan. Generally, more long-term discussion about the asset is good. A red square indicating a rise in discussion rate shows that there is increased trader interest. That being said, understand that this metric can also occasionally be useful as a caution flag. If you see rising social dominance BECAUSE an asset has been surging in value, this is a sign of FOMO. So for Social Dominance in particular, pay attention to the price percentage changes of the asset relative to the model's other assets before getting too excited about a red square. + +[Exchange Inflow/Outflow](/metrics/exchange-funds-flow): The net difference between coins moving on to known exchanges vs. off of known exchanges. A red square reflecting that coins are moving off of exchanges can be very helpful, especially in cases where prices have already been rising, because it means traders are content with moving more coins into self custody instead of selling them off. Alternatively, a blue square (particularly when prices have been rising) indicates that many coins are suddenly moving on to exchanges and a local top is much more common due to a likely sell-off from many traders. + +[Mean Dollar Invested Age](/metrics/mean-coin-age): The average age in which coins have sat in their respective wallets across a coin's network. A red square indicates that the Mean Dollar Invested Age curve is moving down, which if given enough time, can be interpreted as validation of the coin being in a(n) (at least small) bull run. Alternatively, when coins are stagnant and continuing to "collect dust" in their same wallets, this prevents a healthy amount of utility and circulation that is typically necessary for market caps to grow. + +[Age Consumed](/metrics/age-consumed): Similar to Mean Dollar Invested age, this metric looks at the amount of coins moved multiplied by the "age" in which they had been sitting prior to being moved. In short, a red square reflects that a large amount of coins (which had previously been stagnant) have suddenly moved for the first time in a long time. This is generally a bullish sign, as it means that a network just received a healthy amount of coins that can now be moved back into regular circulation, theoretically bolstering the network's overall activity. + +### The Anomolies Tab + +The anomolies tab is an alternative view that simplifies things if the massive array of different colors aren't your thing. The 'Anomolies' tab, shown below, displays all squares in yellow UNLESS the metric for that day is an extreme outlier. In other words, only the top 3 days(shown in red) or bottom 3 days(shown in blue), compared to the asset's past 3 months of data, will be visible. This view can make it much easier to quickly find assets of interest. + +![](anomolieview.png) + +### The Top 10 Tab + +If you want to get straight to the point of seeing which assets are doing best amongst different categories on the Activity Matrix model, look no further than the 'Top 10' tab. Here, you will see the 10 best performing coins on the model according to each price change interval, as well as the most recent day's current metric ranking (compared to each coin's 3-month average) for each metric. + +![](top10tab.png) + +This can be tremendously handy, and may even be your preferred way of viewing the data on this model. Want to know which coins are having the highest spikes in whale transactions vs. their 3-month averages? Look no further than the Top 10 list on this tab. + +You will see the price percentage changes next to the coin's name for the price change leaderboards. And within each of the eight metric ranking leaderboards, you will see the coin's most recent full day's ranking for that metric. For example, if you see "1" this shows that the coin in question is having it's best reading of that metric in the last 3 months. + +There is an 'Overall Average Rank' leaderboard on the far right of this 'Top 10' tab. It averages the rankings of all eight metrics together to indicate which coins have the best overall 'Hot' rankings. + +### Loading Data + +When you open the file, you will have to load the data. During loading times, you'll see how much data the model has left to load, as well as any individual coin and metric data errors coming in from the API. These errors will be rare and generally minor, but they are inevitable. So keep in mind that there is nothing wrong with your file when it does happen. Usually it's due to Google Sheets timing out temporarily when trying to retrieve a specific asset's data. If the square reaches 100%, it should turn green. If the progress bar lingers between 97 and 99 % without advancing, you may safely consider the load as complete. The stall may occur because certain metrics for certain assets are occationaly switched active or inactive on the Santiment API. + +![](loading.png) + +With the massive amount of data needing to be pulled, a new load takes roughly 10-15 minutes for a paid Google Suite email address. If you are on a free Google Suite plan, the API data will stop loading after 6 minutes, and there is no way around this. If you can't get around this limitation, we made a convenient [Mini Activity Matrix](https://docs.google.com/spreadsheets/d/1o3WJQCVn5wz66c33B8NZHQPf7epOSwHVAaf9iN3SrFk/view) that has 20 of the most followed assets, which should take less than the maximum 6 minutes of time that a free Google Suite account allows. It will have 20 assets instead of 100+. + +### Refreshing Data + +Google Sheets doesn't exactly allow a simple browser refresh to make the Santiment API reset with new and fresh data every day. Here's the easiest method to refresh: + +Go to the Data tab and hit the 'Backspace' button on your keyboard while highlighting cell A1, wait 1 minute, then hit the Undo button or type '=TODAY+1' and hit the 'Enter' button on your keyboard. + +![](datarefreshhowto.png) + +Due to Google Sheets limitations, there could be trouble refreshing on certain days. To force a refresh if the above step doesn't work, copy the browser URL of your spreadsheet, close the tab on your browser, wait at least 10 seconds, and then paste the URL back in your browser and hit 'Enter' on your keyboard to "hard reload" the spreadsheet. + +Note that this model has daily metrics, so there should be no need to refresh this model more than once per day. With the massive amount of data needing to be pulled, a refresh takes roughly 10-15 minutes for a paid Google Suite email address. If you are on a free Google Suite plan, the API data will stop loading after 6 minutes, and there is no way around this. If you can't get around this limitation, we made a convenient [Mini Activity Matrix](https://docs.google.com/spreadsheets/d/1o3WJQCVn5wz66c33B8NZHQPf7epOSwHVAaf9iN3SrFk/view) that has 20 of the most followed assets, which should take less than the maximum 6 minutes of time that a free Google Suite account allows. It will have 20 assets instead of 100+. + +## Disclaimer + +Trading is, of course, at your own risk. This model simply presents provides you the data necessary for you to make the most informed decisions for your own strategy. diff --git a/src/docs/sansheets/asset-activity-matrix/loading.png b/src/content/docs/guides/sansheets/asset-activity-matrix/loading.png similarity index 100% rename from src/docs/sansheets/asset-activity-matrix/loading.png rename to src/content/docs/guides/sansheets/asset-activity-matrix/loading.png diff --git a/src/docs/sansheets/asset-activity-matrix/nameorganization.png b/src/content/docs/guides/sansheets/asset-activity-matrix/nameorganization.png similarity index 100% rename from src/docs/sansheets/asset-activity-matrix/nameorganization.png rename to src/content/docs/guides/sansheets/asset-activity-matrix/nameorganization.png diff --git a/src/docs/sansheets/asset-activity-matrix/redsq.png b/src/content/docs/guides/sansheets/asset-activity-matrix/redsq.png similarity index 100% rename from src/docs/sansheets/asset-activity-matrix/redsq.png rename to src/content/docs/guides/sansheets/asset-activity-matrix/redsq.png diff --git a/src/docs/sansheets/asset-activity-matrix/top10tab.png b/src/content/docs/guides/sansheets/asset-activity-matrix/top10tab.png similarity index 100% rename from src/docs/sansheets/asset-activity-matrix/top10tab.png rename to src/content/docs/guides/sansheets/asset-activity-matrix/top10tab.png diff --git a/src/docs/sansheets/asset-activity-matrix/yellowsq.png b/src/content/docs/guides/sansheets/asset-activity-matrix/yellowsq.png similarity index 100% rename from src/docs/sansheets/asset-activity-matrix/yellowsq.png rename to src/content/docs/guides/sansheets/asset-activity-matrix/yellowsq.png diff --git a/src/docs/sansheets/assets-correlation-matrix-google-sheets/how-to-calculate-correl.png b/src/content/docs/guides/sansheets/assets-correlation-matrix-google-sheets/how-to-calculate-correl.png similarity index 100% rename from src/docs/sansheets/assets-correlation-matrix-google-sheets/how-to-calculate-correl.png rename to src/content/docs/guides/sansheets/assets-correlation-matrix-google-sheets/how-to-calculate-correl.png diff --git a/src/docs/sansheets/assets-correlation-matrix-google-sheets/how-to-fetch-financial-data.png b/src/content/docs/guides/sansheets/assets-correlation-matrix-google-sheets/how-to-fetch-financial-data.png similarity index 100% rename from src/docs/sansheets/assets-correlation-matrix-google-sheets/how-to-fetch-financial-data.png rename to src/content/docs/guides/sansheets/assets-correlation-matrix-google-sheets/how-to-fetch-financial-data.png diff --git a/src/docs/sansheets/assets-correlation-matrix-google-sheets/how-to-increase-decimals.png b/src/content/docs/guides/sansheets/assets-correlation-matrix-google-sheets/how-to-increase-decimals.png similarity index 100% rename from src/docs/sansheets/assets-correlation-matrix-google-sheets/how-to-increase-decimals.png rename to src/content/docs/guides/sansheets/assets-correlation-matrix-google-sheets/how-to-increase-decimals.png diff --git a/src/content/docs/guides/sansheets/assets-correlation-matrix-google-sheets/index.mdx b/src/content/docs/guides/sansheets/assets-correlation-matrix-google-sheets/index.mdx new file mode 100644 index 000000000..d884c565b --- /dev/null +++ b/src/content/docs/guides/sansheets/assets-correlation-matrix-google-sheets/index.mdx @@ -0,0 +1,66 @@ +--- +title: How to Create a Correlation Matrix +author: Yura Zatsepin +datePublished: 2020-11-24 +dateModified: 2025-11-04 +sidebar: + label: Correlation Matrix + order: 30 +--- + +In this article, we will demonstrate the power and ease of using Google Sheets Integration with Santiment data. You will learn how to create a correlation matrix similar to the one on Cryptowatch.io, with the added bonus of being able to create a correlation matrix for not only the top 20 assets but for any crypto assets. + +> In the world of finance, correlation is a statistical measure of how two assets move in relation to each other. + +> Simply put, correlation tells us whether two cryptocurrencies move in the same or the opposite direction, or even behave entirely independent of each other. + +> If used properly, coin correlation can elevate your trading in more ways than one. Investing in uncorrelated assets, for example, will help hedge your portfolio and mitigate risk. If you’re not sure where Bitcoin’s headed next and want to protect yourself against losses, taking a position in uncorrelated coins can (in theory) diversify your exposure in case of market correction. + +> On the other hand, trading highly correlated assets is more of a risk-on strategy that some may use to amplify their returns. Even during a bull run, Bitcoin rarely does more than +15% in a week. However, mid-cap alts that tend to mirror BTC’s price action could well explode within the same time frame. + +To create your own correlation matrix, you need to complete 3 steps: + +1. Fetch pricing data for the last 7 days (if you want to see the correlation for the last 7 days) +2. Calculate the correlation coefficient +3. Organize a clear visualization for the resulting matrix + +[You can view the full sample here](https://docs.google.com/spreadsheets/d/1UcgTvueFeDtv9k2xb2zwFLXtsAnUzy1JsN0KIHvC40I/edit?usp=sharing) + +## How to Fetch Pricing Data + +Fetching pricing data is simple using SAN functions in the formula field. Enter the following formula: + +``` +=SAN_PRICES("bitcoin", TODAY() - 7, TODAY()) +``` + +This function will automatically populate the last 7 days of Bitcoin's USD price and trading volume, as shown below: + +![](how-to-fetch-financial-data.png) + +## How to Calculate Correlations + +Google Sheets has a built-in function for calculating the Pearson Correlation: +`=CORREL()` + +To calculate the Pearson Coefficient for Bitcoin and Ethereum, simply select the cells with BTC price data (in our case, C7:C13) and the cells with Ethereum price data (G7:G13) within the `=CORREL()` function, as shown below: + +![](how-to-calculate-correl.png) + +## Create an Effective Visualization + +We recommend using the following matrix structure for better visualization. You can refer to the image below. + +![](make-a-nice-matrix.png) + +> To create a more visually appealing correlation result, consider rounding the numbers to two decimal places. For example, change 0.034343434 to 0.03. +> +> You can achieve this by using the built-in feature shown in the image below. +> +> ![](how-to-increase-decimals.png) + +--- + +Using Sansheets (Google Sheets Integration of Santiment data) is a convenient and flexible way to conduct your own research based on on-chain, social, and financial data without the need for Python or Julia code. The sample for this article was created in just 10 minutes. + +[View the final sample here](https://docs.google.com/spreadsheets/d/1UcgTvueFeDtv9k2xb2zwFLXtsAnUzy1JsN0KIHvC40I/edit?usp=sharing) diff --git a/src/docs/sansheets/assets-correlation-matrix-google-sheets/make-a-nice-matrix.png b/src/content/docs/guides/sansheets/assets-correlation-matrix-google-sheets/make-a-nice-matrix.png similarity index 100% rename from src/docs/sansheets/assets-correlation-matrix-google-sheets/make-a-nice-matrix.png rename to src/content/docs/guides/sansheets/assets-correlation-matrix-google-sheets/make-a-nice-matrix.png diff --git a/src/content/docs/guides/sansheets/functions/index.mdx b/src/content/docs/guides/sansheets/functions/index.mdx new file mode 100644 index 000000000..89c3796d2 --- /dev/null +++ b/src/content/docs/guides/sansheets/functions/index.mdx @@ -0,0 +1,17 @@ +--- +title: Functions We Offer +author: Santiment Team +datePublished: 2019-11-22 +dateModified: 2023-06-07 +sidebar: + label: Functions + order: 50 +--- + +# Content + +## [On-Chain Data Functions](/sansheets/functions/onchain/) + +## [Social Data Functions](/sansheets/functions/social/) + +## [XRPL-related Data Functions](/sansheets/functions/xrp/) diff --git a/src/content/docs/guides/sansheets/functions/onchain/index.mdx b/src/content/docs/guides/sansheets/functions/onchain/index.mdx new file mode 100644 index 000000000..40a840b5d --- /dev/null +++ b/src/content/docs/guides/sansheets/functions/onchain/index.mdx @@ -0,0 +1,2885 @@ +--- +title: Onchain Data Functions +author: Santiment Team +datePublished: 2019-11-22 +dateModified: 2023-03-31 +--- + +## SAN_ACTIVE_ADDRESSES + +##### SAN_ACTIVE_ADDRESSES(projectSlug, from, to, interval) ⇒ Array + +Returns the active addresses for the specified asset, during a given time interval. +Active Addresses" refers to the number of unique addresses that +participated in transactions on a blockchain. + +- **Kind**: global function +- **Returns**: Array - of active addresses. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_ACTIVE_ADDRESSES_24H + +##### SAN_ACTIVE_ADDRESSES_24H(projectSlug, from, to, interval) ⇒ Array + +Returns the active addresses for the specified asset, during a given time interval. +Active Addresses" refers to the number of unique addresses that +participated in transactions on a blockchain. + +- **Kind**: global function +- **Returns**: Array - of active addresses for the last 24 hours. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_ACTIVE_ADDRESSES_24H_AGGREGATED + +##### SAN_ACTIVE_ADDRESSES_24H_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the active addresses for the specified asset, during a given time interval. +Active Addresses" refers to the number of unique addresses that +participated in transactions on a blockchain. + +- **Kind**: global function +- **Returns**: number - of aggregated active addresses for the last 24 hours. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_ACTIVE_ADDRESSES_24H_MULTIPLE_SLUGS + +##### SAN_ACTIVE_ADDRESSES_24H_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the active addresses for the specified asset, during a given time interval. +Active Addresses" refers to the number of unique addresses that +participated in transactions on a blockchain. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +active addresses for the last 24 hours. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_ACTIVE_ADDRESSES_AGGREGATED + +##### SAN_ACTIVE_ADDRESSES_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the active addresses for the specified asset, during a given time interval. +Active Addresses" refers to the number of unique addresses that +participated in transactions on a blockchain. + +- **Kind**: global function +- **Returns**: number - of aggregated active addresses. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_ACTIVE_ADDRESSES_MULTIPLE_SLUGS + +##### SAN_ACTIVE_ADDRESSES_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the active addresses for the specified asset, during a given time interval. +Active Addresses" refers to the number of unique addresses that +participated in transactions on a blockchain. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +active addresses. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_ACTIVE_DEPOSITS + +##### SAN_ACTIVE_DEPOSITS(projectSlug, from, to, interval) ⇒ Array + +Returns number of unique deposit addresses that have been active for a project. + +- **Kind**: global function +- **Returns**: Array - of deposit address numbers. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_ACTIVE_DEPOSITS_AGGREGATED + +##### SAN_ACTIVE_DEPOSITS_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns number of unique deposit addresses that have been active for a project. + +- **Kind**: global function +- **Returns**: number - of aggregated deposit address numbers. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_ACTIVE_DEPOSITS_MULTIPLE_SLUGS + +##### SAN_ACTIVE_DEPOSITS_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns number of unique deposit addresses that have been active for a project. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +deposit address numbers. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_AGE_DESTROYED + +##### SAN_AGE_DESTROYED(projectSlug, from, to, interval) ⇒ Array + +Returns the token's age destroyed + +- **Kind**: global function +- **Returns**: Array - of age destroyed values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_AGE_DESTROYED_AGGREGATED + +##### SAN_AGE_DESTROYED_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the token's age destroyed + +- **Kind**: global function +- **Returns**: number - of aggregated age destroyed values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_AGE_DESTROYED_MULTIPLE_SLUGS + +##### SAN_AGE_DESTROYED_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the token's age destroyed + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +age destroyed values. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_ALL_PROJECTS + +##### SAN_ALL_PROJECTS() ⇒ Array + +Returns an array of all assets for which Santiment has data. +Each asset record includes: ticker, name, slug, price in USD, market cap in USD, +volume in USD, USD balance, ETH balance, ETH spent in the last 30 days, +ETH spent in the last 7 days, ETH spent in the last day. + +- **Kind**: global function +- **Returns**: Array - of all projects. +- **Customfunction**: + +## SAN_BITMEX_PERPETUAL_CONTRACT_FUNDING_RATE + +##### SAN_BITMEX_PERPETUAL_CONTRACT_FUNDING_RATE(projectSlug, from, to, interval) ⇒ Array + +Returns the funding rates that are paid by one of the sides of the perpetual contract to the other + +- **Kind**: global function +- **Returns**: Array - of the funding rates that are paid by one of the sides of the perpetual contract to the other +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_BITMEX_PERPETUAL_CONTRACT_FUNDING_RATE_AGGREGATED + +##### SAN_BITMEX_PERPETUAL_CONTRACT_FUNDING_RATE_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the funding rates that are paid by one of the sides of the perpetual contract to the other + +- **Kind**: global function +- **Returns**: number - of aggregated the funding rates that are paid by one of the sides of the perpetual contract to the other +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_BITMEX_PERPETUAL_CONTRACT_FUNDING_RATE_MULTIPLE_SLUGS + +##### SAN_BITMEX_PERPETUAL_CONTRACT_FUNDING_RATE_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the funding rates that are paid by one of the sides of the perpetual contract to the other + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the funding rates that are paid by one of the sides of the perpetual contract to the other +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_BITMEX_PERPETUAL_OPEN_INTEREST + +##### SAN_BITMEX_PERPETUAL_OPEN_INTEREST(projectSlug, from, to, interval) ⇒ Array + +Returns the amount of open perpetual contracts currently on Bitmex's +Project Ticker / USD trading pairs. When open interest reaches unusually high numbers, +it can precede increased volatility in the coin’s price. + +- **Kind**: global function +- **Returns**: Array - of the amount of open perpetual contracts. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_BITMEX_PERPETUAL_OPEN_INTEREST_AGGREGATED + +##### SAN_BITMEX_PERPETUAL_OPEN_INTEREST_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the amount of open perpetual contracts currently on Bitmex's +Project Ticker / USD trading pairs. When open interest reaches unusually high numbers, +it can precede increased volatility in the coin’s price. + +- **Kind**: global function +- **Returns**: number - of aggregated the amount of open perpetual contracts. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_BITMEX_PERPETUAL_OPEN_INTEREST_MULTIPLE_SLUGS + +##### SAN_BITMEX_PERPETUAL_OPEN_INTEREST_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the amount of open perpetual contracts currently on Bitmex's +Project Ticker / USD trading pairs. When open interest reaches unusually high numbers, +it can precede increased volatility in the coin’s price. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the amount of open perpetual contracts. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_DAILY_AVG_MARKETCAP + +##### SAN_DAILY_AVG_MARKETCAP(projectSlug, from, to, currency, interval) ⇒ Array + +Returns the daily average marketcap. + +- **Kind**: global function +- **Returns**: Array - of daily average marketcaps. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_DAILY_AVG_MARKETCAP_AGGREGATED + +##### SAN_DAILY_AVG_MARKETCAP_AGGREGATED(projectSlug, from, to, currency, aggregation) ⇒ number + +Returns the daily average marketcap. + +- **Kind**: global function +- **Returns**: number - of aggregated daily average marketcaps. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_DAILY_AVG_MARKETCAP_MULTIPLE_SLUGS + +##### SAN_DAILY_AVG_MARKETCAP_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, interval) ⇒ Array + +Returns the daily average marketcap. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +daily average marketcaps. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_DAILY_CLOSING_MARKETCAP + +##### SAN_DAILY_CLOSING_MARKETCAP(projectSlug, from, to, currency, interval) ⇒ Array + +Returns the daily closing marketcap. + +- **Kind**: global function +- **Returns**: Array - of daily closing marketcaps. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_DAILY_CLOSING_MARKETCAP_AGGREGATED + +##### SAN_DAILY_CLOSING_MARKETCAP_AGGREGATED(projectSlug, from, to, currency, aggregation) ⇒ number + +Returns the daily closing marketcap. + +- **Kind**: global function +- **Returns**: number - of aggregated daily closing marketcaps. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_DAILY_CLOSING_MARKETCAP_MULTIPLE_SLUGS + +##### SAN_DAILY_CLOSING_MARKETCAP_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, interval) ⇒ Array + +Returns the daily closing marketcap. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +daily closing marketcaps. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_DAILY_CLOSING_PRICE + +##### SAN_DAILY_CLOSING_PRICE(projectSlug, day) ⇒ number + +Returns the closing price for a given day. + +- **Kind**: global function +- **Returns**: number - closing price. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| day | date | The date to fetch the data. Example: DATE(2018, 9, 20) | + +## SAN_DAILY_DEPOSIT_TRANSACTIONS + +##### SAN_DAILY_DEPOSIT_TRANSACTIONS(projectSlug, from, to, interval) ⇒ Array + +Returns number of withdrawal transactions. + +- **Kind**: global function +- **Returns**: Array - of number of withdrawal transactions. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_DAILY_DEPOSIT_TRANSACTIONS_AGGREGATED + +##### SAN_DAILY_DEPOSIT_TRANSACTIONS_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns number of withdrawal transactions. + +- **Kind**: global function +- **Returns**: number - of aggregated number of withdrawal transactions. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_DAILY_DEPOSIT_TRANSACTIONS_MULTIPLE_SLUGS + +##### SAN_DAILY_DEPOSIT_TRANSACTIONS_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns number of withdrawal transactions. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +number of withdrawal transactions. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_DAILY_WITHDRAWAL_TRANSACTIONS + +##### SAN_DAILY_WITHDRAWAL_TRANSACTIONS(projectSlug, from, to, interval) ⇒ Array + +Returns number of withdrawal transactions. + +- **Kind**: global function +- **Returns**: Array - of number of withdrawal transactions. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_DAILY_WITHDRAWAL_TRANSACTIONS_AGGREGATED + +##### SAN_DAILY_WITHDRAWAL_TRANSACTIONS_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns number of withdrawal transactions. + +- **Kind**: global function +- **Returns**: number - of aggregated number of withdrawal transactions. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_DAILY_WITHDRAWAL_TRANSACTIONS_MULTIPLE_SLUGS + +##### SAN_DAILY_WITHDRAWAL_TRANSACTIONS_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns number of withdrawal transactions. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +number of withdrawal transactions. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_DEPOSIT_TRANSACTIONS_BY_EXCHANGE + +##### SAN_DEPOSIT_TRANSACTIONS_BY_EXCHANGE(projectSlug, from, to, owner, interval) ⇒ Array + +Returns the deposit transactions for a slug in a specific exchange + +- **Kind**: global function +- **Returns**: Array - exchange inflow values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| owner | string | Name of the exchange | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_DEPOSIT_TRANSACTIONS_INTRADAY + +##### SAN_DEPOSIT_TRANSACTIONS_INTRADAY(projectSlug, from, to, interval) ⇒ Array + +Returns number of withdrawal transactions with the option of smaller intervals. + +- **Kind**: global function +- **Returns**: Array - of number of withdrawal transactions with the option of smaller intervals. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_DEPOSIT_TRANSACTIONS_INTRADAY_AGGREGATED + +##### SAN_DEPOSIT_TRANSACTIONS_INTRADAY_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns number of withdrawal transactions with the option of smaller intervals. + +- **Kind**: global function +- **Returns**: number - of aggregated number of withdrawal transactions with the option of smaller intervals. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_DEPOSIT_TRANSACTIONS_INTRADAY_MULTIPLE_SLUGS + +##### SAN_DEPOSIT_TRANSACTIONS_INTRADAY_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns number of withdrawal transactions with the option of smaller intervals. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +number of withdrawal transactions with the option of smaller intervals. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_DEV_ACTIVITY + +##### SAN_DEV_ACTIVITY(projectSlug, from, to) ⇒ Array + +Returns a list of dev activity for a given slug and time interval. + +- **Kind**: global function +- **Returns**: Array - of dev activity. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | + +## SAN_EMERGING_TRENDS + +##### SAN_EMERGING_TRENDS(size, from, to) ⇒ Array + +Returns list of emerging trends and their corresponding trend score. + +- **Kind**: global function +- **Returns**: Array - of trending words and their score. +- **Customfunction**: + +| Param | Type | Description | +| ----- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| size | number | An integer showing how many words should be included in the top list (max 100). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | + +## SAN_ERC20_PROJECTS + +##### SAN_ERC20_PROJECTS() ⇒ Array + +Returns an array of all ERC20 assets for which Santiment has data. +Each asset record includes: ticker, name, slug, price in USD, market cap in USD, +volume in USD, USD balance, ETH balance, ETH spent in the last 30 days, +ETH spent in the last 7 days, ETH spent in the last day and main contract address. + +- **Kind**: global function +- **Returns**: Array - of all ERC20 projects. +- **Customfunction**: + +## SAN_ETH_SPENT_OVER_TIME + +##### SAN_ETH_SPENT_OVER_TIME(projectSlug, from, to) ⇒ Array + +Returns ETH spent for each interval from the project's team wallet and time period + +- **Kind**: global function +- **Returns**: Array - of the ETH, that was spent over a given period of time +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | + +## SAN_ETH_TOP_TRANSACTIONS + +##### SAN_ETH_TOP_TRANSACTIONS(projectSlug, from, to, limit, transactionType) ⇒ Array + +Returns top ETH transactions for project's team wallets. + +- **Kind**: global function +- **Returns**: Array - of top transactions +- **Customfunction**: + +| Param | Type | Description | +| --------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| limit | number | The limit of transactions to be shown. | +| transactionType | string | Available transaction types: ALL, IN, OUT | + +## SAN_EXCHANGE_BALANCE + +##### SAN_EXCHANGE_BALANCE(projectSlug, from, to, interval) ⇒ Array + +Returns the exchange balance. + +- **Kind**: global function +- **Returns**: Array - of exchange balances. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_EXCHANGE_BALANCE_AGGREGATED + +##### SAN_EXCHANGE_BALANCE_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the exchange balance. + +- **Kind**: global function +- **Returns**: number - of aggregated exchange balances. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_EXCHANGE_BALANCE_BY_EXCHANGE + +##### SAN_EXCHANGE_BALANCE_BY_EXCHANGE(projectSlug, from, to, owner, interval) ⇒ Array + +Returns the exchange balance for a slug in a specific exchange + +- **Kind**: global function +- **Returns**: Array - exchange inflow values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| owner | string | Name of the exchange | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_EXCHANGE_BALANCE_MULTIPLE_SLUGS + +##### SAN_EXCHANGE_BALANCE_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the exchange balance. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +exchange balances. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_EXCHANGE_FUNDS_FLOW + +##### SAN_EXCHANGE_FUNDS_FLOW(projectSlug, from, to) ⇒ Array + +Returns the difference between the tokens that were deposited minus +the tokens that were withdrawn from an exchange for a given slug and time interval. + +- **Kind**: global function +- **Returns**: Array - of token deposit/withdraw differences. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | + +## SAN_EXCHANGE_INFLOW + +##### SAN_EXCHANGE_INFLOW(projectSlug, from, to, interval) ⇒ Array + +Returns the exchange inflow. + +- **Kind**: global function +- **Returns**: Array - of exchange inflows. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_EXCHANGE_INFLOW_AGGREGATED + +##### SAN_EXCHANGE_INFLOW_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the exchange inflow. + +- **Kind**: global function +- **Returns**: number - of aggregated exchange inflows. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_EXCHANGE_INFLOW_BY_EXCHANGE + +##### SAN_EXCHANGE_INFLOW_BY_EXCHANGE(projectSlug, from, to, owner, interval) ⇒ Array + +Returns the exchange inflow for a slug in a specific exchange + +- **Kind**: global function +- **Returns**: Array - exchange inflow values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| owner | string | Name of the exchange | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_EXCHANGE_INFLOW_MULTIPLE_SLUGS + +##### SAN_EXCHANGE_INFLOW_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the exchange inflow. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +exchange inflows. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_EXCHANGE_OUTFLOW + +##### SAN_EXCHANGE_OUTFLOW(projectSlug, from, to, interval) ⇒ Array + +Returns the exchange outflow. + +- **Kind**: global function +- **Returns**: Array - of exchange outflows. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_EXCHANGE_OUTFLOW_AGGREGATED + +##### SAN_EXCHANGE_OUTFLOW_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the exchange outflow. + +- **Kind**: global function +- **Returns**: number - of aggregated exchange outflows. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_EXCHANGE_OUTFLOW_BY_EXCHANGE + +##### SAN_EXCHANGE_OUTFLOW_BY_EXCHANGE(projectSlug, from, to, owner, interval) ⇒ Array + +Returns the exchange outflow for a slug in a specific exchange + +- **Kind**: global function +- **Returns**: Array - exchange inflow values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| owner | string | Name of the exchange | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_EXCHANGE_OUTFLOW_MULTIPLE_SLUGS + +##### SAN_EXCHANGE_OUTFLOW_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the exchange outflow. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +exchange outflows. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_EXCHANGE_PERCENT_OF_SUPPLY + +##### SAN_EXCHANGE_PERCENT_OF_SUPPLY(projectSlug, from, to, interval) ⇒ Array + +Returns exchange percent of total supply. + +- **Kind**: global function +- **Returns**: Array - of exchange percent of total supply. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_EXCHANGE_PERCENT_OF_SUPPLY_AGGREGATED + +##### SAN_EXCHANGE_PERCENT_OF_SUPPLY_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns exchange percent of total supply. + +- **Kind**: global function +- **Returns**: number - of aggregated exchange percent of total supply. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_EXCHANGE_PERCENT_OF_SUPPLY_MULTIPLE_SLUGS + +##### SAN_EXCHANGE_PERCENT_OF_SUPPLY_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns exchange percent of total supply. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +exchange percent of total supply. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_FUNCTIONS + +##### SAN_FUNCTIONS() ⇒ Array + +Returns all available functions. + +- **Kind**: global function +- **Returns**: Array - of function names. +- **Customfunction**: + +## SAN_FUNDING_RATE_BUSD + +##### SAN_FUNDING_RATE_BUSD(projectSlug, from, to, fundingRateExchange, interval) ⇒ Array + +Returns the funding rates that are paid by one of the sides of the perpetual contract to the other (BUSD). + +- **Kind**: global function +- **Returns**: Array - of the funding rates that are paid by one of the sides of the perpetual contract to the other (BUSD). +- **Customfunction**: + +| Param | Type | Description | +| ------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| fundingRateExchange | string | The exchange platform, from which funding rates are fetched, BITMEX by default: "BITMEX" "BINANCE" "FTX" "DYDX" "BITFINEX" "DERIBIT" | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_FUNDING_RATE_BUSD_AGGREGATED + +##### SAN_FUNDING_RATE_BUSD_AGGREGATED(projectSlug, from, to, fundingRateExchange, aggregation) ⇒ number + +Returns the funding rates that are paid by one of the sides of the perpetual contract to the other (BUSD). + +- **Kind**: global function +- **Returns**: number - of aggregated the funding rates that are paid by one of the sides of the perpetual contract to the other (BUSD). +- **Customfunction**: + +| Param | Type | Description | +| ------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| fundingRateExchange | string | The exchange platform, from which funding rates are fetched, BITMEX by default: "BITMEX" "BINANCE" | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_FUNDING_RATE_BUSD_MULTIPLE_SLUGS + +##### SAN_FUNDING_RATE_BUSD_MULTIPLE_SLUGS(projectSlugsList, from, to, fundingRateExchange, interval) ⇒ Array + +Returns the funding rates that are paid by one of the sides of the perpetual contract to the other (BUSD). + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the funding rates that are paid by one of the sides of the perpetual contract to the other (BUSD). +- **Customfunction**: + +| Param | Type | Description | +| ------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| fundingRateExchange | string | The exchange platform, from which funding rates are fetched, BITMEX by default: "BITMEX" "BINANCE" | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_FUNDING_RATE_USDT + +##### SAN_FUNDING_RATE_USDT(projectSlug, from, to, fundingRateExchange, interval) ⇒ Array + +Returns the funding rates that are paid by one of the sides of the perpetual contract to the other (USDT). + +- **Kind**: global function +- **Returns**: Array - of the funding rates that are paid by one of the sides of the perpetual contract to the other (USDT). +- **Customfunction**: + +| Param | Type | Description | +| ------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| fundingRateExchange | string | The exchange platform, from which funding rates are fetched, BITMEX by default: "BITMEX" "BINANCE" "FTX" "DYDX" "BITFINEX" "DERIBIT" | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_FUNDING_RATE_USDT_AGGREGATED + +##### SAN_FUNDING_RATE_USDT_AGGREGATED(projectSlug, from, to, fundingRateExchange, aggregation) ⇒ number + +Returns the funding rates that are paid by one of the sides of the perpetual contract to the other (USDT). + +- **Kind**: global function +- **Returns**: number - of aggregated the funding rates that are paid by one of the sides of the perpetual contract to the other (USDT). +- **Customfunction**: + +| Param | Type | Description | +| ------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| fundingRateExchange | string | The exchange platform, from which funding rates are fetched, BITMEX by default: "BITMEX" "BINANCE" | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_FUNDING_RATE_USDT_MULTIPLE_SLUGS + +##### SAN_FUNDING_RATE_USDT_MULTIPLE_SLUGS(projectSlugsList, from, to, fundingRateExchange, interval) ⇒ Array + +Returns the funding rates that are paid by one of the sides of the perpetual contract to the other (USDT). + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the funding rates that are paid by one of the sides of the perpetual contract to the other (USDT). +- **Customfunction**: + +| Param | Type | Description | +| ------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| fundingRateExchange | string | The exchange platform, from which funding rates are fetched, BITMEX by default: "BITMEX" "BINANCE" | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_GAS_USED + +##### SAN_GAS_USED(projectSlug, from, to) ⇒ Array + +Returns used Gas by a blockchain. +When you send tokens, interact with a contract or do anything else on the blockchain, +you must pay for that computation. That payment is calculated in Gas. + +- **Kind**: global function +- **Returns**: Array - of quantities of gas used. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | + +## SAN_GITHUB_ACTIVITY + +##### SAN_GITHUB_ACTIVITY(projectSlug, from, to) ⇒ Array + +Returns a list of github activity for a given slug and time interval. + +- **Kind**: global function +- **Returns**: Array - of github activity. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | + +## SAN_HISTORICAL_BALANCE + +##### SAN_HISTORICAL_BALANCE(projectSlug, from, to, address) ⇒ Array + +Returns the historical balance for a given ERC20 or ETH address. + +- **Kind**: global function +- **Returns**: Array - of balances. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| address | string | ERC20 or ETH address. | + +## SAN_HISTORICAL_BALANCE_DEDUP + +##### SAN_HISTORICAL_BALANCE_DEDUP(projectSlug, from, to, address) ⇒ Array + +Returns the historical balance for a given ERC20 or ETH address. + +- **Kind**: global function +- **Returns**: Array - of balances. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| address | string | ERC20 or ETH address. | + +## SAN_HISTORY_TWITTER_DATA + +##### SAN_HISTORY_TWITTER_DATA(projectSlug, from, to) ⇒ Array + +Returns the historical count of twitter followers. + +- **Kind**: global function +- **Returns**: Array - followers count over time. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | + +## SAN_HOLDERS_DISTRIBUTION + +##### SAN_HOLDERS_DISTRIBUTION(projectSlug, from, to, balance, interval) ⇒ Array + +Represents the total number of addresses holding the given amount of tokens. + +- **Kind**: global function +- **Returns**: Array - of total number of addresses holding the given amount of tokens. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| balance | string | Interval of amount of tokens. Available balance intervals are: "0-0.001", "0.001-0.01", "0.01-0.1", "0.1-1", "1-10", "10-100", "100-1k", "1k-10k", "10k-100k", "100k-1M", "1M-10M", "10M-100M", "100M-1B", "1B-inf", "total" | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_HOLDERS_DISTRIBUTION_AGGREGATED + +##### SAN_HOLDERS_DISTRIBUTION_AGGREGATED(projectSlug, from, to, balance, aggregation) ⇒ number + +Represents the total number of addresses holding the given amount of tokens. + +- **Kind**: global function +- **Returns**: number - of aggregated total number of addresses holding the given amount of tokens. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| balance | string | Interval of amount of tokens. Available balance intervals are: "0-0.001", "0.001-0.01", "0.01-0.1", "0.1-1", "1-10", "10-100", "100-1k", "1k-10k", "10k-100k", "100k-1M", "1M-10M", "10M-100M", "100M-1B", "1B-inf", "total" | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_HOLDERS_DISTRIBUTION_COMBINED_BALANCE + +##### SAN_HOLDERS_DISTRIBUTION_COMBINED_BALANCE(projectSlug, from, to, balance, interval) ⇒ Array + +Returns the number of tokens in a specific bucket. + +- **Kind**: global function +- **Returns**: Array - of the number of tokens in a specific bucket. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| balance | string | Interval of amount of tokens. Available balance intervals are: "0-0.001", "0.001-0.01", "0.01-0.1", "0.1-1", "1-10", "10-100", "100-1k", "1k-10k", "10k-100k", "100k-1M", "1M-10M", "10M-100M", "100M-1B", "1B-inf", "total" | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_HOLDERS_DISTRIBUTION_COMBINED_BALANCE_AGGREGATED + +##### SAN_HOLDERS_DISTRIBUTION_COMBINED_BALANCE_AGGREGATED(projectSlug, from, to, balance, aggregation) ⇒ number + +Returns the number of tokens in a specific bucket. + +- **Kind**: global function +- **Returns**: number - of aggregated the number of tokens in a specific bucket. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| balance | string | Interval of amount of tokens. Available balance intervals are: "0-0.001", "0.001-0.01", "0.01-0.1", "0.1-1", "1-10", "10-100", "100-1k", "1k-10k", "10k-100k", "100k-1M", "1M-10M", "10M-100M", "100M-1B", "1B-inf", "total" | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_HOLDERS_DISTRIBUTION_COMBINED_BALANCE_MULTIPLE_SLUGS + +##### SAN_HOLDERS_DISTRIBUTION_COMBINED_BALANCE_MULTIPLE_SLUGS(projectSlugsList, from, to, balance, interval) ⇒ Array + +Returns the number of tokens in a specific bucket. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the number of tokens in a specific bucket. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| balance | string | Interval of amount of tokens. Available balance intervals are: "0-0.001", "0.001-0.01", "0.01-0.1", "0.1-1", "1-10", "10-100", "100-1k", "1k-10k", "10k-100k", "100k-1M", "1M-10M", "10M-100M", "100M-1B", "1B-inf", "total" | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_HOLDERS_DISTRIBUTION_MULTIPLE_SLUGS + +##### SAN_HOLDERS_DISTRIBUTION_MULTIPLE_SLUGS(projectSlugsList, from, to, balance, interval) ⇒ Array + +Represents the total number of addresses holding the given amount of tokens. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +total number of addresses holding the given amount of tokens. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| balance | string | Interval of amount of tokens. Available balance intervals are: "0-0.001", "0.001-0.01", "0.01-0.1", "0.1-1", "1-10", "10-100", "100-1k", "1k-10k", "10k-100k", "100k-1M", "1M-10M", "10M-100M", "100M-1B", "1B-inf", "total" | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_LATEST_PRICE + +##### SAN_LATEST_PRICE(projectSlug, currency) ⇒ number + +Returns the latest price for a given asset in a desired currency. + +- **Kind**: global function +- **Returns**: number - latest price. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| currency | string | The currency in which the data should be presented. Either "USD" or "BTC". | + +## SAN_MARKETCAP + +##### SAN_MARKETCAP(projectSlug, from, to, currency, interval) ⇒ Array + +Returns the marketcap for a slug. + +- **Kind**: global function +- **Returns**: Array - of the slug's marketcap. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_MARKETCAP_AGGREGATED + +##### SAN_MARKETCAP_AGGREGATED(projectSlug, from, to, currency, aggregation) ⇒ number + +Returns the marketcap for a slug. + +- **Kind**: global function +- **Returns**: number - of aggregated the slug's marketcap. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_MARKETCAP_MULTIPLE_SLUGS + +##### SAN_MARKETCAP_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, interval) ⇒ Array + +Returns the marketcap for a slug. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the slug's marketcap. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_MEAN_AGE + +##### SAN_MEAN_AGE(projectSlug, from, to, interval) ⇒ Array + +Returns the token's mean age. + +- **Kind**: global function +- **Returns**: Array - of mean age values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_MEAN_AGE_AGGREGATED + +##### SAN_MEAN_AGE_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the token's mean age. + +- **Kind**: global function +- **Returns**: number - of aggregated mean age values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_MEAN_AGE_MULTIPLE_SLUGS + +##### SAN_MEAN_AGE_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the token's mean age. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +mean age values. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_MEAN_DOLLAR_INVESTED_AGE + +##### SAN_MEAN_DOLLAR_INVESTED_AGE(projectSlug, from, to, interval) ⇒ Array + +Returns the token's mean dollar invested age. + +- **Kind**: global function +- **Returns**: Array - of mean dollar invested age values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_MEAN_DOLLAR_INVESTED_AGE_AGGREGATED + +##### SAN_MEAN_DOLLAR_INVESTED_AGE_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the token's mean dollar invested age. + +- **Kind**: global function +- **Returns**: number - of aggregated mean dollar invested age values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_MEAN_DOLLAR_INVESTED_AGE_MULTIPLE_SLUGS + +##### SAN_MEAN_DOLLAR_INVESTED_AGE_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the token's mean dollar invested age. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +mean dollar invested age values. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_MEAN_REALIZED_PRICE + +##### SAN_MEAN_REALIZED_PRICE(projectSlug, from, to, currency, timeBound, interval) ⇒ Array + +Returns the mean realized price. + +- **Kind**: global function +- **Returns**: Array - of mean realized prices. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years or days. | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_MEAN_REALIZED_PRICE_AGGREGATED + +##### SAN_MEAN_REALIZED_PRICE_AGGREGATED(projectSlug, from, to, currency, timeBound, aggregation) ⇒ number + +Returns the mean realized price. + +- **Kind**: global function +- **Returns**: number - of aggregated mean realized prices. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_MEAN_REALIZED_PRICE_MULTIPLE_SLUGS + +##### SAN_MEAN_REALIZED_PRICE_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, timeBound, interval) ⇒ Array + +Returns the mean realized price. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +mean realized prices. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_MINERS_BALANCE + +##### SAN_MINERS_BALANCE(projectSlug, from, to) ⇒ Array + +Returns miners balances over time +Currently only ETH is supported. + +- **Kind**: global function +- **Returns**: Array - of balances. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | + +## SAN_MINING_POOLS_DISTRIBUTION + +##### SAN_MINING_POOLS_DISTRIBUTION(projectSlug, from, to) ⇒ Array + +Returns the distribution of miners between mining pools. +What part of the miners are using top3, top10 and all the other pools. +Currently only ETH is supported. + +- **Kind**: global function +- **Returns**: Array - of distribution ratios. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | + +## SAN_MVRV_LONG_SHORT_DIFF + +##### SAN_MVRV_LONG_SHORT_DIFF(projectSlug, from, to, currency, interval) ⇒ Array + +Returns the difference between MVRV. + +- **Kind**: global function +- **Returns**: Array - of MVRV differences. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_MVRV_LONG_SHORT_DIFF_AGGREGATED + +##### SAN_MVRV_LONG_SHORT_DIFF_AGGREGATED(projectSlug, from, to, currency, aggregation) ⇒ number + +Returns the difference between MVRV. + +- **Kind**: global function +- **Returns**: number - of aggregated MVRV differences. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_MVRV_LONG_SHORT_DIFF_MULTIPLE_SLUGS + +##### SAN_MVRV_LONG_SHORT_DIFF_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, interval) ⇒ Array + +Returns the difference between MVRV. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +MVRV differences. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_MVRV_RATIO + +##### SAN_MVRV_RATIO(projectSlug, from, to, currency, timeBound, interval) ⇒ Array + +Returns MVRV(Market-Value-to-Realized-Value). + +- **Kind**: global function +- **Returns**: Array - of MVRV ratios. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years or days. | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_MVRV_RATIO_AGGREGATED + +##### SAN_MVRV_RATIO_AGGREGATED(projectSlug, from, to, currency, timeBound, aggregation) ⇒ number + +Returns MVRV(Market-Value-to-Realized-Value). + +- **Kind**: global function +- **Returns**: number - of aggregated MVRV ratios. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_MVRV_RATIO_INTRADAY + +##### SAN_MVRV_RATIO_INTRADAY(projectSlug, from, to, timeBound, interval) ⇒ Array + +Returns MVRV(Market-Value-to-Realized-Value) with the option of smaller intervals. + +- **Kind**: global function +- **Returns**: Array - of MVRV ratios with the option of smaller intervals. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years or days. | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_MVRV_RATIO_INTRADAY_AGGREGATED + +##### SAN_MVRV_RATIO_INTRADAY_AGGREGATED(projectSlug, from, to, timeBound, aggregation) ⇒ number + +Returns MVRV(Market-Value-to-Realized-Value) with the option of smaller intervals. + +- **Kind**: global function +- **Returns**: number - of aggregated MVRV ratios with the option of smaller intervals. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_MVRV_RATIO_INTRADAY_MULTIPLE_SLUGS + +##### SAN_MVRV_RATIO_INTRADAY_MULTIPLE_SLUGS(projectSlugsList, from, to, timeBound, interval) ⇒ Array + +Returns MVRV(Market-Value-to-Realized-Value) with the option of smaller intervals. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +MVRV ratios with the option of smaller intervals. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_MVRV_RATIO_MULTIPLE_SLUGS + +##### SAN_MVRV_RATIO_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, timeBound, interval) ⇒ Array + +Returns MVRV(Market-Value-to-Realized-Value). + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +MVRV ratios. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_MVRV_Z_SCORE + +##### SAN_MVRV_Z_SCORE(projectSlug, from, to, interval) ⇒ Array + +Returns the MVRV Z score. + +- **Kind**: global function +- **Returns**: Array - of the MVRV Z score. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_MVRV_Z_SCORE_AGGREGATED + +##### SAN_MVRV_Z_SCORE_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the MVRV Z score. + +- **Kind**: global function +- **Returns**: number - of aggregated the MVRV Z score. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_MVRV_Z_SCORE_MULTIPLE_SLUGS + +##### SAN_MVRV_Z_SCORE_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the MVRV Z score. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the MVRV Z score. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_NETWORK_GROWTH + +##### SAN_NETWORK_GROWTH(projectSlug, from, to, interval) ⇒ Array + +Returns the token's network growth + +- **Kind**: global function +- **Returns**: Array - of network growth. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_NETWORK_GROWTH_AGGREGATED + +##### SAN_NETWORK_GROWTH_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the token's network growth + +- **Kind**: global function +- **Returns**: number - of aggregated network growth. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_NETWORK_GROWTH_MULTIPLE_SLUGS + +##### SAN_NETWORK_GROWTH_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the token's network growth + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +network growth. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_NETWORK_PROFIT_LOSS + +##### SAN_NETWORK_PROFIT_LOSS(projectSlug, from, to, interval) ⇒ Array + +Returns the network's profit/loss. + +- **Kind**: global function +- **Returns**: Array - of the network's profit/loss. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_NETWORK_PROFIT_LOSS_AGGREGATED + +##### SAN_NETWORK_PROFIT_LOSS_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the network's profit/loss. + +- **Kind**: global function +- **Returns**: number - of aggregated the network's profit/loss. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_NETWORK_PROFIT_LOSS_MULTIPLE_SLUGS + +##### SAN_NETWORK_PROFIT_LOSS_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the network's profit/loss. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the network's profit/loss. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_NVT_RATIO + +##### SAN_NVT_RATIO(projectSlug, from, to, interval) ⇒ Array + +Returns NVT (Network-Value-to-Transactions-Ratio Daily Market Cap / Daily Token Circulation) +Since Daily Transaction Volume gets rather noisy and easy to manipulate +by transferring the same tokens through a couple of addresses repeatedly, +it’s not an ideal measure of a network’s economic activity. That’s why we also +offer another way to calculate NVT by using Daily Token Circulation. +This method filters out excess transactions and provides a cleaner overview of a blockchain’s +daily transaction throughput. + +- **Kind**: global function +- **Returns**: Array - of NVT ratios +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_NVT_RATIO_AGGREGATED + +##### SAN_NVT_RATIO_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns NVT (Network-Value-to-Transactions-Ratio Daily Market Cap / Daily Token Circulation) +Since Daily Transaction Volume gets rather noisy and easy to manipulate +by transferring the same tokens through a couple of addresses repeatedly, +it’s not an ideal measure of a network’s economic activity. That’s why we also +offer another way to calculate NVT by using Daily Token Circulation. +This method filters out excess transactions and provides a cleaner overview of a blockchain’s +daily transaction throughput. + +- **Kind**: global function +- **Returns**: number - of aggregated NVT ratios +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_NVT_RATIO_MULTIPLE_SLUGS + +##### SAN_NVT_RATIO_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns NVT (Network-Value-to-Transactions-Ratio Daily Market Cap / Daily Token Circulation) +Since Daily Transaction Volume gets rather noisy and easy to manipulate +by transferring the same tokens through a couple of addresses repeatedly, +it’s not an ideal measure of a network’s economic activity. That’s why we also +offer another way to calculate NVT by using Daily Token Circulation. +This method filters out excess transactions and provides a cleaner overview of a blockchain’s +daily transaction throughput. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +NVT ratios +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_OHLC + +##### SAN_OHLC(projectSlug, from, to) ⇒ Array + +Returns the open, high, low, and close price values for the specified asset, +during a given time interval. + +- **Kind**: global function +- **Returns**: Array - of open, high, low, and close price values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | + +## SAN_PRICE + +##### SAN_PRICE(projectSlug, from, to, currency, interval) ⇒ Array + +Returns the prices for the slug in the given time period. + +- **Kind**: global function +- **Returns**: Array - of the prices for the slug in the given time period. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_PRICE_ABSOLUTE_CHANGE + +##### SAN_PRICE_ABSOLUTE_CHANGE(projectSlug, from, to) ⇒ number + +Returns the absolute price change for the specified asset, during a given time interval. + +- **Kind**: global function +- **Returns**: number - absolute price change. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | + +## SAN_PRICE_AGGREGATED + +##### SAN_PRICE_AGGREGATED(projectSlug, from, to, currency, aggregation) ⇒ number + +Returns the prices for the slug in the given time period. + +- **Kind**: global function +- **Returns**: number - of aggregated the prices for the slug in the given time period. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_PRICE_MULTIPLE_SLUGS + +##### SAN_PRICE_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, interval) ⇒ Array + +Returns the prices for the slug in the given time period. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the prices for the slug in the given time period. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_PRICE_PERCENT_CHANGE + +##### SAN_PRICE_PERCENT_CHANGE(projectSlug, from, to) ⇒ number + +Returns the percent price change for the specified asset, during a given time interval. + +- **Kind**: global function +- **Returns**: number - price change in percent. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | + +## SAN_PRICE_VOLUME + +##### SAN_PRICE_VOLUME(projectSlug, from, to, interval) ⇒ Array + +Returns the prices for the specified asset, during a given time interval. + +- **Kind**: global function +- **Returns**: Array - of prices. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_PRICE_VOLUME_DIFF + +##### SAN_PRICE_VOLUME_DIFF(currency, projectSlug, from, to) ⇒ Array + +Returns the price-volume difference technical indicator for a given asset, +currency and time interval. This indicator measures the difference in trend between price and volume, +specifically when price goes up as volume goes down. Currency can be displayed in either USD or BTC. + +- **Kind**: global function +- **Returns**: Array - of price-volume difference technical indicator. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| currency | string | The currency in which the data should be presented. Either "USD" or "BTC". | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | + +## SAN_PRICES + +##### SAN_PRICES(projectSlug, from, to, interval) ⇒ Array + +Returns the prices for the specified asset, during a given time interval. + +- **Kind**: global function +- **Returns**: Array - of prices. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_PROJECT_FUNDAMENTALS + +##### SAN_PROJECT_FUNDAMENTALS(projectSlug) ⇒ Array + +Fetch fundamentals for a specified project. + +- **Kind**: global function +- **Returns**: Array - of project details. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | + +## SAN_REALIZED_VALUE + +##### SAN_REALIZED_VALUE(projectSlug, from, to, currency, timeBound, interval) ⇒ Array + +Returns Realized value - sum of the acquisition costs of an asset located in a wallet. +The realized value across the whole network is computed by summing the realized values +of all wallets holding tokens at the moment. + +- **Kind**: global function +- **Returns**: Array - of realized values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years or days. | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_REALIZED_VALUE_AGGREGATED + +##### SAN_REALIZED_VALUE_AGGREGATED(projectSlug, from, to, currency, timeBound, aggregation) ⇒ number + +Returns Realized value - sum of the acquisition costs of an asset located in a wallet. +The realized value across the whole network is computed by summing the realized values +of all wallets holding tokens at the moment. + +- **Kind**: global function +- **Returns**: number - of aggregated realized values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_REALIZED_VALUE_MULTIPLE_SLUGS + +##### SAN_REALIZED_VALUE_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, timeBound, interval) ⇒ Array + +Returns Realized value - sum of the acquisition costs of an asset located in a wallet. +The realized value across the whole network is computed by summing the realized values +of all wallets holding tokens at the moment. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +realized values. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_REVERSE + +##### SAN_REVERSE(array) ⇒ Array + +Returns the reversed array of the results + +- **Kind**: global function +- **Returns**: Array - of reversed results +- **Customfunction**: + +| Param | Type | Description | +| ----- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| array | array | The array of results | + +## SAN_TOKEN_AGE_CONSUMED + +##### SAN_TOKEN_AGE_CONSUMED(projectSlug, from, to) ⇒ Array + +Returns amount of tokens changing addresses, multiplied by the number of blocks +created on the blockchain since they last moved. +Spikes are signal of a large amount of tokens moving after being idle for an extended period of time. + +Grouping by interval works by summing all records in the interval. + +- **Kind**: global function +- **Returns**: Array - of token age consumed numbers. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | + +## SAN_TOKEN_CIRCULATION + +##### SAN_TOKEN_CIRCULATION(projectSlug, from, to, timeBound, interval) ⇒ Array + +Returns token circulation for a given slug and time interval. + +- **Kind**: global function +- **Returns**: Array - of token circulation values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years or days. | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_TOKEN_CIRCULATION_AGGREGATED + +##### SAN_TOKEN_CIRCULATION_AGGREGATED(projectSlug, from, to, timeBound, aggregation) ⇒ number + +Returns token circulation for a given slug and time interval. + +- **Kind**: global function +- **Returns**: number - of aggregated token circulation values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_TOKEN_CIRCULATION_MULTIPLE_SLUGS + +##### SAN_TOKEN_CIRCULATION_MULTIPLE_SLUGS(projectSlugsList, from, to, timeBound, interval) ⇒ Array + +Returns token circulation for a given slug and time interval. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +token circulation values. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_TOKEN_TOP_TRANSACTIONS + +##### SAN_TOKEN_TOP_TRANSACTIONS(projectSlug, from, to, limit) ⇒ Array + +Returns top token transactions for a given slug + +- **Kind**: global function +- **Returns**: Array - of top transactions +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| limit | number | The limit of transactions to be shown. | + +## SAN_TOP_HOLDERS_HELD_OFF_EXCHANGE + +##### SAN_TOP_HOLDERS_HELD_OFF_EXCHANGE(projectSlug, from, to, interval) ⇒ Array + +Returns the amount of coins/tokens held only by the non exchange top holders. + +- **Kind**: global function +- **Returns**: Array - of amount of coins/tokens held only by the top holders. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_TOP_HOLDERS_HELD_ON_EXCHANGE + +##### SAN_TOP_HOLDERS_HELD_ON_EXCHANGE(projectSlug, from, to, interval) ⇒ Array + +Returns the amount of coins/tokens held only by the exchange top holders. + +- **Kind**: global function +- **Returns**: Array - of amount of coins/tokens held only by the top holders. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_TOP_HOLDERS_HELD_OVERALL + +##### SAN_TOP_HOLDERS_HELD_OVERALL(projectSlug, from, to, interval) ⇒ Array + +Returns the amount of coins/tokens held by the top holders. + +- **Kind**: global function +- **Returns**: Array - of amount of coins/tokens held by the top holders. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_TOP_HOLDERS_PERCENT_OF_TOTAL_SUPPLY + +##### SAN_TOP_HOLDERS_PERCENT_OF_TOTAL_SUPPLY(projectSlug, from, to, numberOfHolders) ⇒ Array + +Returns the top holders' percent of total supply - in exchanges, outside exchanges and combined. + +- **Kind**: global function +- **Returns**: Array - followers count over time. +- **Customfunction**: + +| Param | Type | Description | +| --------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| numberOfHolders | number | Take top number of holders into account when calculating. | + +## SAN_TRADING_VOLUME + +##### SAN_TRADING_VOLUME(projectSlug, from, to, currency, interval) ⇒ Array + +Returns the slug's trading volume. + +- **Kind**: global function +- **Returns**: Array - of the slugs's trading volume. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_TRADING_VOLUME_AGGREGATED + +##### SAN_TRADING_VOLUME_AGGREGATED(projectSlug, from, to, currency, aggregation) ⇒ number + +Returns the slug's trading volume. + +- **Kind**: global function +- **Returns**: number - of aggregated the slugs's trading volume. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_TRADING_VOLUME_MULTIPLE_SLUGS + +##### SAN_TRADING_VOLUME_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, interval) ⇒ Array + +Returns the slug's trading volume. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the slugs's trading volume. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_TRANSACTION_VOLUME + +##### SAN_TRANSACTION_VOLUME(projectSlug, from, to, interval) ⇒ Array + +Gets the transaction volume for the specified asset, during a given time interval. +Transaction Volume" refers to the total number of tokens within all +transfers that have occurred on a blockchain. + +- **Kind**: global function +- **Returns**: Array - of transaction volumes. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_TRANSACTION_VOLUME_AGGREGATED + +##### SAN_TRANSACTION_VOLUME_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Gets the transaction volume for the specified asset, during a given time interval. +Transaction Volume" refers to the total number of tokens within all +transfers that have occurred on a blockchain. + +- **Kind**: global function +- **Returns**: number - of aggregated transaction volumes. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_TRANSACTION_VOLUME_LOSS + +##### SAN_TRANSACTION_VOLUME_LOSS(projectSlug, from, to, interval) ⇒ Array + +Returns the transaction volume in loss. + +- **Kind**: global function +- **Returns**: Array - of the transaction volume in loss. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_TRANSACTION_VOLUME_LOSS_AGGREGATED + +##### SAN_TRANSACTION_VOLUME_LOSS_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the transaction volume in loss. + +- **Kind**: global function +- **Returns**: number - of aggregated the transaction volume in loss. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_TRANSACTION_VOLUME_LOSS_MULTIPLE_SLUGS + +##### SAN_TRANSACTION_VOLUME_LOSS_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the transaction volume in loss. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the transaction volume in loss. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_TRANSACTION_VOLUME_MULTIPLE_SLUGS + +##### SAN_TRANSACTION_VOLUME_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Gets the transaction volume for the specified asset, during a given time interval. +Transaction Volume" refers to the total number of tokens within all +transfers that have occurred on a blockchain. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +transaction volumes. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_TRANSACTION_VOLUME_PROFIT + +##### SAN_TRANSACTION_VOLUME_PROFIT(projectSlug, from, to, interval) ⇒ Array + +Returns the transaction volume in profit. + +- **Kind**: global function +- **Returns**: Array - of the transaction volume in profit. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_TRANSACTION_VOLUME_PROFIT_AGGREGATED + +##### SAN_TRANSACTION_VOLUME_PROFIT_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the transaction volume in profit. + +- **Kind**: global function +- **Returns**: number - of aggregated the transaction volume in profit. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_TRANSACTION_VOLUME_PROFIT_LOSS_RATIO + +##### SAN_TRANSACTION_VOLUME_PROFIT_LOSS_RATIO(projectSlug, from, to, interval) ⇒ Array + +Returns the ratio between transaction volume in profit and transaction volume in loss. + +- **Kind**: global function +- **Returns**: Array - of the ratio between transaction volume in profit and transaction volume in loss. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_TRANSACTION_VOLUME_PROFIT_LOSS_RATIO_AGGREGATED + +##### SAN_TRANSACTION_VOLUME_PROFIT_LOSS_RATIO_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the ratio between transaction volume in profit and transaction volume in loss. + +- **Kind**: global function +- **Returns**: number - of aggregated the ratio between transaction volume in profit and transaction volume in loss. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_TRANSACTION_VOLUME_PROFIT_LOSS_RATIO_MULTIPLE_SLUGS + +##### SAN_TRANSACTION_VOLUME_PROFIT_LOSS_RATIO_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the ratio between transaction volume in profit and transaction volume in loss. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the ratio between transaction volume in profit and transaction volume in loss. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_TRANSACTION_VOLUME_PROFIT_MULTIPLE_SLUGS + +##### SAN_TRANSACTION_VOLUME_PROFIT_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the transaction volume in profit. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the transaction volume in profit. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_VELOCITY + +##### SAN_VELOCITY(projectSlug, from, to, interval) ⇒ Array + +Returns the token's velocity. + +- **Kind**: global function +- **Returns**: Array - of token velocity values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_VELOCITY_AGGREGATED + +##### SAN_VELOCITY_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the token's velocity. + +- **Kind**: global function +- **Returns**: number - of aggregated token velocity values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_VELOCITY_MULTIPLE_SLUGS + +##### SAN_VELOCITY_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the token's velocity. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +token velocity values. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_VOLUME + +##### SAN_VOLUME(projectSlug, from, to, interval) ⇒ Array + +Returns the slug's transaction volume. + +- **Kind**: global function +- **Returns**: Array - of the slug's transaction volume. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_VOLUME_AGGREGATED + +##### SAN_VOLUME_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the slug's transaction volume. + +- **Kind**: global function +- **Returns**: number - of aggregated the slug's transaction volume. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_VOLUME_MULTIPLE_SLUGS + +##### SAN_VOLUME_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the slug's transaction volume. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the slug's transaction volume. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_WHALE_TRANSACTION_COUNT + +##### SAN_WHALE_TRANSACTION_COUNT(projectSlug, from, to, interval) ⇒ Array + +Returns the number of transactions transferring more than 100k USD. + +- **Kind**: global function +- **Returns**: Array - of the number of transactions transferring more than 100k USD. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_WHALE_TRANSACTION_COUNT_AGGREGATED + +##### SAN_WHALE_TRANSACTION_COUNT_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the number of transactions transferring more than 100k USD. + +- **Kind**: global function +- **Returns**: number - of aggregated the number of transactions transferring more than 100k USD. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_WHALE_TRANSACTION_COUNT_MULTIPLE_SLUGS + +##### SAN_WHALE_TRANSACTION_COUNT_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns the number of transactions transferring more than 100k USD. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the number of transactions transferring more than 100k USD. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_WITHDRAWAL_TRANSACTIONS_BY_EXCHANGE + +##### SAN_WITHDRAWAL_TRANSACTIONS_BY_EXCHANGE(projectSlug, from, to, owner, interval) ⇒ Array + +Returns the withdrawal transactions for a slug in a specific exchange + +- **Kind**: global function +- **Returns**: Array - exchange inflow values. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| owner | string | Name of the exchange | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_WITHDRAWAL_TRANSACTIONS_INTRADAY + +##### SAN_WITHDRAWAL_TRANSACTIONS_INTRADAY(projectSlug, from, to, interval) ⇒ Array + +Returns number of withdrawal transactions with the option of smaller intervals. + +- **Kind**: global function +- **Returns**: Array - of number of withdrawal transactions with the option of smaller intervals. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_WITHDRAWAL_TRANSACTIONS_INTRADAY_AGGREGATED + +##### SAN_WITHDRAWAL_TRANSACTIONS_INTRADAY_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns number of withdrawal transactions with the option of smaller intervals. + +- **Kind**: global function +- **Returns**: number - of aggregated number of withdrawal transactions with the option of smaller intervals. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_WITHDRAWAL_TRANSACTIONS_INTRADAY_MULTIPLE_SLUGS + +##### SAN_WITHDRAWAL_TRANSACTIONS_INTRADAY_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array + +Returns number of withdrawal transactions with the option of smaller intervals. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +number of withdrawal transactions with the option of smaller intervals. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m"| diff --git a/src/content/docs/guides/sansheets/functions/social/index.mdx b/src/content/docs/guides/sansheets/functions/social/index.mdx new file mode 100644 index 000000000..8dc70c732 --- /dev/null +++ b/src/content/docs/guides/sansheets/functions/social/index.mdx @@ -0,0 +1,196 @@ +--- +title: Social Data Functions +author: Santiment Team +datePublished: 2023-03-31 +dateModified: 2023-03-31 +--- + +## SAN_PROJECT_SOCIAL_DATA + +##### SAN_PROJECT_SOCIAL_DATA(projectSlug) ⇒ Array + +Returns social data for a specified project. + +- **Kind**: global function +- **Returns**: Array - of project's social data. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | + +## SAN_SOCIAL_DOMINANCE + +##### SAN_SOCIAL_DOMINANCE(projectSlug, from, to, source, interval) ⇒ Array + +Returns the social dominance for a slug. + +- **Kind**: global function +- **Returns**: Array - of the slug's social dominance. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_SOCIAL_DOMINANCE_AGGREGATED + +##### SAN_SOCIAL_DOMINANCE_AGGREGATED(projectSlug, from, to, source, aggregation) ⇒ number + +Returns the social dominance for a slug. + +- **Kind**: global function +- **Returns**: number - of aggregated the slug's social dominance. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_SOCIAL_DOMINANCE_MULTIPLE_SLUGS + +##### SAN_SOCIAL_DOMINANCE_MULTIPLE_SLUGS(projectSlugsList, from, to, source, interval) ⇒ Array + +Returns the social dominance for a slug. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the slug's social dominance. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_SOCIAL_VOLUME + +##### SAN_SOCIAL_VOLUME(projectSlug, from, to, source, interval) ⇒ Array + +Returns the social volume for a slug. + +- **Kind**: global function +- **Returns**: Array - of the slug's social volume. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_SOCIAL_VOLUME_AGGREGATED + +##### SAN_SOCIAL_VOLUME_AGGREGATED(projectSlug, from, to, source, aggregation) ⇒ number + +Returns the social volume for a slug. + +- **Kind**: global function +- **Returns**: number - of aggregated the slug's social volume. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_SOCIAL_VOLUME_MULTIPLE_SLUGS + +##### SAN_SOCIAL_VOLUME_MULTIPLE_SLUGS(projectSlugsList, from, to, source, interval) ⇒ Array + +Returns the social volume for a slug. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the slug's social volume. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_SOCIAL_VOLUME_PROJECTS + +##### SAN_SOCIAL_VOLUME_PROJECTS() ⇒ Array + +Returns a list of project slugs for which there is social volume data. + +- **Kind**: global function +- **Returns**: Array - of social volume projects. +- **Customfunction**: + + +## SAN_WEIGHTED_SOCIAL_SENTIMENT + +##### SAN_WEIGHTED_SOCIAL_SENTIMENT(projectSlug, from, to, source, interval) ⇒ Array + +Returns the weighted social sentiment for a slug. + +- **Kind**: global function +- **Returns**: Array - of the slug's weighted social sentiment. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_WEIGHTED_SOCIAL_SENTIMENT_AGGREGATED + +##### SAN_WEIGHTED_SOCIAL_SENTIMENT_AGGREGATED(projectSlug, from, to, source, aggregation) ⇒ number + +Returns the weighted social sentiment for a slug. + +- **Kind**: global function +- **Returns**: number - of aggregated the slug's weighted social sentiment. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_WEIGHTED_SOCIAL_SENTIMENT_MULTIPLE_SLUGS + +##### SAN_WEIGHTED_SOCIAL_SENTIMENT_MULTIPLE_SLUGS(projectSlugsList, from, to, source, interval) ⇒ Array + +Returns the weighted social sentiment for a slug. + +- **Kind**: global function +- **Returns**: Array - of results for multiple slugs +the slug's weighted social sentiment. +- **Customfunction**: + +| Param | Type | Description | +| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlugsList | string | Comma-separated names of the assets, more info at /glossary/#slug. Example: "santiment,bitcoin". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | +| interval | string | The resolution with which the data is fetched. Example: "5m" \ No newline at end of file diff --git a/src/content/docs/guides/sansheets/functions/xrp/index.mdx b/src/content/docs/guides/sansheets/functions/xrp/index.mdx new file mode 100644 index 000000000..a6135853d --- /dev/null +++ b/src/content/docs/guides/sansheets/functions/xrp/index.mdx @@ -0,0 +1,313 @@ +--- +title: XRPL-related Data Functions +author: Santiment Team +datePublished: 2023-03-31 +dateModified: 2023-03-31 +--- + +## SAN_ACTIVE_ADDRESSES_60D + +##### SAN_ACTIVE_ADDRESSES_60D(projectSlug, from, to, interval) ⇒ Array + +Returns the active addresses in the last 60 days. + +- **Kind**: global function +- **Returns**: Array - of the active addresses in the last 60 days. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_ACTIVE_ADDRESSES_60D_AGGREGATED + +##### SAN_ACTIVE_ADDRESSES_60D_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the active addresses in the last 60 days. + +- **Kind**: global function +- **Returns**: number - of aggregated the active addresses in the last 60 days. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_ACTIVE_ADDRESSES_90D + +##### SAN_ACTIVE_ADDRESSES_90D(projectSlug, from, to, interval) ⇒ Array + +Returns the active addresses in the last 90 days. + +- **Kind**: global function +- **Returns**: Array - of the active addresses in the last 90 days. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_ACTIVE_ADDRESSES_90D_AGGREGATED + +##### SAN_ACTIVE_ADDRESSES_90D_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the active addresses in the last 90 days. + +- **Kind**: global function +- **Returns**: number - of aggregated the active addresses in the last 90 days. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_DAILY_ASSETS_ISSUED + +##### SAN_DAILY_ASSETS_ISSUED(projectSlug, from, to, interval) ⇒ Array + +Returns the daily issued assets. + +- **Kind**: global function +- **Returns**: Array - of the daily issued assets. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_DAILY_ASSETS_ISSUED_AGGREGATED + +##### SAN_DAILY_ASSETS_ISSUED_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the daily issued assets. + +- **Kind**: global function +- **Returns**: number - of aggregated the daily issued assets. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + + +## SAN_DAILY_TRUSTLINES_COUNT_CHANGE + +##### SAN_DAILY_TRUSTLINES_COUNT_CHANGE(projectSlug, from, to, interval) ⇒ Array + +Returns the daily trustlines count change. + +- **Kind**: global function +- **Returns**: Array - of the daily trustlines count change. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_DAILY_TRUSTLINES_COUNT_CHANGE_AGGREGATED + +##### SAN_DAILY_TRUSTLINES_COUNT_CHANGE_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the daily trustlines count change. + +- **Kind**: global function +- **Returns**: number - of aggregated the daily trustlines count change. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_DEX_VOLUME_IN_USD_INTRADAY + +##### SAN_DEX_VOLUME_IN_USD_INTRADAY(projectSlug, from, to, interval) ⇒ Array + +Returns the DEX volume in USD. + +- **Kind**: global function +- **Returns**: Array - of the DEX volume in USD. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_DEX_VOLUME_IN_USD_INTRADAY_AGGREGATED + +##### SAN_DEX_VOLUME_IN_USD_INTRADAY_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the DEX volume in USD. + +- **Kind**: global function +- **Returns**: number - of aggregated the DEX volume in USD. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_DEX_VOLUME_IN_XRP_INTRADAY + +##### SAN_DEX_VOLUME_IN_XRP_INTRADAY(projectSlug, from, to, interval) ⇒ Array + +Returns the DEX volume in XRP. + +- **Kind**: global function +- **Returns**: Array - of the DEX volume in XRP. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_DEX_VOLUME_IN_XRP_INTRADAY_AGGREGATED + +##### SAN_DEX_VOLUME_IN_XRP_INTRADAY_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the DEX volume in XRP. + +- **Kind**: global function +- **Returns**: number - of aggregated the DEX volume in XRP. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_TOTAL_ASSETS_ISSUED + +##### SAN_TOTAL_ASSETS_ISSUED(projectSlug, from, to, interval) ⇒ Array + +Returns the total issued assets. + +- **Kind**: global function +- **Returns**: Array - of the total issued assets. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_TOTAL_ASSETS_ISSUED_AGGREGATED + +##### SAN_TOTAL_ASSETS_ISSUED_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the total issued assets. + +- **Kind**: global function +- **Returns**: number - of aggregated the total issued assets. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_TOTAL_TRUSTLINES_COUNT + +##### SAN_TOTAL_TRUSTLINES_COUNT(projectSlug, from, to, interval) ⇒ Array + +Returns the total trustlines count. + +- **Kind**: global function +- **Returns**: Array - of the total trustlines count. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_TOTAL_TRUSTLINES_COUNT_AGGREGATED + +##### SAN_TOTAL_TRUSTLINES_COUNT_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the total trustlines count. + +- **Kind**: global function +- **Returns**: number - of aggregated the total trustlines count. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | + +## SAN_TRANSACTIONS_COUNT + +##### SAN_TRANSACTIONS_COUNT(projectSlug, from, to, interval) ⇒ Array + +Returns the transactions count. + +- **Kind**: global function +- **Returns**: Array - of the transactions count. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| interval | string | The resolution with which the data is fetched. Example: "5m" | + +## SAN_TRANSACTIONS_COUNT_AGGREGATED + +##### SAN_TRANSACTIONS_COUNT_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number + +Returns the transactions count. + +- **Kind**: global function +- **Returns**: number - of aggregated the transactions count. +- **Customfunction**: + +| Param | Type | Description | +| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectSlug | string | Name of the asset, more info at /glossary/#slug. Example: "santiment". | +| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | +| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | +| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | diff --git a/src/content/docs/guides/sansheets/index.mdx b/src/content/docs/guides/sansheets/index.mdx new file mode 100644 index 000000000..8b39c7b78 --- /dev/null +++ b/src/content/docs/guides/sansheets/index.mdx @@ -0,0 +1,27 @@ +--- +title: Sansheets - Crypto Asset Data for Google Sheets +author: Santiment Team +description: Access on-chain, social, development activity, prices, and volume data with Sansheets! +datePublished: 2019-11-21 +dateModified: 2025-11-17 +sidebar: + label: Sansheets + order: 50 +--- + +Access on-chain, social, development activity, prices, and volume data with Sansheets! + +## Getting Started + +- [Setting up Sansheets](/sansheets/setting-up/) +- [Adding an API key to Sansheets](/sansheets/adding-an-api-key/) +- [How to create a correlation matrix like Cryptowatch.io](/sansheets/assets-correlation-matrix-google-sheets/) +- [The Asset Activity Matrix](/sansheets/asset-activity-matrix) + +## API + +- [List of All Functions](/sansheets/functions/) + +## Pro Templates + +- [Descriptions for all Pro Templates](/sansheets/pro-templates/) diff --git a/src/docs/sansheets/onboarding/01_examplequery.png b/src/content/docs/guides/sansheets/onboarding/01_examplequery.png similarity index 100% rename from src/docs/sansheets/onboarding/01_examplequery.png rename to src/content/docs/guides/sansheets/onboarding/01_examplequery.png diff --git a/src/docs/sansheets/onboarding/02_signin.png b/src/content/docs/guides/sansheets/onboarding/02_signin.png similarity index 100% rename from src/docs/sansheets/onboarding/02_signin.png rename to src/content/docs/guides/sansheets/onboarding/02_signin.png diff --git a/src/docs/sansheets/onboarding/03_selectblacksheet.png b/src/content/docs/guides/sansheets/onboarding/03_selectblacksheet.png similarity index 100% rename from src/docs/sansheets/onboarding/03_selectblacksheet.png rename to src/content/docs/guides/sansheets/onboarding/03_selectblacksheet.png diff --git a/src/docs/sansheets/onboarding/04_getaddons.png b/src/content/docs/guides/sansheets/onboarding/04_getaddons.png similarity index 100% rename from src/docs/sansheets/onboarding/04_getaddons.png rename to src/content/docs/guides/sansheets/onboarding/04_getaddons.png diff --git a/src/docs/sansheets/onboarding/05_addons.png b/src/content/docs/guides/sansheets/onboarding/05_addons.png similarity index 100% rename from src/docs/sansheets/onboarding/05_addons.png rename to src/content/docs/guides/sansheets/onboarding/05_addons.png diff --git a/src/docs/sansheets/onboarding/06_santimentdata.png b/src/content/docs/guides/sansheets/onboarding/06_santimentdata.png similarity index 100% rename from src/docs/sansheets/onboarding/06_santimentdata.png rename to src/content/docs/guides/sansheets/onboarding/06_santimentdata.png diff --git a/src/docs/sansheets/onboarding/07_santimentdata2.png b/src/content/docs/guides/sansheets/onboarding/07_santimentdata2.png similarity index 100% rename from src/docs/sansheets/onboarding/07_santimentdata2.png rename to src/content/docs/guides/sansheets/onboarding/07_santimentdata2.png diff --git a/src/docs/sansheets/onboarding/08_santimentdataenable.png b/src/content/docs/guides/sansheets/onboarding/08_santimentdataenable.png similarity index 100% rename from src/docs/sansheets/onboarding/08_santimentdataenable.png rename to src/content/docs/guides/sansheets/onboarding/08_santimentdataenable.png diff --git a/src/docs/sansheets/onboarding/09_confirmation.png b/src/content/docs/guides/sansheets/onboarding/09_confirmation.png similarity index 100% rename from src/docs/sansheets/onboarding/09_confirmation.png rename to src/content/docs/guides/sansheets/onboarding/09_confirmation.png diff --git a/src/docs/sansheets/onboarding/10_account-icon.png b/src/content/docs/guides/sansheets/onboarding/10_account-icon.png similarity index 100% rename from src/docs/sansheets/onboarding/10_account-icon.png rename to src/content/docs/guides/sansheets/onboarding/10_account-icon.png diff --git a/src/docs/sansheets/onboarding/11_apikey.png b/src/content/docs/guides/sansheets/onboarding/11_apikey.png similarity index 100% rename from src/docs/sansheets/onboarding/11_apikey.png rename to src/content/docs/guides/sansheets/onboarding/11_apikey.png diff --git a/src/docs/sansheets/onboarding/12_addapikey.png b/src/content/docs/guides/sansheets/onboarding/12_addapikey.png similarity index 100% rename from src/docs/sansheets/onboarding/12_addapikey.png rename to src/content/docs/guides/sansheets/onboarding/12_addapikey.png diff --git a/src/docs/sansheets/onboarding/13_sanequals.png b/src/content/docs/guides/sansheets/onboarding/13_sanequals.png similarity index 100% rename from src/docs/sansheets/onboarding/13_sanequals.png rename to src/content/docs/guides/sansheets/onboarding/13_sanequals.png diff --git a/src/docs/sansheets/onboarding/14_ohlc.png b/src/content/docs/guides/sansheets/onboarding/14_ohlc.png similarity index 100% rename from src/docs/sansheets/onboarding/14_ohlc.png rename to src/content/docs/guides/sansheets/onboarding/14_ohlc.png diff --git a/src/docs/sansheets/onboarding/15_ohlcresult.png b/src/content/docs/guides/sansheets/onboarding/15_ohlcresult.png similarity index 100% rename from src/docs/sansheets/onboarding/15_ohlcresult.png rename to src/content/docs/guides/sansheets/onboarding/15_ohlcresult.png diff --git a/src/docs/sansheets/onboarding/16_nvt.png b/src/content/docs/guides/sansheets/onboarding/16_nvt.png similarity index 100% rename from src/docs/sansheets/onboarding/16_nvt.png rename to src/content/docs/guides/sansheets/onboarding/16_nvt.png diff --git a/src/docs/sansheets/onboarding/17_nvtreturns.png b/src/content/docs/guides/sansheets/onboarding/17_nvtreturns.png similarity index 100% rename from src/docs/sansheets/onboarding/17_nvtreturns.png rename to src/content/docs/guides/sansheets/onboarding/17_nvtreturns.png diff --git a/src/docs/sansheets/onboarding/18_dayofweek.png b/src/content/docs/guides/sansheets/onboarding/18_dayofweek.png similarity index 100% rename from src/docs/sansheets/onboarding/18_dayofweek.png rename to src/content/docs/guides/sansheets/onboarding/18_dayofweek.png diff --git a/src/docs/sansheets/onboarding/19_thresholdscrossed.png b/src/content/docs/guides/sansheets/onboarding/19_thresholdscrossed.png similarity index 100% rename from src/docs/sansheets/onboarding/19_thresholdscrossed.png rename to src/content/docs/guides/sansheets/onboarding/19_thresholdscrossed.png diff --git a/src/docs/sansheets/onboarding/20_daadivergence.png b/src/content/docs/guides/sansheets/onboarding/20_daadivergence.png similarity index 100% rename from src/docs/sansheets/onboarding/20_daadivergence.png rename to src/content/docs/guides/sansheets/onboarding/20_daadivergence.png diff --git a/src/docs/sansheets/onboarding/21_velocitydivergence.png b/src/content/docs/guides/sansheets/onboarding/21_velocitydivergence.png similarity index 100% rename from src/docs/sansheets/onboarding/21_velocitydivergence.png rename to src/content/docs/guides/sansheets/onboarding/21_velocitydivergence.png diff --git a/src/docs/sansheets/onboarding/22_topholderssupply.png b/src/content/docs/guides/sansheets/onboarding/22_topholderssupply.png similarity index 100% rename from src/docs/sansheets/onboarding/22_topholderssupply.png rename to src/content/docs/guides/sansheets/onboarding/22_topholderssupply.png diff --git a/src/docs/sansheets/onboarding/23_topholders2.png b/src/content/docs/guides/sansheets/onboarding/23_topholders2.png similarity index 100% rename from src/docs/sansheets/onboarding/23_topholders2.png rename to src/content/docs/guides/sansheets/onboarding/23_topholders2.png diff --git a/src/docs/sansheets/onboarding/24_devactivity.png b/src/content/docs/guides/sansheets/onboarding/24_devactivity.png similarity index 100% rename from src/docs/sansheets/onboarding/24_devactivity.png rename to src/content/docs/guides/sansheets/onboarding/24_devactivity.png diff --git a/src/content/docs/guides/sansheets/onboarding/index.mdx b/src/content/docs/guides/sansheets/onboarding/index.mdx new file mode 100644 index 000000000..f3473696f --- /dev/null +++ b/src/content/docs/guides/sansheets/onboarding/index.mdx @@ -0,0 +1,140 @@ +--- +title: Sansheets Onboarding article +description: Learn all the necessary steps to get Sansheets up and running! +author: Santiment Team +datePublished: 2020-02-05 +dateModified: 2020-05-28 +sidebar: + hidden: true +--- + +> **Note**: In order to enable your computer and Google Sheets documents to use Sansheets, you must be a Sanbase Pro subscriber. If you are a free user, you may still view templates made by our staff and community members. But you will need to become a Pro member for our powerful Sansheets add-on to be a tool you can use yourself. + +Whether you are a data scientist, crypto hobbyist, or simply a trader and investor with very little data background, Sansheets offers a way to create and view interactive market models using Santiment's on-chain, social and project data. With our all-in-one Spreadsheets plugin, you can run trade simulations, backtest new strategies and add context to the behavior and volatility of the crypto market. There is no need to make your own data aggregations. We've prepared the groundwork for you. + +Through existing custom templates that our team and Sanfam have already created, or through your own creations, you can investigate network activity, discover market patterns, and analyze stakeholder behavior with our clean, reliable data streams for hundreds of digital assets. + +Whereas our Sanbase platform are mainly used to provide any cryptocurrency data you may want to access at the tip of your fingertips, Sansheets allows you to make use of this data and actually form public or private strategies to backtest with the full power of Google Sheets, and use them for your own trading any way you'd like. + +One of the best parts of Sansheets' integration with Google Sheets is that templates can be setup to auto-update data without any need to refresh or constantly re-input end dates for the model to pull data for. Simply end your date range with "TODAY()" and you'll receive data directly into your model as soon as it becomes available on Santiment. + +![](01_examplequery.png) + +The possibilities are pretty endless when it comes to what types of models can be created, and Santiment offers an array of 48 different functions to use for you to build any cryptocurrency model your heart desires. You can learn all about the Sansheets functions we have available, and how they work on our academy page: [/sansheets/functions/](/sansheets/functions/) + +With the explanation out of the way, let's get into how to get you setup with Sansheets on. To get started and begin creating your own templates and models, follow these simple steps precisely: + +## Install and activate Sansheets + +1. Head over to [https://docs.google.com/spreadsheets/u/0/](https://docs.google.com/spreadsheets/u/0/) and ensure you are signed in with any existing Google account. + ![](02_signin.png) +2. Open a Blank Google Sheets template + ![](03_selectblacksheet.png) +3. Go to the **Add-Ons** dropdown and click **Get Add-Ons** + ![](04_getaddons.png) +4. You'll see a Google Sheets store open up. In the top right, you'll see a search bar. Simply enter "Santiment" here, then hit **Enter**. + ![](05_addons.png) +5. You will see the "Santiment Data" app come up as a result, click on the **+FREE** button to install Sansheets to your system: + ![](06_santimentdata.png) +6. After installation of the Sansheets add-on, you should see confirmation that it was installed successfully. Go to the **Add-Ons** tab, hover over the newly created **Santiment Data** menu, and click **Enable**. + ![](07_santimentdata2.png) + ![](08_santimentdataenable.png) +7. After a few seconds, you should see a confirmation message explaining that you are about to enable cryptocurrency data through Santiment custom functions. Click **Ok**. + ![](09_confirmation.png) + +## Create and add an API key + +8. With Sansheets now enabled, you simply need to provide your API key. This key is found by going to [https://sheets.santiment.net](https://sheets.santiment.net) and clicking on the **account icon** at the top right of your page. + ![](10_account-icon.png) +9. If you already have an API key active, you will see your key with a **copy button** to allow you to easily copy it. If one doesn't yet exist yet, simply click on the **Generate** button and then use the **copy button** to save it to your clipboard. + ![](11_apikey.png) +10. Head back to your Google Sheets page and go to Add-ons -> Santiment Data, and click on Add API Key. Paste your copied API key and click **Confirm**. + ![](12_addapikey.png) + +## The first call + +11. To test out your newly and fully enabled Sansheets add-on, type in **`=SAN`** and look to see if there is a dropdown of different function options to choose from. If you see them, then you are officially ready to enter Santiment formulas and begin creating your own models! + ![](13_sanequals.png) +12. Choose a cell and ensure there are 2-5 blank columns to the right of it (depending on the SAN formula you choose to input). You can select between any SAN formula available in the dropdown, or refer to the Sansheets academy page to find the perfect function to accomplish what you're trying to create: [/sansheets/functions/](/sansheets/functions/). Once selected, enter it with an open parentheses afterwards, followed by the full name of the project's slug, a comma, then your start date as "`DATE(month,day, year)`", another comma, and your end date as "`DATE(month,day, year)`" OR "`TODAY()`" if you would like your model to auto-update to the current date. Then press enter. Eg, "`=SAN_OHLC("bitcoin",DATE(2015,2,1),TODAY())`" will give you the Open, High, Low, and Close prices of every day between February 1st, 2015 and the most recent Santiment data available. + ![](14_ohlc.png) + +Depending on how large your timeframe was, you will have to wait momentarily while seeing "Loading..." where you entered your formula. Once done, you will see the data you requested generate into the expanded rows and columns from your original cell. +![](15_ohlcresult.png) + +Note that you may also refer to our helpful Github Sansheets function repository to find additional info on functions to pull data for any of your favorite metrics: [https://github.com/santiment/google-spreadsheet-addon/blob/master/doc/sheet_functions.md](/sansheets/functions/) + +A nice feature with Sansheets that you won't see in traditional data models is the fact that you can direct it to auto-pull Santiment data on a daily basis without any action needed. Simply take a certain start date and enter it into your formula along with an end date of "`TODAY()`" and Sansheets will add an extra row of data to whatever metric you are directing Sansheets to pull from Santiment's extensive database. + +You have the option to make your insights public and provide access to any of your self-made templates with other members of the Santiment Team and Sanfam to collaborate and put great minds together to create a special profitable strategy for cryptocurrency investing. + +Congratulations on beginning your Sansheets adventures, and contact us at any time should you have questions or troubleshooting needs! + +## Using existing Sansheets templates + +When it comes to using existing Sansheets templates, many templates provided by the Santiment Team will have an "About" tab to explain the functionality. Regardless, here is a breakdown of a few of our featured "View Only" templates that we offer: + +### NVT Analysis + +The objective of the NVT Analysis template is to indicate how a given coin's token circulation looks at a given time compared to its market cap. Using trendlines over time on a monthly perspective, this is a great tool to indicate when markets are looking bearish to bullish.What you see here is: + +1. A set of NVT columns represented by five distinct colors ranging from bearish to bullish +2. Three lines representing the high, average, and low price of each respective month +3. Subtle, colored trendlines which help calculate +4. Hashmarks on the right of the latest displayed month showing what the daily NVT values have looked like within that month over the past 10 days + ![](16_nvt.png) + +In short, the main objective of this chart is to provide a macro look at whether the most recent month is getting enough token circulation (unique addresses exchanging tokens) to justify its current market cap. + +Tips: Look at the color of the far right most column and match to the color of the five circles at the bottom left of the legend. The color of the right-most column in this above screenshot, for example, is red, and therefore would be an indication that the markets are bearish. However, pay special attention to the hashmarks that represent the recent 10 days of NVT. If they are starting to look lower on the chart, which is the case in this example (particularly the "1 Day" hashmark, representing yesterday), then NVT may be starting to see a short-term turning point. If these hashmarks are sustained, then you'll notice the color of the monthly column begin to match the levels the new days of data are indicating. + +This model does have great backtest results, proving that the correlations between a given month's low, average, and high prices of a given month tend to veer toward negative with bearish signals, and undoubtedly positive when posting bullish signals. +![](17_nvtreturns.png) + +### Historical Timing Trends + +This model includes four different ways to measure the results of Bitcoin's market results based on various measurements of time (with other tokens to come in the future): + +1. Day of Week - Measures Bitcoin's price performance based on the seven days of the week. +2. Month - Measures Bitcoin's price performance based on each month out of the year. +3. Time of Month - Measures Bitcoin's price performance based on the early, early-mid, mid, late-mid, and late portions of months. +4. Year - Measures Bitcoin's price performance based on each individual year. + ![](18_dayofweek.png) + +Explore and use filters to find what kinds of trends may be beneficial to your trading strategies. + +### Thresholds Crossed + +Currently available for Bitcoin and Ethereum, the Thresholds Crossed model indicates just how many times (from a daily perspective) projects have crossed above or below different round levels historically. Getting a glance at which thresholds have been crossed most often will give you a great perspective of where support and resistance of a given project lies. +![](19_thresholdscrossed.png) + +### Daily Active Address Divergence + +Daily active addresses are a great way to measure network health and to get an idea of where prices may be headed based on how many daily active addresses are being created at a given time. We have a model that measures when there is a divergence between these active addresses and the movement of price. +![](20_daadivergence.png) +Watch for large, grouped signals of green to identify when price is undervalued compared to the amount of daily active addresses that are being created. And conversely, look for groups of red signals to find out when price is becoming overinflated. + +### Velocity Divergence + +Created with the same concept in mind as daily active address divergence, velocity divergence also has some upside by measuring the amount of volume being circulated compared to the supply of a token. +![](21_velocitydivergence.png) +As is the case with our Daily Active Addresses model, you want to look out for bunched signals of green or red to identify tops and bottoms of markets. + +### Top Holders Supply + +The top holders supply model provides our users with three ways to see what some key ERC-20 top holders are doing with their funds. This is a great way to get an idea of what may be foreshadowing in the markets, as these high capital holders have a great amount of leverage when it comes to what direction prices of a given project are heading next: +![](22_topholderssupply.png) + +1. Cumulative percent change in top holders - View what the top 1, 10, or 100 holders of a given project have been doing with their holdings over the previous 30 days by viewing their percentage added and removed from their addresses during this timeframe. +2. Big moves in top holders on a given day - As opposed to viewing what the total change has been in top holder bags over the past 30 days, this view isolates only particularly large moves on a given day by these top holders. +3. Percentage held by top holders - As some tokens are less diversified than others, this model shows the percentage of tokens held by the top holder addresses of a given project, with each bar showing one of the past four weeks (green being most recent). The higher the percent of the total supply these 10 addresses hold, the more influence they have on the prices based on their own buys and sells. + +![](23_topholders2.png) + +### Development Activity + +Projects that have consistently high development activity tend to reflect a higher degree and chance of longevity by those respective teams. Finding out when they particularly start to ramp up or wind down their rates of activity can be a great way to measure when it's a safe time to get in or bow out of an investment. +![](24_devactivity.png) + +This model highlights considerably high fluctuations in development activity for some notable projects. Spotting a big spike in development activity over a particular or series of days can be a great way to find entry points. + +Whatever types of metrics you are into, Sansheets is likely capable of creating the models for your area of study. You can also contact our staff, and we can see about collaborating on a project with you, as we are always interested in learning more about the markets in unique and interesting ways. Let us know if you'd like to try out Sansheets for two weeks free of charge, and we look forward to hearing your feedback! diff --git a/src/content/docs/guides/sansheets/pro-templates/index.mdx b/src/content/docs/guides/sansheets/pro-templates/index.mdx new file mode 100644 index 000000000..7ceab4ada --- /dev/null +++ b/src/content/docs/guides/sansheets/pro-templates/index.mdx @@ -0,0 +1,87 @@ +--- +title: Sansheets Pro Templates +author: Brian Quinlivan +datePublished: 2020-03-11 +dateModified: 2023-06-07 +sidebar: + label: PRO Templates + order: 60 +--- + +## The Perks of Being a Pro Subscriber on Sanbase + +As many of you know, Sanbase is a free-to-use platform for researching and studying on-chain and behavioral analytics in the crypto markets. However, there is a paid version called "Pro" that unlocks numerous features and models unavailable to our free users. Check out the [list of perks we offer to our Pro subscribers](https://app.santiment.net/pricing) and discover all the benefits that come with being an insider on our platform! + +One of these perks is access to our Sansheets plugin and the various templates we have built with it. This article will provide an overview of these templates. + +_In case you are already a Sanbase Pro subscriber and want to copy these templates for yourself, please [get in touch](mailto:support@santiment.net)._ + +## Maximal Mean Dollar Age Template + +This template visualizes the [Mean Dollar Age](https://insights.santiment.net/read/%F0%9F%93%A2-mean-age-653/) of Bitcoin, Ethereum, and various ERC20 coins in comparison to one another. + +Developed by Santiment, Mean Dollar Age calculates the average age of all dollars invested in acquiring a particular coin. This metric identifies accumulation and sell cycles for any coin, and identifying dips in Mean Dollar Age can serve as a novel bullish indicator. + +## Top Holders Template + +Crypto is still a whale's playground. [This template](https://insights.santiment.net/read/top-token-holders-and-their-role-as-leading-indicators-5618) monitors the behavior of the largest addresses holding Ethereum and various ERC-20 coins. + +The template includes a dozen views of top whales' behavior, such as balance changes, significant accumulation/sell-off events, and week-to-week adjustments to the total supply held. + +## NVT Template + +This template calculates the NVT for BTC, ETH, and several ERC-20 coins, and assigns a bullish or bearish value to their historical and present-day performance. + +The idea behind the NVT is simple - if the value transferred on the network (token circulation) is too low relative to the network's valuation (market cap), the asset should be considered overvalued and due for a correction. Conversely, if the value transferred on the network is too high compared to its current valuation, the NVT would deem the asset undervalued and ripe for a breakout. + +## Price-DAA Divergence Template + +We [have found](https://insights.santiment.net/read/price---daily-addresses-divergence%3A-%0Aa-primer-on-on-chain-trading-strategies-2222) that major differences in the coin's price and network activity trends can present opportune times to buy OR sell, depending on the trend's direction. + +This template triggers BUY and SELL signals for Bitcoin and Ethereum based on major divergences in price and the amount of daily addresses interacting with the coin. + +## Network Growth & Daily Active Addresses Template + +This template compares the network growth and daily active address percentage changes of Bitcoin, Ethereum, and other projects over time. Generally, many projects create new addresses at a similar percentage rate to one another as markets ebb and flow. Identifying which projects are creating new addresses and growing their network at a faster rate than their price is an excellent strategy to find buy-low opportunities. + +## MVRV and MVRV Long/Short Difference Ratio Template + +The MVRV ratio is calculated by dividing the market cap (market value or MV) by the realized cap (total realized value or RV). This ratio provides a reliable estimate of how overvalued or undervalued the current market cap is. + +In addition, we offer the MVRV Long/Short Difference comparison in this template to help visualize which projects are above or below their average line of profitable traders. If the ratio is above 0%, then on average, Ethereum holders will profit if they sell their coins now. If it is below 0%, then the average holder will realize a loss if they sell. + +## Velocity vs. Price Template + +Velocity is an underutilized method for researching the speed at which money circulates in the crypto economy. It is calculated by dividing a token's transaction volume (in USD) by its market cap (in USD). + +Similar to the Daily Active Addresses Template, this model helps visualize when tokens are being overbought or oversold based on the historical trends of its velocity metric. + +## Thresholds Crossed Template + +Understanding how many times the price of a project has moved above or below a round number USD value, or a psychological barrier, can provide valuable insights into the cyclical nature of the cryptocurrency markets. Those who believe that crossing above a certain level means "it will never fall back below again" can be shown just how often prices have reset time and time again. + +This template is excellent for understanding support levels and identifying price points where there is a significant push and pull, along with psychological polarization among traders. Utilizing this information can be advantageous in your trading strategy. + +## Most Profitable Days for Trading Cryptocurrency + +As [we've tested in the past](https://insights.santiment.net/read/backtesting-the-week%3A-which-days-are-best-for-trading-crypto%3F-1139), knowing which days have the best historical ROI can help reduce risk and craft effective market strategies. + +This template determines the best trading days (historically) for any coin in the Santiment database, with adjustable time ranges for Pro users. + +## Distribution Index + +[Our research](https://insights.santiment.net/read/314) has shown that distributed coins (supply dispersed among many addresses) tend to outperform concentrated coins (much of circulating supply held by 'whales'). This index calculates the top 10 most distributed and most concentrated ERC-20 coins (within the top 50) over the last month. + +## ETH-ERC20 Correlation Index + +[Our previous analysis](https://medium.com/santiment/eth-vs-erc-20-a-tale-of-two-market-caps-94b2aca58e5e) indicates that ERC-20 coins tend to be less correlated to Ethereum during bull markets and exhibit higher correlation during bear markets. This index charts the correlation of the ERC-20 market cap to the ETH market cap over the last 3 months. + +## Stablecoin Volatility Index + +Stablecoins may be more volatile than you think. This presents an interesting market opportunity, as one could potentially invest in low-volatility stablecoins and trade during outbreaks in their more volatile counterparts. + +This Santiment Index ranks the 15 largest stablecoins from most to least volatile over the past 30 days. + +## Least Correlated Coins to BTC & ETH + +According to our research, a portfolio of coins that are least correlated to both Bitcoin and Ethereum tends to perform particularly well during bull cycles. This index calculates the 20 least correlated coins to BTC & ETH over the past 30 days. diff --git a/src/docs/sansheets/setting-up/01_add_addon.png b/src/content/docs/guides/sansheets/setting-up/01_add_addon.png similarity index 100% rename from src/docs/sansheets/setting-up/01_add_addon.png rename to src/content/docs/guides/sansheets/setting-up/01_add_addon.png diff --git a/src/docs/sansheets/setting-up/04_add_addon2.png b/src/content/docs/guides/sansheets/setting-up/04_add_addon2.png similarity index 100% rename from src/docs/sansheets/setting-up/04_add_addon2.png rename to src/content/docs/guides/sansheets/setting-up/04_add_addon2.png diff --git a/src/docs/sansheets/setting-up/05_add_addon3.png b/src/content/docs/guides/sansheets/setting-up/05_add_addon3.png similarity index 100% rename from src/docs/sansheets/setting-up/05_add_addon3.png rename to src/content/docs/guides/sansheets/setting-up/05_add_addon3.png diff --git a/src/docs/sansheets/setting-up/06_add_addon_confirm_account.png b/src/content/docs/guides/sansheets/setting-up/06_add_addon_confirm_account.png similarity index 100% rename from src/docs/sansheets/setting-up/06_add_addon_confirm_account.png rename to src/content/docs/guides/sansheets/setting-up/06_add_addon_confirm_account.png diff --git a/src/docs/sansheets/setting-up/07_add_addon_confirm_account2.png b/src/content/docs/guides/sansheets/setting-up/07_add_addon_confirm_account2.png similarity index 100% rename from src/docs/sansheets/setting-up/07_add_addon_confirm_account2.png rename to src/content/docs/guides/sansheets/setting-up/07_add_addon_confirm_account2.png diff --git a/src/docs/sansheets/setting-up/08_add_addon_confirmation.png b/src/content/docs/guides/sansheets/setting-up/08_add_addon_confirmation.png similarity index 100% rename from src/docs/sansheets/setting-up/08_add_addon_confirmation.png rename to src/content/docs/guides/sansheets/setting-up/08_add_addon_confirmation.png diff --git a/src/docs/sansheets/setting-up/09_enable.png b/src/content/docs/guides/sansheets/setting-up/09_enable.png similarity index 100% rename from src/docs/sansheets/setting-up/09_enable.png rename to src/content/docs/guides/sansheets/setting-up/09_enable.png diff --git a/src/docs/sansheets/setting-up/10_enable_confirmation.png b/src/content/docs/guides/sansheets/setting-up/10_enable_confirmation.png similarity index 100% rename from src/docs/sansheets/setting-up/10_enable_confirmation.png rename to src/content/docs/guides/sansheets/setting-up/10_enable_confirmation.png diff --git a/src/content/docs/guides/sansheets/setting-up/index.mdx b/src/content/docs/guides/sansheets/setting-up/index.mdx new file mode 100644 index 000000000..dcf17f7ab --- /dev/null +++ b/src/content/docs/guides/sansheets/setting-up/index.mdx @@ -0,0 +1,50 @@ +--- +title: Setting up Sansheets +description: Learn how to add Sansheets to your Google Sheets and start using it with ease. +author: Max Bartel +datePublished: 2019-11-22 +dateModified: 2023-06-07 +sidebar: + label: Setting Up + order: 10 +--- + +## Install Sansheets + +To add Sansheets to your Google Sheets, first open a spreadsheet. It can be a new one. You will find the option **`Get add-ons...`** in the top navigation under: + +![](01_add_addon.png) + +This will open a store-like interface for add-ons. Enter **`Santiment`** into the search bar in the upper right and hit return: + +![](04_add_addon2.png) + +You will get **`Santiment Data`** as a result. Click on the **`+FREE`** button to install it: + +![](05_add_addon3.png) + +You will now be asked to select the Google account you want to use. As you should be logged in already, the appropriate one should be listed. Click it to continue: + +![](06_add_addon_confirm_account.png) + +In the next step, you are asked to confirm that the Sansheets plugin is allowed to do its work: + +![](07_add_addon_confirm_account2.png) + +Sansheets is now installed, which will be highlighted by an introductory tooltip: + +![](08_add_addon_confirmation.png) + +## Enabling Sansheets for the Spreadsheet + +To activate Sansheets in the currently opened document, select it in the **`Add-ons`** menu, where you will find **`Enable`**: + +![](09_enable.png) + +Sansheets will take a moment to activate and will notify you as soon as it's ready: + +![](10_enable_confirmation.png) + +## Accessing More Data with Sansheets + +To fully utilize Sansheets, you will eventually need to use an API key. Learn [how to create an API key](/products-and-plans/create-an-api-key) and [how to add it to Sansheets](/sansheets/adding-an-api-key) by following these guides. diff --git a/src/content/docs/guides/santiment-queries/api-access/index.mdx b/src/content/docs/guides/santiment-queries/api-access/index.mdx new file mode 100644 index 000000000..552f94dfa --- /dev/null +++ b/src/content/docs/guides/santiment-queries/api-access/index.mdx @@ -0,0 +1,253 @@ +--- +title: API Access to Sanqueries +author: Santiment Team +description: How to execute queries using the API +datePublished: 2023-03-29 +dateModified: 2025-01-16 +sidebar: + label: API Access + order: 40 +--- + +## Overview + +Before you start, make sure you acquaint yourself with the Sanqueries product +and the SQL queries you can write by reading the `Introduction`, `Exploration` +and `Writing SQL Queries` articles that can be found on the [Sanqueries Oveview](/santiment-queries/introduction/) page. + +The [Santiment Queries Web Interface](https://app.santiment.net/queries) is only +one of the ways to execute queries and access the data. + +For those who want to automate the process of executing queries, we provide access +access via our GraphQL API. You can query the API endpoint directly or use our +[python library](https://github.com/santiment/sanpy). + +## When to use it? + +If the data needs to be consumed by another system, that system can use the API +to compute an SQL query and get the results as a JSON object. + +A few examples of when the API can be used: + +- When the data needs to be consumed by another system at a regular interval + (e.g. every hour). +- When the same query needs to be executed multiple times with different + arguments. +- Any use case that requires automation is a good candidate for + using the API. + +## How to use the Web interface to write queries for the API? + +The web interface is a powerful tool for exploring the data, writing queries, +observing the results in real-time or explore prebuilt dashboards. + +Even when the data is consumed only through the API, it is recommended to use +the web interface to write the SQL queries. The web interface +facilitates the process of writing queries by providing syntax highlighting, +auto-completion and a preview of the result in real-time, speeding up the +development and debugging process. When the query is ready, it can be copied +and used in the API. + +## API Endpoint + +On the [API Overview](/sanapi/#overview/) page one can find information how to access the API. + +There are two ways to execute queries using the API: + +- Directly execute the `runRawSqlQuery` GraphQL query against the API graphql endpoint; +- Use the [sanpy execute_sql function](https://github.com/santiment/sanpy#execute-sql-queries-and-get-the-result) to execute an SQL query and get the result as a Pandas DataFrame. The python library itself also uses the API, but provides functions that hide the details of the API. + +### The query + +The query that is used in the examples bellow is the following: + +```sql +SELECT + get_metric_name(metric_id) AS metric, + get_asset_name(asset_id) AS asset, + dt, + argMax(value, computed_at) AS value +FROM daily_metrics_v2 +WHERE + asset_id = get_asset_id('bitcoin') AND + metric_id = get_metric_id('nvt') AND + dt >= now() - INTERVAL 7 DAY +GROUP BY dt, metric_id, asset_id +ORDER BY dt ASC +``` + +This query fetches one value per day of the `nvt` metric for the last 7 days. + +The examples below show how to parameterize the query in order to provide some of the arguments separately, instead of hardcoding them. +The following parameters are used: + +- `slug` - A string representing the slug of a project; +- `metric` - A string representing the name of a metric; +- `last_n_day` - An integer representing the number of days to be fetched. + +### Direct API call + +The direct API calls can be made using any HTTP client in any programming language. +What you need to do is send a POST request and put the query in the body. + +The query looks like this: + +```graphql explorer +{ + runRawSqlQuery( + sqlQueryText: "SELECT\n get_metric_name(metric_id) AS metric,\n get_asset_name(asset_id) AS asset,\n dt,\n argMax(value, computed_at) AS value\n FROM daily_metrics_v2\n WHERE\n asset_id = get_asset_id({{slug}}) AND\n metric_id = get_metric_id({{metric}}) AND\n dt >= now() - INTERVAL {{last_n_days}} DAY\n GROUP BY dt, metric_id, asset_id\n ORDER BY dt ASC" + sqlQueryParameters: "{\"slug\": \"bitcoin\", \"last_n_days\": 7, \"metric\": \"nvt\"}" + ) { + columns + columnTypes + rows + } +} +``` + +> **Note**: In order to be able to run the query in the GraphiQL Explorer you need to login on [Sanbase](https://app.santiment.net) on the same browser. + +### curl + +You can execute the query in your terminal via the following curl command: + +```bash +curl 'https://api.santiment.net/graphql' \ +-X POST \ +-H 'Content-Type: application/graphql' \ +-H 'Authorization: Apikey ' \ +--data '{runRawSqlQuery(sqlQueryText: "SELECT get_metric_name(metric_id) AS metric, get_asset_name(asset_id) AS asset, dt, argMax(value, computed_at) AS value FROM daily_metrics_v2 WHERE asset_id = get_asset_id({{slug}}) AND metric_id = get_metric_id({{metric}}) AND dt >= now() - INTERVAL {{last_n_days}} DAY GROUP BY dt, metric_id, asset_id ORDER BY dt ASC", sqlQueryParameters: "{\"slug\": \"bitcoin\", \"metric\": \"nvt\", \"last_n_days\": 7}"){columns columnTypes rows}}' +``` + +> **Note**: If you have the `jq` tool installed, you can pipe the result into it to pretty print the result. + +#### Result Example + +The result of both the direct API call and the curl command is a JSON. The dates and values will differ when you execute the query. + +```json +{ + "data": { + "runRawSqlQuery": { + "columnTypes": ["String", "String", "Date", "Float64"], + "columns": ["metric", "asset", "dt", "value"], + "rows": [ + ["nvt", "bitcoin", "2025-01-10T00:00:00Z", 175.20088476942317], + ["nvt", "bitcoin", "2025-01-11T00:00:00Z", 471.06125719541876], + ["nvt", "bitcoin", "2025-01-12T00:00:00Z", 588.6754853340366], + ["nvt", "bitcoin", "2025-01-13T00:00:00Z", 306.4015448498733], + ["nvt", "bitcoin", "2025-01-14T00:00:00Z", 272.04406973516427], + ["nvt", "bitcoin", "2025-01-15T00:00:00Z", 223.79467244976001], + ["nvt", "bitcoin", "2025-01-16T00:00:00Z", 811.1304231153288] + ] + } + } +} +``` + +#### API request arguments definition + +The `runRawSqlQuery` accepts two arguments: + +- `sqlQueryText` - The SQL query to execute. The query must be a valid SQL query that + can be executed against the Clickhouse database. The article [Writing SQL Queries](/santiment-queries/writing-sql-queries/) is a recommended read. + The query allows for parametrization by using named parameters. Each parameter has a key and a value. + The query contains the parameter name surrounded in double curly braces: `{{key}}`. +- `sqlQueryParameters` - A stringified JSON object that contains the key-value pairs. When the SQL query + is executed, the `{{key}}` templates are replaced with the corresponding values from the `sqlQueryParameters` map. + +#### API result fields interpretation + +The result of the GraphQL query contains the result of the executed SQL query. +The selected fields in this example are: `columns`, `columnTypes` and `rows`. + +The meaning of the fields is: + +- `columns` is a list of the column names in the result. The order of the columns + is specified in the SQL query itself. The name of the column is the name of the column + in the database table or the alias specified with the `AS` keyword. If an aggregation + function is used, it is highly recommended to specify the alias for the column, otherwise + the name of the column will be the expression itself. +- `columnTypes` is a list of the types of the columns in the result. The order of the +- types is the same as in the `columns` field. The types are the raw Clickhouse type. + Example types are `UInt64`, `Date`, `Float64`, `DateTime`, `String`, etc. These type are mapped + to JSON types as JSON has a limited number of types. All integer and float types are + mapped to the JSON number type but with specified meaning (size, type and sign of the number). + A lot of the other types are transpored as JSON string - `String`, `Date`, `DateTime` and others + are JSON strings with specified meaning. +- `rows` is a list of lists, each inner list is a row in the result. The order of the + rows is the same as in the result of the SQL query. The order of the columns in the + inner list is the same as in the `columns` field. + +### Using the Python library + +The [sanpy](https://github.com/santiment/sanpy) provides the `execute_sql` function, which +interacts with the above described `runRawSqlQuery` API. The function accepts two +named parameters - `query` and `parameters`, runs the query and returns the result as a Pandas DataFrame. + +#### sanpy request example + +To run the code: + +- Install sanpy with `pip install sanpy`. +- Replace `YOUR_OWN_API_KEY` with your API key. + +```python +import san + +san.ApiConfig.api_key = 'YOUR_OWN_API_KEY' + +san.execute_sql(query=""" + SELECT + get_metric_name(metric_id) AS metric, + get_asset_name(asset_id) AS asset, + dt, + argMax(value, computed_at) AS value + FROM daily_metrics_v2 + WHERE + asset_id = get_asset_id({{slug}}) AND + metric_id = get_metric_id({{metric}}) AND + dt >= now() - INTERVAL {{last_n_days}} DAY + GROUP BY dt, metric_id, asset_id + ORDER BY dt ASC +""", +parameters={ + 'slug': 'bitcoin', + 'metric': 'nvt', + 'last_n_days': 7 +}, +set_index="dt") +``` + +#### sanpy result example + +The result is a Pandas DataFrame: + +``` +dt metric asset value +2023-03-23T00:00:00Z nvt bitcoin 151.301315 +2023-03-24T00:00:00Z nvt bitcoin 165.503689 +2023-03-25T00:00:00Z nvt bitcoin 291.854742 +2023-03-26T00:00:00Z nvt bitcoin 379.362459 +2023-03-27T00:00:00Z nvt bitcoin 195.730616 +2023-03-28T00:00:00Z nvt bitcoin 181.268121 +2023-03-29T00:00:00Z nvt bitcoin 376.403649 +``` + +#### sanpy request parameters definition + +The `execute_sql` function accepts three named parameters - one mandatory and two optinal: + +- `query` - The meaning is the same as in the `runRawSqlQuery` API described. This parameter is mandatory/ +- `parameters` - The meaning is the same as in the `runRawSqlQuery` API described above. + The format here is a Python dictionary that automatically gets converted to a JSON string when + executing the request. If the query does not have any parameters, this parameter can be omitted. +- `set_index` - The name of the column to use as the index of the returned DataFrame. If not + specified, the index will be a range of integers. This parameter is optional. + +#### sanpy result parameters definition + +The `execute_sql` function returns a Pandas DataFrame with the result of the query. +The name of each column is the name of the column in the database table or the alias +specified with the `AS` keyword. If an aggregation function is used, it is highly recommended +to specify the alias for the column, otherwise the name of the column will be the expression itself. diff --git a/src/content/docs/guides/santiment-queries/bridges/index.mdx b/src/content/docs/guides/santiment-queries/bridges/index.mdx new file mode 100644 index 000000000..e09f62f5b --- /dev/null +++ b/src/content/docs/guides/santiment-queries/bridges/index.mdx @@ -0,0 +1,71 @@ +--- +title: Bridge Transactions Table Overview +author: Santiment Team +description: Discover how Santiment Queries gather data on cryptocurrency exchanges across various blockchain networks. +datePublished: 2024-02-21 +dateModified: 2024-03-15 +sidebar: + label: Bridge Transactions + order: 80 +--- + +## Overview + +A crypto bridge is a platform or protocol that facilitates the exchange of cryptocurrencies between different blockchain networks, promoting interoperability and liquidity within the cryptocurrency ecosystem. + +In **Santiment Queries**, we collect data from platforms or protocols which are trading cryptocurrencies across diverse blockchain networks: + +- Across +- Arbitrum_bridge +- Avalanche +- Manta_pacific +- Multichain +- Op_bridge +- Polygon_bridge +- Squid +- Stargate +- Wbtc +- Zksync_era_bridge +- Zksync_lite + +## Usage + +Data Analysis and Reporting: This repository facilitates the analysis and reporting of transactions across various types of bridges, offering valuable insights into their utilization and acceptance. + +Monitoring and Alert Systems: Utilizing transaction data from bridges, teams can establish monitoring and alert systems to detect irregular or questionable activities across diverse bridge networks. + +Integration with Santiment Products: The exported data can seamlessly integrate with other Santiment products, like Sanbase, enhancing the overall understanding of the cryptocurrency landscape. + +## Exploring the Tables + +We can inspect the table using the commands we learned in [Exploration](/santiment-queries/exploration/). + +Here, we've provided the Bridge Transactions table along with its columns, concise descriptions, and a few sample queries for you to delve into the data. + +### bridge_transactions + +The `bridge_transactions` table is designed to capture and store detailed information about transactions occurring on a bridge between different blockchain networks. Each row in this table represents a single transaction, and the table includes various attributes to provide comprehensive insights into the transaction process. It has the following columns: + +- **tx_hash** (_String_): Hash of the transaction. +- **log_index** (_UInt32_): Log index of the event. +- **dt** (_DateTime_): Date and time of the transaction +- **chain_in** (_String_): The target blockchain to recieve the funds. +- **chain_out** (_String_): The Blockchain from where the transaction was initiated +- **contract_addr** (_String_): Address of the involved smart contract. +- **token_in** (_Nullable(String)_): Type of token received from the bridge. +- **token_out** (_Nullable(String)_): Type of token sent into the bridge. +- **amount_in** (_UInt256_): Quantity of token_in. +- **amount_out** (_UInt256_): Quantity of token_out. +- **project_name** (_String_): Name or identifier of the associated project. +- **user** (_String_): Identifier of the transaction initiator. +- **args** (_String_): Additional transaction parameters or data +- **asset_in_ref_id** (_UInt64_): Reference ID of the currency contract that can be used to retrieve additional information about the asset from the `asset_metadata` table. +- **asset_out_ref_id** (_UInt64_): Reference ID of the currency contract that can be used to retrieve additional information about the asset from the `asset_metadata` table. +- **computed_at** (_DateTime_): Timestamp indicating when the transaction details were recorded in the database. + +## Sample Queries + +We've put together a dashboard with several queries to assist you in monitoring transaction volume and count, as well as the top 10 transactions or bridge flows. You can utilize our queries for a quick data check, or dive deeper by clicking on each query's name within the dashboard to customize them to your preferences. + +[Bridge Dashboard](https://queries.santiment.net/dashboard/bridges-710) + diff --git a/src/content/docs/guides/santiment-queries/dex-pools/index.mdx b/src/content/docs/guides/santiment-queries/dex-pools/index.mdx new file mode 100644 index 000000000..c44faf857 --- /dev/null +++ b/src/content/docs/guides/santiment-queries/dex-pools/index.mdx @@ -0,0 +1,204 @@ +--- +title: DEX Pools Tables Overview +author: Santiment Team +description: Learn about the information on trades in decentralized exchanges (DEX) that can be gathered using Santiment Queries. +datePublished: 2023-02-16 +dateModified: 2024-03-13 +sidebar: + label: DEX Pools + order: 100 +--- + +## Overview + +A DEX, short for decentralized exchange, is a type of peer-to-peer marketplace where cryptocurrency traders can conduct transactions directly with one another. By eliminating the need for intermediaries such as banks and brokers, DEXs facilitate the core promise of cryptocurrency, which is to enable financial transactions without centralized control. + +In **Santiment Queries**, we collect data from protocols that provide liquidity pools (aggregators are not included): + +- Balancer +- Bamboodefi +- Bancor-v3 +- ChickenSwap +- Clipper +- Curve +- DefiPlaza +- DefiSwap +- DoDo +- Elk +- EmpireDex +- KwikSwap +- KyberSwap +- MooniSwap +- RadioShack +- Saddle +- ShibaSwap +- StandardTech +- Sum Swap +- SushiSwap +- Swapr +- Synapse +- Uniswap v2/v3 +- YouSwap + +This information gives you the ability to check: + +- the DEX market activity +- the smart money movement on certain tokens +- information about liquidity pools +- the most active tokens, addresses, and DEX protocols +- different DEX protocols and to compare them + +## List of DEX Tables + +All our tables that contain DEX-related data have the string 'dex' in their name. You can easily find them by running the following query: + +```sql +SHOW TABLES LIKE '%dex%' +``` + +``` +┌─name───────────────────┐ +│ dex_pools │ +│ dex_pools_trades │ +└────────────────────────┘ +``` + +## Exploring the Tables + +We can inspect the tables using the commands we learned in [Exploration](/santiment-queries/exploration/). + +Below, we have listed all the DEX pools tables with their columns, brief descriptions, and some example queries that you can use to explore the tables. + +### dex_pools + +The `dex_pools` table is designed to store information about liquidity pool creation events on DEX protocols. It has the following columns: + +- **dt** (_DateTime_): Date and time of the pool deployment. +- **chain** (_String_): The chain that the pool is deployed on. +- **tx_hash** (_String_): Hash of the transaction. +- **log_index** (_UInt32_): Log index of the pool event. +- **project_name** (_String_): Name of the DEX or projects, such as uniswap_v3, curve, dydx, etc. +- **factory_address** (_Nullable(String)_): Address of the factory that created the pool; NULL if there is no factory (e.g., clipper.exchange). +- **pool_address** (_String_): Address of the pool. +- **token_address** (_Array(Nullable(String))_): Array of token addresses used in the pool. +- **fee** (_Nullable(Float64)_): Fee of the pool in percentage; NULL if not available or variable. +- **computed_at** (_DateTime_): The timestamp when the pool was inserted into the table. + +### dex_pools_trades + +The `dex_pools_trades` is a table designed to store trading events on DEX protocols. It has the following columns: + +- **dt** (_DateTime_): Date and time of trade +- **chain** (_String_): The chain that the pool is deployed on +- **tx_hash** (_String_): Hash of the transaction in which the trade has been included +- **log_index** (_UInt32_): Log index of trade event +- **trade_index** (_UInt32_): The sequence order of the trade in the transaction. For example, if there are 5 trades in a transaction, the trade index should be 0 to 4 accordingly. +- **pool_address** (_String_): Address of the pool +- **router_address** (_String_): Address of the router used in this transaction. A router routes trade orders to the most appropriate pool of liquidity for efficient execution and optimal pricing based on available liquidity.\* +- **from** (_String_): Sender address of the transaction.\*\* +- **to** (_String_): Receiver address of the transaction +- **token_in** (_Nullable(String)_): Address of token sent, NoneType if it's ETH +- **token_out** (_Nullable(String)_): Address of token received +- **amount_in** (_UInt256_): The amount of the token sent +- **amount_out** (_UInt256_): The amount of the token received +- **asset_in_ref_id** (_UInt64_): Reference ID of the currency contract that was sent which can be used to retrieve additional information about the asset from the `asset_metadata` table. +- **asset_out_ref_id** (_UInt64_): Reference ID of the currency contract that was received. +- **computed_at** (_DateTime_): The timestamp when the trade was inserted into the table. + +\* In decentralized exchanges (DEXs), a router is used to direct transactions between different blockchain networks or between different liquidity pools within the same network. When a user wants to make a trade on a DEX, the router identifies the best path for the trade to take in order to get the best possible price. The router can also split the trade into smaller orders and route them through multiple liquidity pools in order to find the best overall price. Additionally, the router can be used to manage liquidity and minimize the impact of large trades on the market by routing the trade through multiple liquidity pools. By doing so, the router ensures that the trade does not cause significant price movements in any single pool, which could adversely affect the price of the traded asset. + +**Note about **from** and **to**: They can be equal when there is an internal router transaction, then the address in **from** will be the same as **to** and also the**router_address\*\*. However, it is also possible to have routed transactions in which they are not equal, such as when the transaction is to or from the router or when a router is used for a normal trade between addresses. + +## Sample Queries + +### Volume of a specific token on a specific exchange for the last 30 days + +```sql +SELECT + SUM(dpt.amount_in)/1e6 as total_amount +FROM + dex_pools_trades dpt + INNER JOIN dex_pools dp + ON dp.pool_address = dpt.pool_address +WHERE + dp.project_name = 'uniswap_v3' + AND dpt.token_in = LOWER('0xdAC17F958D2ee523a2206206994597C13D831ec7') --USDT + AND dt >= now() - interval 30 DAY +``` + +Test in [Queries](https://queries.santiment.net/query/volume-of-a-specific-token-on-a-specific-exchange-for-the-last-30-days-383) + +### Number of trades that occurred in the past 30 days on a specific exchange + +```sql +SELECT + COUNT(*) AS trade_count +FROM + dex_pools_trades dpt + INNER JOIN dex_pools dp + ON dp.pool_address = dpt.pool_address +WHERE + dp.project_name = 'curve' + AND dt >= now() - interval 30 DAY +``` + +Test in [Queries](https://queries.santiment.net/query/number-of-trades-that-occurred-in-the-past-30-days-on-a-specific-exchange-385) + +### Unique Traders in the Past 30 Days on DODO Exchange + +```sql +SELECT + COUNT(DISTINCT "from") AS unique_trader +FROM + dex_pools_trades dpt + INNER JOIN dex_pools dp + ON dp.pool_address = dpt.pool_address +WHERE + dp.project_name = 'dodo' + AND dt >= now() - interval 30 DAY +``` + +Test in [Queries](https://queries.santiment.net/query/unique-traders-in-the-past-30-days-on-dodo-exchange-386) + +### Number of Pools on a Specific Exchange + +```sql +SELECT + COUNT(DISTINCT pool_address) AS pool_count +FROM + dex_pools +WHERE + project_name = 'sushi_v2' +``` + +Test in [Queries](https://queries.santiment.net/query/number-of-pools-on-a-specific-exchange-387) + +--- + +### Pool Fees Ranked Descending + +```sql +SELECT + pool_address, project_name, fee +FROM + dex_pools +ORDER BY fee DESC, project_name DESC +LIMIT 50 +``` + +Test in [Queries](https://queries.santiment.net/query/pool-fees-ranked-descending-388) + +### Projects Ranked by Number of Pools + +```sql +SELECT + project_name, + MIN(dt) as start_date, + COUNT(DISTINCT pool_address) AS pool_count +FROM + dex_pools +GROUP BY project_name +ORDER BY pool_count DESC +``` + +Test in [Queries](https://queries.santiment.net/query/projects-ranked-by-number-of-pools-389) diff --git a/src/content/docs/guides/santiment-queries/exploration/index.mdx b/src/content/docs/guides/santiment-queries/exploration/index.mdx new file mode 100644 index 000000000..c435c6e20 --- /dev/null +++ b/src/content/docs/guides/santiment-queries/exploration/index.mdx @@ -0,0 +1,166 @@ +--- +title: Exploration +author: Santiment Team +description: Learn how to explore the contents of the database and table structure +datePublished: 2022-08-17 +dateModified: 2024-06-26 +sidebar: + order: 20 +--- + +## Overview + +This document aims to enhance the reader's ability to navigate through Clickhouse using SQL and explore the available tables and their structures. + +## List of Tables + +To get a list of all available tables, execute the following query: + +```sql +SHOW TABLES +``` + +You can filter the list of tables using a regex. For example, to get the list of all tables containing `price` in their name: + +```sql +SHOW TABLES LIKE '%price%' +``` + +Test in [Queries](https://queries.santiment.net/query/list-of-tables-390) + +Example output: + +``` +┌─name───────────────────┐ +│ asset_price_pairs_only │ +│ asset_prices_v3 │ +└────────────────────────┘ +``` + +The `%` at the beginning means that there could be other characters to the left. +The `%` at the end means that there could be other characters to the right. + +## Get Information About a Table + +To inspect the structure of a given table, execute the `DESCRIBE` statement: + +```sql +DESCRIBE intraday_metrics +``` + +Test in [Queries](https://queries.santiment.net/query/describe-table-392) + +``` +┌─name───────────────┬─type─────────────┬─default_type─┬─default_expression─────────────┬─comment─┬─codec_expression─┬─ttl_expression─┐ +│ asset_id │ UInt64 │ │ │ │ │ │ +│ computed_at │ DateTime │ DEFAULT │ now() │ │ │ │ +│ name │ Nullable(String) │ DEFAULT │ CAST(NULL, 'Nullable(String)') │ │ │ │ +│ version │ Date │ │ │ │ │ │ +│ asset_ref_id │ UInt64 │ │ │ │ │ │ +│ ticker_slug │ Nullable(String) │ DEFAULT │ CAST(NULL, 'Nullable(String)') │ │ │ │ +│ decimals │ UInt32 │ DEFAULT │ CAST(0, 'UInt32') │ │ │ │ +│ contract_addresses │ Array(String) │ │ │ │ │ │ +│ specification │ Nullable(String) │ │ │ │ │ │ +└────────────────────┴──────────────────┴──────────────┴────────────────────────────────┴─────────┴──────────────────┴────────────────┘ +``` + +To see how a table was created, execute the `SHOW CREATE TABLE` statement. This includes information about partitioning, ordering, table engine, and other settings. Knowing the `ORDER BY` helps create better and faster queries. + +```sql +SHOW CREATE TABLE intraday_metrics +``` + +Test in [Queries](https://queries.santiment.net/query/show-create-table-391) + +``` +┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ CREATE TABLE default.intraday_metrics │ +│ ( │ +│ `asset_id` UInt64 CODEC(DoubleDelta, LZ4), │ +│ `metric_id` UInt64 CODEC(DoubleDelta, LZ4), │ +│ `dt` DateTime CODEC(DoubleDelta, LZ4), │ +│ `value` Float64, │ +│ `computed_at` DateTime │ +│ ) │ +│ ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/global/intraday_metrics_v2', '{hostname}', computed_at) │ +│ PARTITION BY toYYYYMM(dt) │ +│ ORDER BY (asset_id, metric_id, dt) │ +│ SETTINGS index_granularity = 8192 │ +└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +``` + +## Get data from a table + +After inspecting the structure of a given table, you can execute a few simple queries to obtain some data from the table to see how it looks. Most of the time, it makes more sense to select more recent data instead of data starting from the beginning, as it will be more relevant. To improve readability, you can apply functions for transforming the `metric_id` and `asset_id` to their names. The `, *` syntax allows you to select all fields but also add something else to the result. + +```sql +SELECT + get_asset_name(asset_id) AS slug, + get_metric_name(metric_id) AS metric, + * +FROM daily_metrics_v2 +WHERE dt >= (now() - toIntervalDay(2)) +LIMIT 10 +``` + +Test in [Queries](https://queries.santiment.net/query/get-data-from-a-table-393) + +```sql +┌─slug──────────────────────┬─metric──────────────────┬─metric_id─┬─asset_id─┬─────────dt─┬───────────────value─┬─────────computed_at─┐ +│ bnb-binance-usd │ adjusted_daa_divergence │ 681 │ 41039 │ 2022-08-15 │ -1.5018654389124684 │ 2022-08-15 00:11:03 │ +│ bnb-tether │ adjusted_daa_divergence │ 681 │ 41048 │ 2022-08-15 │ -2.3807976412934018 │ 2022-08-15 00:11:03 │ +│ bnb-usd-coin │ adjusted_daa_divergence │ 681 │ 41051 │ 2022-08-15 │ -1.6207922927296166 │ 2022-08-15 00:11:03 │ +│ bnb-1inch │ payment_count │ 179 │ 41038 │ 2022-08-15 │ 4 │ 2022-08-15 00:13:20 │ +│ bnb-chainlink │ payment_count │ 179 │ 41040 │ 2022-08-15 │ 103 │ 2022-08-15 00:13:20 │ +│ bnb-binance-usd │ payment_count │ 179 │ 41039 │ 2022-08-15 │ 2688 │ 2022-08-15 00:13:20 │ +│ bnb-chromia │ payment_count │ 179 │ 41041 │ 2022-08-15 │ 3 │ 2022-08-15 00:13:20 │ +│ bnb-trust-wallet-token │ payment_count │ 179 │ 41049 │ 2022-08-15 │ 6 │ 2022-08-15 00:13:20 │ +│ bnb-green-metaverse-token │ payment_count │ 179 │ 41042 │ 2022-08-15 │ 25 │ 2022-08-15 00:13:20 │ +│ bnb-uniswap │ payment_count │ 179 │ 41050 │ 2022-08-15 │ 15 │ 2022-08-15 00:13:20 │ +└───────────────────────────┴─────────────────────────┴───────────┴──────────┴────────────┴─────────────────────┴─────────────────────┘ +``` + +## How to Interpret the Table Structure + +When looking at a table structure, there are several important things that the reader needs to pay attention to. + +Let's take a look at the following table structure: + +``` +┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ CREATE TABLE default.intraday_metrics │ +│ ( │ +│ `asset_id` UInt64 CODEC(DoubleDelta, LZ4), │ +│ `metric_id` UInt64 CODEC(DoubleDelta, LZ4), │ +│ `dt` DateTime CODEC(DoubleDelta, LZ4), │ +│ `value` Float64, │ +│ `computed_at` DateTime │ +│ ) │ +│ ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/global/intraday_metrics_v2', '{hostname}', computed_at) │ +│ PARTITION BY toYYYYMM(dt) │ +│ ORDER BY (asset_id, metric_id, dt) │ +│ SETTINGS index_granularity = 8192 │ +└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +``` + +### Table Name + +The complete table name is `default.intraday_metrics`, where `default` refers to the database and `intraday_metrics` is the table name. Since queries are executed in the `default` database, you can omit `default` when referencing the table. + +### Columns + +The columns are represented by their names and corresponding data types. Data types may have modifiers that determine how the data is stored on disk (e.g., `CODEC(DoubleDelta, LZ4)`). These modifiers can be disregarded when examining a table. + +### ORDER BY + +This should not be confused with `ORDER BY` clause used when you write an SQL query, which controls how the records in the result set are sorted. The `ORDER BY` examined here is a property of the database table and controls how the data is sorted on disk, acting like an index. + +This is a crucial field to understand and consider when writing a query. ClickHouse is a column-oriented database, meaning that the data for columns is stored continuously on-disk. This makes it more challenging and less efficient to use multiple indexes, so the column order in `ORDER BY` is essential for writing performant queries. If filters for the columns at the beginning of the list are present, the query will run faster. + +### Engine + +The [Table Engine](https://clickhouse.com/docs/en/engines/table-engines/) controls how data is stored, updated, and accessed. If the engine is \*MergeTree, then the `FINAL` keyword needs to be used. See the [Writing SQL Queries](/santiment-queries/writing-sql-queries) page for more detailed examples and reasoning. + +### Partition + +The partitioning has little to no effect on performance, making it safe to ignore. diff --git a/src/content/docs/guides/santiment-queries/index.mdx b/src/content/docs/guides/santiment-queries/index.mdx new file mode 100644 index 000000000..0fd5457ed --- /dev/null +++ b/src/content/docs/guides/santiment-queries/index.mdx @@ -0,0 +1,26 @@ +--- +title: Santiment Queries +author: Santiment Team +description: Database explorer & research tool +datePublished: 2022-08-17 +dateModified: 2025-08-14 +sidebar: + order: 30 +--- + +> :point_right: **We no longer offer this product, but still support it for legacy users** :point_left: + +[Santiment Queries](https://app.santiment.net/queries) gives access to a Clickhouse Database cluster via SQL interface that holds crypto-related on-chain, financial, social and development activity data. + +- [Introduction](/santiment-queries/introduction) gives information what this tool is about and why it exists. +- [Exploration](/santiment-queries/exploration) shows how to navigate the database and explore the tables structure. +- [Writing SQL Queries](/santiment-queries/writing-sql-queries) is a comprehensive guide to your first steps in writing SQL queries using Clickhouse SQL and Santiment datasets. +- [Rate Limiting and Credits Cost](/santiment-queries/rate-limits-and-credits-cost) describes what limits are applied when you run queries. +- [API Access](/santiment-queries/api-access) shows how to execute the queries using the API instead of the web interface. +- [Prices Tables Overview](/santiment-queries/prices-tables/) gives information about the tables related to prices, trading volume and marketcap. +- [Pre-computed Metrics Tables Overview](/santiment-queries/metric-tables/) provides info about fetching a wide range of pre-computed Santiment metrics. +- [Bridge Transactions Table Overview](/santiment-queries/bridges/) show how to gather data on cryptocurrency exchanges across various blockchain networks. +- [Lending Pools Overview](/santiment-queries/lending-pools/) tracks the deposits, borrows, repayments, withdraws and liquidate actions happened on lending protocols. +- [DEX Pools Overview](/santiment-queries/dex-pools/) gives information about the dex pools tables in Santiment Queries. +- [NFT Tables Overview](/santiment-queries/nft-tables) gives information about the nft related tables in Santiment Queries. +- [XRPL Tables Overview](santiment-queries/xrpl-tables) gives information about the tables for the XRPL chain in Santiment Queries. diff --git a/src/content/docs/guides/santiment-queries/introduction/index.mdx b/src/content/docs/guides/santiment-queries/introduction/index.mdx new file mode 100644 index 000000000..030982c9c --- /dev/null +++ b/src/content/docs/guides/santiment-queries/introduction/index.mdx @@ -0,0 +1,29 @@ +--- +title: Introducing Santiment Queries +author: Santiment Team +description: An overview of the Santiment Queries tool and its purpose +datePublished: 2019-12-03 +dateModified: 2023-08-14 +sidebar: + label: Introduction + order: 10 +--- + +## Overview + +At Santiment, we make extensive use of [Clickhouse](https://clickhouse.com/), a high-performance column-oriented database, to store on-chain, financial, social, and development activity data. In addition to storing data, Clickhouse is capable of performing complex calculations and aggregations on millions of rows of data, making it an ideal tool to power your research. + +Santiment Queries is an online web tool that provides access to a Clickhouse cluster containing our datasets. Basic SQL knowledge is required to use the tool. If you have no experience, you can follow brief Clickhouse Tutorial [here](https://clickhouse.com/docs/en/guides/writing-queries) or [here](https://clickhouse.com/docs/en/tutorial#3-analyze-the-data) to get started. + +## Accessing Santiment Queries + +Santiment Queries can be found at [https://app.santiment.net/queries](https://app.santiment.net/queries). Anonymous users can browse the public dashboards, while logged-in users can create both public and private dashboards. + +## Exploration + +The [Exploration](/santiment-queries/exploration) page guides users on how to explore the contents of the database, understand the available tables, and learn about their structure. + +## Writing Your First SQL Query + +The [Writing SQL Queries](/santiment-queries/writing-sql-queries) page guides you through the process of writing your first SQL query. + diff --git a/src/content/docs/guides/santiment-queries/lending-pools/index.mdx b/src/content/docs/guides/santiment-queries/lending-pools/index.mdx new file mode 100644 index 000000000..059149794 --- /dev/null +++ b/src/content/docs/guides/santiment-queries/lending-pools/index.mdx @@ -0,0 +1,102 @@ +--- +title: Lending Pools Overview +author: Santiment Team +description: Information about the Lending Pools's table stored in Santiment Queries. +datePublished: 2023-04-03 +dateModified: 2024-03-13 +sidebar: + label: Lending Pools + order: 90 +--- + +## Overview + +A lending pool is a collective source of funds or assets that individuals deposit into for lending purposes, typically facilitated by decentralized finance (DeFi) platforms. It allows lenders to earn interest on their deposited funds while borrowers can access these funds by providing collateral or meeting specific requirements set by the lending protocol. + +Lending Pools is a project that aims to track deposits, borrows, repayments, withdrawals, and liquidation actions occurring on lending protocols. + +In **Santiment Queries**, we record the platform from which the liquidation data was recorded under the `project_name` column. The platforms we collect data from are: + +- AAVE-v2/v3 +- Compound/v3 +- Liquity +- MakerDAO + +## Usage + +The Lending Pools project can be used for the following purposes: + +- Monitor the inflow and outflow of lending protocols +- Observe liquidation actions occurring on each protocol +- Track the Total Value Locked (TVL) in various protocols +- Determine the total amount borrowed for a specific asset + +## Exploration of the Tables + +We can inspect the table with the commands we learned in [Exploration](/santiment-queries/exploration/). + +Below, we have listed the table containing the lending pools data with its columns, brief descriptions, and some example queries that you can use to explore the table. + +### lending_pools_events + +- **tx_hash** (_String_): Hash of the transaction in which the event has been included +- **log_index** (_UInt32_): Log index of the event +- **dt** (_DateTime_): Date and time of the event +- **chain** (_String_): The chain that the pool is deployed on +- **pool_address** (_String_): Address of the pool +- **on_behalf_of** (_String_): Address holding the debt or collateral +- **action** (_Enum8_): Type of action recorded. _borrow_ = 0, _deposit_ = 1, _withdraw_ = 2, _liquidate_ = 3, _repay_ = 4 +- **token_in** (_Nullable(String)_): Address of token received by the pool (in case of deposit/repay/liquidate actions) +- **token_out** (_Nullable(String)_): Address of token leaving the pool (in case of borrow/withdraw/liquidate actions) +- **amount_in** (_UInt256_): The amount of the token received by the pool. 0 in case of borrow/withdraw +- **amount_out** (_UInt256_): The amount of the token leaving the pool. 0 in case of deposit/repay +- **project_name** (_String_): Name of the project, such as aave_v2, aave_v3, compound, compound_v3, liquity and makerdao. +- **user** (_String_): Address performing the action +- **computed_at** (_DateTime_): The timestamp when the event was inserted into the table. + +## Sample Queries + +### Total Deposits for a Certain Platform + +To find the total deposits for AAVE-v2 in the last 30 days for a specific token, use the following SQL query: + +```sql +SELECT SUM(amount_in) +FROM lending_pools_events +WHERE project_name = 'aave_v2' +AND action = 'deposit' +AND token_in = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' +AND dt >= now() - interval 30 DAY +``` + +Test in [Queries](https://queries.santiment.net/query/total-deposits-for-a-certain-platform-394) + +--- + +### Number of Liquidations for a Certain Platform + +To find the number of liquidations that occurred in the past 30 days on MakerDAO, use the following SQL query: + +```sql +SELECT COUNT(*) +FROM lending_pools_events +WHERE project_name = 'makerdao' +AND action = 'liquidate' +AND dt >= now() - interval 30 DAY +``` + +Test in [Queries](https://queries.santiment.net/query/number-of-liquidations-for-a-certain-platform-395) + +--- + +### Unique Borrowers for a Certain Platform - Unique Borrowers on Compound in the Past 30 Days + +```sql +SELECT DISTINCT user +FROM lending_pools_events +WHERE project_name = 'compound' +AND action = 'borrow' +AND dt >= now() - interval 30 DAY +``` + +Test in [Queries](https://queries.santiment.net/query/unique-borrowers-for-a-certain-platform-unique-borrowers-on-compound-in-the-past-30-days-396) diff --git a/src/content/docs/guides/santiment-queries/metric-tables/index.mdx b/src/content/docs/guides/santiment-queries/metric-tables/index.mdx new file mode 100644 index 000000000..c7c41d558 --- /dev/null +++ b/src/content/docs/guides/santiment-queries/metric-tables/index.mdx @@ -0,0 +1,378 @@ +--- +title: Metrics Datasets +author: Santiment Team +description: Learn about Santiment metrics datasets. +datePublished: 2024-04-01 +dateModified: 2024-04-15 +sidebar: + label: Metric Tables + order: 70 +--- + +## Overview + +This document introduces Santiment's precomputed metrics datasets. + +You can filter all metric tables as: + +```sql +SHOW TABLES LIKE '%metrics%' +``` + +Test in [Queries](https://queries.santiment.net/query/metrics-tables-example-494) + +Usually, tables storing pre-computed data have a common set of columns: + +- `dt` - A `DateTime` field storing the corresponding date and time. +- `asset_id` - An `UInt64` unique identifier for an asset. The data for that ID is stored in the `asset_metadata` table. +- `metric_id` - An `UInt64` unique identifier for a metric. The data for that ID is stored in the `metric_metadata` table. +- `value` - A `Float` column holding the metric's value for the given asset/metric pair. +- `computed_at` - A `DateTime` column storing the date and time when the given row was computed. + +Metrics are located in different tables, depending on some different parameters. All tables are similar to each other and described below. + +## Tables + +--- + +### daily_metrics_v2 + +The `daily_metrics_v2` table stores a single metric value for each asset for each day. I.e. in that tables stored metrics that have exactly 1 value per day. + +Here's an example how to fetch `daily_active_addresses` for `bitcoin` using `daily_metrics_v2` + +```SQL +SELECT + dt, + get_asset_name(asset_id) AS asset, + get_metric_name(metric_id) AS metric, + value +FROM daily_metrics_v2 FINAL +WHERE + asset_id = get_asset_id('bitcoin') AND + metric_id = get_metric_id('daily_active_addresses') AND + dt >= toDateTime('2020-01-01 00:00:00') +LIMIT 2 +``` + +Test in [Queries](https://queries.santiment.net/query/dict-example-with-func-413) + +--- + +### intraday_metrics + +Table `intraday_metrics` is very similar to `daily_metrics_v2` but stores metrics with more than one value per day. In most cases, these metrics have a new value every 5 minutes. + +Here's an example how to get 5-minute prices for ethereum: + +```SQL +SELECT + dt, + get_asset_name(asset_id) AS asset, + get_metric_name(metric_id) AS metric, + value +FROM intraday_metrics FINAL +WHERE + asset_id = get_asset_id('ethereum') AND + metric_id = get_metric_id('price_usd') AND + dt >= toDateTime('2024-01-01 00:00:00') +ORDER BY dt DESC +LIMIT 5 +``` + +Test in [Queries](https://queries.santiment.net/query/price-example-478) + +--- + +### labeled_intraday_metrics_v2 + +Table `labeled_intraday_metrics_v2` stores metrics for a given `blockchain` and `label_id`. Each `label_id` corresponds to a certain [label FQN.](/labels/label-fqn) The data for that ID is stored in the `label_metadata` table. Blockchain column contains the string for blockchain name, e.g. `bictoin`, `ethereum`, etc. + +For instance, you can retrieve ethereum balance of all centralized exchange addresses with the query: + +```SQL +SELECT + dt, + value AS balance +FROM labeled_intraday_metrics FINAL +WHERE + dt >= toDateTime('2024-01-01 00:00:00') + AND label_id = dictGet('labels_by_fqn', 'label_id', 'santiment/centralized_exchange:v1') + AND metric_id = dictGet('metrics_by_name', 'metric_id', 'combined_labeled_balance') + AND asset_id = dictGet('assets_by_name', 'asset_id', 'ethereum') + AND blockchain = 'ethereum' +ORDER BY dt DESC +LIMIT 5 +``` + +Test in [Queries](https://queries.santiment.net/query/cex-balance-example-479) + +--- + +### daily_label_based_metrics + +Table `intraday_metrics` also has `label` and `owner` columns so that metrics stored in that table correspond to a particular label and owner. + +> Note that this table uses old way to filter labels (plain label/owner instead of label_fqn). + +This table could be used to retrieve [labelled exchange](/metrics/labeled-exchange) metrics under names: + +- `labelled_active_deposits` +- `labelled_deposit_transactions` +- `labelled_active_withdrawals` +- `labelled_withdrawal_transactions` + +or NFT [trading volume](metrics/nft-trade-volume-usd) and [trades count](metrics/nft-trades-count) metrics. + +Here's an example to get Binance active deposits: + +```SQL +SELECT + dt, + get_asset_name(asset_id) AS asset, + get_metric_name(metric_id) AS metric, + value +FROM daily_label_based_metrics FINAL +WHERE + dt >= toDateTime('2024-01-01 00:00:00') + AND asset_id = get_asset_id('ethereum') + AND metric_id = get_metric_id('labelled_active_deposits') + AND label = 'centralized_exchange' AND owner = 'binance' +ORDER BY dt DESC +LIMIT 5 +``` + +Test in [Queries](https://queries.santiment.net/query/labelled-active-deposits-example-481) + +--- + +### ecosystem_aggregated_metrics + +`ecosystem_aggregated_metrics` is a table similar to the `daily_metrics_v2` table. The only distinction is that it doesn't contain asset_id column; instead, it includes the ecosystem column. This adjustment was made to accommodate the requirements for development and github activity metrics, allowing us to monitor the activity of the entire ecosystem. + +`ecosystem` is a string, you can get available ecosystems as: + +```SQL +SELECT DISTINCT ecosystem +FROM ecosystem_aggregated_metrics +WHERE dt >= today() - 7 +``` + +Test in [Queries](https://queries.santiment.net/query/ecosystem-example-482) + +> In that table you can find dev activity metrics like + +- `ecosystem_github_activity` +- `ecosystem_dev_activity` +- `ecosystem_github_activity_contributors_count` +- `ecosystem_dev_activity_contributors_count`, etc. + +Here's an example how to get ecosystem_github_activity_contributors_count for ethereum: + +```SQL +SELECT + dt, + get_metric_name(metric_id) AS metric, + value +FROM ecosystem_aggregated_metrics FINAL +WHERE + dt >= toDateTime('2024-01-01 00:00:00') + AND ecosystem = 'ethereum' + AND metric_id = get_metric_id('ecosystem_github_activity_contributors_count') +ORDER BY dt DESC +LIMIT 5 +``` + +Test in [Queries](https://queries.santiment.net/query/ecosystem-aggregated-metrics-example-483) + +--- + +### intraday_nft_metrics + +A table `intraday_nft_metrics` was created to store intraday nft metrics which are related to whole nft collection or to specific tokens within nft collection. Here's an example how to get floor price for boredapeyachtclub collection: + +```SQL +SELECT + dt, value +FROM intraday_nft_metrics +WHERE + dt >= toDateTime('2024-01-01 00:00:00') + AND asset_id = get_asset_id('ethereum') + AND metric_id = get_metric_id('nft_collection_min_price') + AND collection_name = 'boredapeyachtclub' +LIMIT 5 +``` + +Test in [Queries](https://queries.santiment.net/query/intraday-nft-metrics-example-485) + +--- + +## Use Cases and Other tables + +### Metadata tables + +There are few metadata tables storing data about metrics, assets and label_fqns: + +- `metric_metadata` stores metric name, ID, metric version, etc. +- `asset_metadata` stores asset name, ID, decimals, contract_addresses, ticker and slug, etc. +- `label_metadata` stores label fqn, ID and other label related info. + +Using these table you can navigate through a wide range of Santiment datasets. For instance, you're able to +find all price-related metrics with a simple query: + +```SQL +SELECT DISTINCT name, metric_id +FROM metric_metadata +WHERE name LIKE '%price%' +``` + +Test in [Queries](https://queries.santiment.net/query/price-related-metrics-example-488) + +Also you're able to find deciamals and contract addresses for a particular asset, e.g. uniswap: + +```SQL +SELECT DISTINCT name, asset_id, decimals, contract_addresses +FROM asset_metadata +WHERE name = 'uniswap' +``` + +``` +┌───────name─┬──asset_id─┬──deciamls─┬──────────contract_addresses───────────────────────────┐ +│ 'uniswap' 2825 18 ['0x1f9840a85d5af5bf1d1762f925bdaddc4201f984'] │ +└─────────────┴────────────┴─────────────┴───────────────────────────────────────────────────────────┘ +``` + +### Using precomputed metrics to build new metrics + +Not all metrics are build from the raw data only. Some of the metrics are +computed by combining a set of pre-computed metrics. + +The MVRV is defined as the ratio between the Market Value and Realized Value. +The total supply is part of the numerator and the denominator, so it can be +eliminated. The result is that the numerator is just `price_usd` and the +denominator is `realized_price_usd`. There are precomputed metrics for both, so +we can use them to compute the MVRV (and that's how we do it for the official +MVRV metric!). Depending on the load on the database, the query duration can +vary. At the moment of writing this, running the query takes 0.13 seconds. + +In the query `anyIf` is used as there is filtering by `asset_id` and +`metric_id`, so there is only one value per metric for each `dt`. The example +after that discusses how to handle more complex `GROUP BY` clauses. + +```sql +SELECT + dt, + get_asset_name(any(asset_id)) AS asset, + anyIf(value, metric_id=get_metric_id('price_usd')) AS numerator, + anyIf(value, metric_id=get_metric_id('mean_realized_price_usd_intraday_20y')) AS denominator, + numerator / denominator AS mvrv_usd_ratio, + floor((mvrv_usd_ratio - 1) * 100, 2) AS mvrv_usd_percent +FROM intraday_metrics FINAL +WHERE + asset_id = get_asset_id('bitcoin') AND + metric_id IN (get_metric_id('price_usd'), get_metric_id('mean_realized_price_usd_intraday_20y')) AND + dt >= toDateTime('2022-01-01 00:00:00') +GROUP BY dt +ORDER BY dt ASC +LIMIT 10 +``` + +Test in [Queries](https://queries.santiment.net/query/usage-of-precomputed-metrics-example-415) + +``` +┌──────────────────dt─┬─asset───┬──────────numerator─┬────────denominator─┬─────mvrv_usd_ratio─┬─mvrv_usd_percent─┐ +│ 2022-01-01 00:00:00 │ bitcoin │ 46378.15778582922 │ 23002.992048445383 │ 2.0161793599786777 │ 101.61 │ +│ 2022-01-01 00:05:00 │ bitcoin │ 46394.94838737312 │ 23002.992048445383 │ 2.016909291176695 │ 101.69 │ +│ 2022-01-01 00:10:00 │ bitcoin │ 46376.92099283003 │ 23002.997373190537 │ 2.0161251266707207 │ 101.61 │ +│ 2022-01-01 00:15:00 │ bitcoin │ 46342.625905845896 │ 23002.997373190537 │ 2.01463423022676 │ 101.46 │ +│ 2022-01-01 00:20:00 │ bitcoin │ 46349.908441099375 │ 23002.95114246238 │ 2.014954870531355 │ 101.49 │ +│ 2022-01-01 00:25:00 │ bitcoin │ 46419.391208461006 │ 23002.920905515144 │ 2.0179781254358686 │ 101.79 │ +│ 2022-01-01 00:30:00 │ bitcoin │ 46423.024145185496 │ 23002.93075048584 │ 2.0181351954122198 │ 101.81 │ +│ 2022-01-01 00:35:00 │ bitcoin │ 46499.005410722944 │ 23002.948585722002 │ 2.021436740487479 │ 102.14 │ +│ 2022-01-01 00:40:00 │ bitcoin │ 46573.474600493675 │ 23002.95629498449 │ 2.024673437763669 │ 102.46 │ +│ 2022-01-01 00:45:00 │ bitcoin │ 46647.52193392966 │ 23003.039167275976 │ 2.0278851674647504 │ 102.78 │ +└─────────────────────┴─────────┴────────────────────┴────────────────────┴────────────────────┴──────────────────┘ +``` + +To return only some of the columns, the query can be provided as a FROM subquery. This does not induce any +performence degradation. This example also shows how the [WITH Clause](https://clickhouse.com/docs/en/sql-reference/statements/select/with/) +can be used to avoid string literals repetition. + +```sql +WITH + get_metric_id('price_usd') AS price_usd_metric_id, + get_metric_id('mean_realized_price_usd_intraday_20y') AS realized_price_usd_metric_id +SELECT + dt, + price_usd / realized_price_usd AS mvrv_usd_ratio, + floor((mvrv_usd_ratio - 1) * 100, 2) AS mvrv_usd_percent +FROM ( + SELECT + dt, + get_asset_name(any(asset_id)) AS asset, + anyIf(value, metric_id=price_usd_metric_id) AS price_usd, + anyIf(value, metric_id=realized_price_usd_metric_id) AS realized_price_usd + FROM intraday_metrics FINAL + WHERE + asset_id = get_asset_id('bitcoin') AND + metric_id IN (price_usd_metric_id, realized_price_usd_metric_id) AND + dt >= toDateTime('2022-01-01 00:00:00') + GROUP BY dt +) +ORDER BY dt ASC +LIMIT 10 +``` + +Test in [Queries](https://queries.santiment.net/query/with-example-416) + +The next query demonstrates what needs to be done if there is a need to +aggregate the datetime instead of getting a value for each `dt`: + +```sql +WITH + get_metric_id('price_usd') AS price_usd_metric_id, + get_metric_id('mean_realized_price_usd_intraday_20y') AS realized_price_usd_metric_id +SELECT + month, + price_usd / realized_price_usd AS mvrv_usd_ratio, + floor((mvrv_usd_ratio - 1) * 100, 2) AS mvrv_usd_percent +FROM ( + SELECT + toStartOfMonth(dt) AS month, + get_asset_name(any(asset_id)) AS asset, + argMaxIf(value, dt, metric_id=price_usd_metric_id) AS price_usd, + argMaxIf(value, dt, metric_id=realized_price_usd_metric_id) AS realized_price_usd + FROM intraday_metrics FINAL + WHERE + asset_id = get_asset_id('bitcoin') AND + metric_id IN (price_usd_metric_id, realized_price_usd_metric_id) AND + dt >= toDateTime('2022-01-01 00:00:00') + GROUP BY month +) +ORDER BY month ASC +LIMIT 10 +``` + +Test in [Queries](https://queries.santiment.net/query/with-example-with-aggregated-dt-417) + +The following row needs some explanation: + +```sql +argMaxIf(value, dt, metric_id=get_metric_id('price_usd')) AS price_usd, +``` + +This function call has three parameters: + +- `value` - This is the column that is returned +- `dt` - This is the column that `max` is performed upon. Of all columns + matching the filter, the one with the max `dt` is returned. +- `metric_id=get_metric_id('price_usd')` - This a boolean expression. Look only + at the rows for which the expression evaluates to true. + +If the `FINAL` keyword is not used, taking the row with biggest `computed_at` +among those with the same `dt` can be achieved by using a tuple as a second +argument: + +```sql +argMaxIf(value, (dt, computed_at), metric_id=get_metric_id('price_usd')) AS price_usd, +``` diff --git a/src/content/docs/guides/santiment-queries/nft-tables/index.mdx b/src/content/docs/guides/santiment-queries/nft-tables/index.mdx new file mode 100644 index 000000000..a25725cce --- /dev/null +++ b/src/content/docs/guides/santiment-queries/nft-tables/index.mdx @@ -0,0 +1,316 @@ +--- +title: NFT Tables Overview +author: Santiment Team +description: Learn about the Non-Fungible Token (NFT) tables stored in Santiment Queries for easy access and analysis. +datePublished: 2023-01-30 +dateModified: 2024-11-06 +sidebar: + label: NFT Tables + order: 110 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + +## Overview + +NFT stands for Non-Fungible Token, which is a digital asset that represents ownership of a unique item or piece of content, such as art, music, video, or tweets. NFTs differ from cryptocurrencies because each NFT is unique and cannot be exchanged one-to-one, while cryptocurrencies are interchangeable. + +NFTs are created using blockchain technology, which provides a secure and transparent record of ownership and transfer. This allows creators and owners to prove ownership, authenticity, and rarity, potentially increasing the value of their digital assets over time. + +In **Santiment Queries**, we collect data for all NFTs from exchanges on: + +### Ethereum + +- CryptoPunks +- Foundation +- LooksRare +- OpenSea +- Rarible +- SuperRare + + + +The Polygon chain has been deprecated as of October 28th 2024 and is no longer supported. + + + +This information allows you to effortlessly track a specific NFT or an entire collection, as well as investigate past prices and owners. + +## List of NFT Tables + +All our tables that contain NFT-related data have the string 'nft' in their name. To find them yourself, run the following query: + +```sql +SHOW TABLES LIKE '%nft%' +``` + +The result will display the NFT-related tables: + +``` +┌─name───────────────────┐ +│ nft_trades │ +│ nft_tokens_metadata │ +│ intraday_nft_metrics │ +└────────────────────────┘ +``` + +## Exploring the Tables + +We can inspect the tables using the commands we learned in [Exploration](/santiment-queries/exploration/). + +Below, we have listed all the NFT tables with their columns, brief descriptions, and some example queries that you can use to explore the tables. + +### nft_trades + +The `nft_trades` table is designed to store information about the NFT trades that we have collected. It has the following columns: + +- **dt** (_DateTime_): When the transaction happened. +- **blockchain** (_String_): The blockchain on which the transaction occurred. +- **tx_hash** (_String_): Unique identifier generated when the transaction was executed. +- **log_index** (_UInt32_): Log index of the trade event. +- **platform** (_String_): Name of the platform where trades occurred, such as OpenSea, CryptoPunks, etc. +- **seller_address** (_String_): Address of the seller. +- **buyer_address** (_String_): Address of the buyer. +- **nft_contract_address** (_String_): Address of the NFT's collection. +- **currency_contract_address** (_Nullable(String)_): Identifier of the currency used in the trade. It is empty if the native coin was used (Ether or Matic), otherwise, it is the address of the ERC20 token's smart contract. +- **asset_ref_id** (_UInt64_): Reference ID of the currency contract that can be used to retrieve additional information about the asset from the `asset_metadata` table. +- **token_ids** (_Array(String)_): Array of NFT token IDs in hex that were exchanged in the trade. Usually, only one is exchanged. +- **amount_tokens** (_Array(String)_): Array of amounts, which describes how many tokens were transferred. +- **nft_contract_type** (_UInt8_): Type of NFT contract, 0 - ERC721, 1 - ERC1155. Based on the signature of the transfer. +- **amount** (_String_): The amount of the transaction in the asset used in it. +- **complete** (_UInt8_): State of the transaction (1 means it is completed). +- **computed_at** (_DateTime_): The timestamp when the trade was inserted into the table. + +### nft_tokens\_ metadata + +The `nft_tokens_metadata` is a table designed to store information about NFT tokens. It has the following columns: + +- **blockchain** (_String_): Refers to the decentralized platform on which the NFT exists, e.g. Ethereum, Binance Smart Chain, etc. +- **address** (_String_): Represents the unique public address of the NFT owner. +- **token_id** (_String_): Unique identifier assigned to each NFT in decimal, used to distinguish it from others. +- **uri** (_Nullable(String)_): Uniform Resource Identifier, a link that directs to additional information or media related to the NFT. +- **data** (_Nullable(String)_): Contains the NFT's metadata, such as its name, image, and any other relevant information in JSON format. +- **created_at** (_DateTime_): The date and time when the NFT was created. +- **error** (_Nullable(String)_): Any error message associated with the NFT, such as a transaction failure, if applicable. This column is used to track and monitor any issues that arise in the NFT creation process. + +### intraday_nft_metrics + +The `intraday_nft_metrics` is a table designed to store intraday metrics for NFT assets. The table has the following columns: + +- **asset_id** (_UInt64_): ID of the currency used in value calculation (ETH or WETH). +- **metric_id** (_UInt64_): Unique identifier assigned to the specific metric being recorded. +- **address** (_String_): Represents the address of the NFT collection. +- **collection_name** (_String_): The name of the NFT collection that the asset belongs to. +- **token_id** (_Nullable(UInt64)_): Unique identifier assigned to each NFT, used to distinguish it from others. +- **dt** (_DateTime_): The date and time when the metric was recorded. +- **value** (_Float64_): The value of the metric recorded at the specified `dt`. +- **computed_at** (_DateTime_): The timestamp when the trade was inserted into the table. This is used to track the accuracy of the metric calculation and to ensure that the most up-to-date information is available. + +There are currently 16 metrics we track: + +| ID | Name | Additional Information | +| ---- | ------------------------------ | ----------------------------------------------------------------------- | +| 1279 | nft_collection_min_price | [more information](/metrics/nft-collection-price/#nft-collection-price) | +| 1280 | nft_collection_max_price | [more information](/metrics/nft-collection-price/#nft-collection-price) | +| 1281 | nft_collection_avg_price | [more information](/metrics/nft-collection-price/#nft-collection-price) | +| 1282 | nft_collection_trades_count | [more information](/metrics/nft-collection-price/#nft-collection-price) | +| 1283 | nft_collection_min_price_usd | [more information](/metrics/nft-collection-price/#nft-collection-price) | +| 1284 | nft_collection_max_price_usd | [more information](/metrics/nft-collection-price/#nft-collection-price) | +| 1285 | nft_collection_avg_price_usd | [more information](/metrics/nft-collection-price/#nft-collection-price) | +| 1288 | nft_market_volume | [more information](/metrics/nft-market-volume) | +| 1289 | nft_market_count | [more information](/metrics/nft-market-volume) | +| 1290 | nft_collection_holders_balance | [more information](/metrics/nft-collection-holders-balance) | +| 1291 | nft_network_profit_loss | [more information](/metrics/nft-network-profit-loss) | +| 1292 | nft_network_profit_loss_usd | [more information](/metrics/nft-network-profit-loss) | +| 1293 | nft_collection_profit_loss | [more information](/metrics/nft-network-profit-loss) | +| 1294 | nft_collection_profit_loss_usd | [more information](/metrics/nft-network-profit-loss) | + +## Sample Queries + +### Number of Unique NFT Owners + +Check the number of unique wallets that have owned an NFT in the last 7 days. + +```sql +SELECT countDistinct(buyer_address) AS uniqueBuyers +FROM nft_trades +WHERE dt >= (now() - INTERVAL 6 DAY) +``` + +Test in [Queries](https://queries.santiment.net/query/number-of-unique-nft-owners-397) + +### Unique NFT Platforms Ordered by Sales + +Check the platforms ordered by sales for the last 7 days: + +```sql +SELECT + platform, + count(platform) AS sales +FROM nft_trades +WHERE (complete = 1) AND (dt >= (now() - toIntervalDay(6))) +GROUP BY platform +ORDER BY sales DESC +``` + +Test in [Queries](https://queries.santiment.net/query/unique-nft-platforms-ordered-by-sales-398). + +--- + +### Number of Unique Sales for a Platform + +To find the number of unique sales for a platform (in this case, 'opensea') for the last 5 months, split by month, use the following SQL query: + +```sql +SELECT + toStartOfMonth(dt) AS month, + count(platform) AS sales +FROM nft_trades +WHERE (complete = 1) AND (dt >= (now() - toIntervalMonth(4))) AND (platform = 'opensea') +GROUP BY month +``` + +Test in [Queries](https://queries.santiment.net/query/number-of-unique-sales-for-a-platform-399) + +--- + +### Top 10 Buyers by Completed Purchases + +To find the top 10 buyers ordered by the count of completed purchases in the last 5 days, use the following query. To find the top 10 sellers, simply swap `buyer_address` with `seller_address`. + +```sql +SELECT + buyer_address, + platform, + count(platform) AS purchases +FROM nft_trades +WHERE (complete = 1) AND (dt >= (now() - toIntervalDay(4))) +GROUP BY + buyer_address, + platform +ORDER BY purchases DESC +LIMIT 10 +``` + +Test in [Queries](https://queries.santiment.net/query/top-10-buyers-by-completed-purchases-400) + +--- + +### Summed Amounts of Assets for a Platform + +Get the unique assets for the last 7 days for a single platform with summed amounts. You can get similar information for buyers and sellers by swapping the platform in the `WHERE` clause with buyer/seller. + +```sql +SELECT + DISTINCT tb1.asset_ref_id, + tb2.name, + tb1.sum_amount +FROM ( + SELECT + asset_ref_id, + sum(CAST(amount, 'UInt64')) AS sum_amount + FROM nft_trades + WHERE + dt >= (now() - INTERVAL 6 DAY) and platform = 'opensea' + GROUP BY asset_ref_id + ORDER BY sum_amount +) AS tb1 +INNER JOIN asset_metadata AS tb2 ON tb1.asset_ref_id = tb2.asset_ref_id +ORDER BY sum_amount DESC +``` + +Test in [Queries](https://queries.santiment.net/query/summed-amounts-of-assets-for-a-platform-401) + +--- + +### Collections Ranked by Traded Tokens + +This query ranks collections based on the number of traded tokens in the collection for the last 5 days. + +```sql +SELECT + nft_contract_address, + platform, + count(token_ids) as number_of_traded_nfts +FROM nft_trades +WHERE (complete = 1) and (dt >= NOW() - toIntervalDay(4)) +GROUP BY + nft_contract_address, + platform +ORDER BY number_of_traded_nfts desc +LIMIT 10 +``` + +Test in [Queries](https://queries.santiment.net/query/collections-ranked-by-traded-tokens-402) + +--- + +### Collections Ranked by Recorded Tokens + +This query ranks collections based on the number of recorded tokens in each collection. + +```sql +SELECT + blockchain, + address, + COUNT(token_id) as number_of_nfts +FROM + nft_tokens_metadata +GROUP BY + blockchain, + address +ORDER BY + number_of_nfts DESC +LIMIT 10 +``` + +Test in [Queries](https://queries.santiment.net/query/collections-ranked-by-recorded-tokens-403). + +--- + +### Retrieve All Tokens with Additional Information for an Address + +To get all the tokens and their related information for a given address, use the following SQL query: + +```sql +SELECT + token_id, + simpleJSONExtractString(data, 'name') as token_name, + simpleJSONExtractString(data, 'description') as token_description, + simpleJSONExtractString(data, 'external_url') as external_url +FROM nft_tokens_metadata +WHERE address = '0x76be3b62873462d2142405439777e971754e8e77' +ORDER BY token_id +``` + +Test in [Queries](https://queries.santiment.net/query/retrieve-all-tokens-with-additional-information-for-an-address-404). + +--- + +### NFT trades in USD for an address + +Recent NFT trades volume of an address with amount calculated in USD + +```sql +SELECT day_dt, SUM((amount/POW(10, decimals))*price) as volume_usd FROM ( + SELECT + toDate(dt) as day_dt, + dictGet('default.assets_by_ref_id', 'decimals', asset_ref_id) as decimals, + dictGet('default.assets_by_ref_id', 'asset_id', asset_ref_id) as asset_id, + SUM(toInt256(amount)) as amount + FROM nft_trades + WHERE ( + buyer_address == '0x94fc70cffb47fc77d16f7997acd527e45a87b050' + OR + seller_address == '0x94fc70cffb47fc77d16f7997acd527e45a87b050' + ) AND blockchain = 'ethereum' AND dt >= toDate(NOW()) - INTERVAL 7 DAY + GROUP BY day_dt, asset_id, decimals +) INNER JOIN ( + SELECT dt as day_dt, asset_id, value as price + FROM daily_metrics_v2 + WHERE metric_id = (SELECT metric_id FROM metric_metadata FINAL WHERE name = 'daily_avg_price_usd') +) USING day_dt, asset_id +GROUP BY day_dt +``` + +Test in [Queries](https://queries.santiment.net/query/nft-trades-in-usd-for-an-address-405) diff --git a/src/content/docs/guides/santiment-queries/prices-tables/index.mdx b/src/content/docs/guides/santiment-queries/prices-tables/index.mdx new file mode 100644 index 000000000..6a3d99241 --- /dev/null +++ b/src/content/docs/guides/santiment-queries/prices-tables/index.mdx @@ -0,0 +1,73 @@ +--- +title: 'Fetching Prices, Volume, and Market Cap using Santiment Queries' +author: Santiment Team +description: Learn how to extract cryptocurrency asset prices, trading volume, and market cap data using the asset_prices_v3 table in Santiment Queries. +datePublished: 2023-05-30 +dateModified: 2024-03-13 +sidebar: + label: Prices Tables + order: 60 +--- + +## Overview + +Santiment Queries' `asset_prices_v3` table serves as a critical tool for procuring accurate and detailed information about cryptocurrency asset prices, volume, and market capitalization at any given timestamp. This guide aims to introduce you to the table's structure and its versatile applications. + +Data for the `asset_prices_v3` table is sourced from two primary platforms - Coinmarketcap and Cryptocompare. + +## Table Structure + +The `asset_prices_v3` table offers extensive information about cryptocurrency asset prices at various timestamps. Here are the key columns you should be familiar with: + +- **dt** (_DateTime_): This column signifies the timestamp of the data. +- **source** (_LowCardinality(String)_): Specifies the data's origin, either `coinmarketcap` or `cryptocompare`. +- **slug** (_LowCardinality(String)_): The name of the cryptocurrency project (e.g., 'bitcoin', 'ethereum'). +- **price_usd** (_Float64_): The price of the asset in USD. +- **price_btc** (_Float64_): The price of the asset in Bitcoin. +- **marketcap_usd** (_Float64_): The market capitalization of the asset in USD. +- **volume_usd** (_Float64_): The rolling total trading volume of the asset in USD for last 24 hours + +## Sample Queries + +### Query 1: Fetch the Daily Closing Price of Bitcoin for the Past Week + +The following SQL query allows you to extract the daily closing price of Bitcoin for the last seven days. + +```sql +SELECT + toDate(dt) as date, + argMax(price_usd, dt) as closing_price +FROM + asset_prices_v3 +WHERE + slug = 'bitcoin' + AND dt >= (now() - interval 7 day) +GROUP BY + date +ORDER BY + date DESC +``` + +Test in [Queries](https://queries.santiment.net/query/fetch-the-daily-closing-price-of-bitcoin-for-the-past-week-406) + +### Query 2: Identify the Top Projects by USD Trading Volume in the Past 24 Hours + +To retrieve the top 20 cryptocurrency projects ranked by their average trading volume in USD over the last 24 hours, use the following SQL query. + +```sql +SELECT + slug, + AVG(volume_usd) as avg_volume +FROM + asset_prices_v3 +WHERE + dt >= (now() - interval 24 hour) +GROUP BY + slug +ORDER BY + avg_volume DESC +LIMIT 20; +``` + +Test in [Queries](https://queries.santiment.net/query/identify-the-top-projects-by-usd-trading-volume-in-the-past-24-hours-407) + diff --git a/src/content/docs/guides/santiment-queries/rate-limits-and-credits-cost/index.mdx b/src/content/docs/guides/santiment-queries/rate-limits-and-credits-cost/index.mdx new file mode 100644 index 000000000..df5ee1e0b --- /dev/null +++ b/src/content/docs/guides/santiment-queries/rate-limits-and-credits-cost/index.mdx @@ -0,0 +1,170 @@ +--- +title: Rate Limits, Restrictions and Credits Cost +author: Santiment Team +description: What limits are applied when running queries? +datePublished: 2023-05-19 +dateModified: 2025-01-16 +sidebar: + label: Rate Limits and Credits Cost + order: 50 +--- + +## Overview + +Santiment Queries is a powerful tool that provides users with access to a Clickhouse database, enabling them to execute SQL queries and obtain relevant metrics. These queries are executed as GraphQL API calls. +The queries executed can vastly differ in their resource consumption. Because of that, there is an additional credits model that restricts the queries. + +## API Calls Rate Limits + +The queries are executed as ordinary GraphQL API calls. The same [rate limits](/sanapi/rate-limits) apply to these SQL queries as well. + +## Execution Restrictions + +When executing a query there are two main restrictions that are applied which, if exceeded, will stop the execution of the query and return an error. + +**Timeout**: The query execution must finish in 60 seconds +**RAM memory consumption**: If the query needs more than 10GB of RAM memory to run, it will be terminated. + +## Credits Cost + +The execution of a query spends RAM, CPU and IO (disk) resources. The combination of all resources spent with the size of the result is used to compute the cost of the query. The bigger the result and the more resources are spent, the higher the cost of the query. + +The available credits per month are determined by the subscription plan. + +Check the plans and restrictions for **Sanbase** subscriptions on the: + +- [Sanbase pricing page](https://app.santiment.net/pricing?plans=individual) +- [Sanbase plans academy page](/products-and-plans/sanbase-plans/) + +Check the plans and restrictions for **API** subscriptions on the: + +- [API pricing page](https://app.santiment.net/pricing?plans=business) +- [API plans academy page](/products-and-plans/sanapi-plans/) + +### Example + +The example below shows how you can check the credits cost of your query. + +```graphql +{ + runRawSqlQuery( + sqlQueryText: "SELECT * FROM intraday_metrics limit 5" + sqlQueryParameters: "{}" + ) { + clickhouseQueryId + rows + columns + } +} +``` + +```json +{ + "data": { + "runRawSqlQuery": { + "clickhouseQueryId": "2d579859-c098-44b8-88ea-c7ebb45c9ee3", + "columns": [ + "asset_id", + "metric_id", + "dt", + "value", + "computed_at", + "block_number", + "is_finalized", + "seq_num" + ], + "rows": [ + [ + 1369, + 1175, + "2024-04-01T00:00:00Z", + 0, + "2024-10-01T17:50:01Z", + 0, + true, + 0 + ], + [ + 1369, + 1175, + "2024-04-02T00:00:00Z", + 0, + "2024-10-01T17:50:01Z", + 0, + true, + 0 + ], + [ + 1369, + 1175, + "2024-04-03T00:00:00Z", + 0, + "2024-10-01T17:50:01Z", + 0, + true, + 0 + ], + [ + 1369, + 1175, + "2024-04-04T00:00:00Z", + 0, + "2024-10-01T17:50:01Z", + 0, + true, + 0 + ], + [ + 1369, + 1175, + "2024-04-05T00:00:00Z", + 0, + "2024-10-01T17:50:01Z", + 0, + true, + 0 + ] + ] + } + } +} +``` + +In order to check the credits cost, the `clickhouseQueryId` needs to be taken and provided to another query. +It is important to note that the credit cost is not immediately available after the execution of the query. + +```graphql +{ + getClickhouseQueryExecutionStats(clickhouseQueryId: "175F9502835E975E") { + creditsCost + cpuTimeMicroseconds + memoryUsageGb + queryDurationMs + readGb + readCompressedGb + readRows + resultGb + resultRows + } +} +``` + +```json +{ + "data": { + "getClickhouseQueryExecutionStats": { + "cpuTimeMicroseconds": 41156, + "creditsCost": 1, + "memoryUsageGb": 0.011724, + "queryDurationMs": 69, + "readCompressedGb": 0.000001, + "readGb": 0, + "readRows": 10, + "resultGb": 0, + "resultRows": 5 + } + } +} +``` + +In the same query if 100 thousand rows are returned instead of just 5, the credit cost jumps to 109. diff --git a/src/content/docs/guides/santiment-queries/writing-sql-queries/index.mdx b/src/content/docs/guides/santiment-queries/writing-sql-queries/index.mdx new file mode 100644 index 000000000..437e5cd59 --- /dev/null +++ b/src/content/docs/guides/santiment-queries/writing-sql-queries/index.mdx @@ -0,0 +1,435 @@ +--- +title: Writing SQL Queries +author: Santiment Team +description: First steps in using SQL combined with Santiment's datasets +datePublished: 2022-08-17 +dateModified: 2024-04-08 +sidebar: + order: 30 +--- + +## Overview + +This document introduces the reader to the basics of Clickhouse SQL and Santiment's datasets. + +The available datasets contain two types of data: + +- Precomputed metrics: These are calculated and stored using raw data and preprocessing, such as `mvrv_usd` or `daily_active_addresses`. +- Raw data: This includes information like transfers, balances, labels, events, and more. + +## Clickhouse Overview + +[Clickhouse](https://clickhouse.com/) is a true Column-Oriented Database Management System that excels in storing and working with metrics and crypto-related data due to its exceptional speed. Clickhouse SQL is similar to ANSI SQL with some unique features. It supports `SELECT`, `GROUP BY`, `JOIN`, `ORDER BY`, subqueries in `FROM`, `IN` operator and subqueries in `IN` operator, window functions, numerous aggregate functions (avg, max, min, last, first, etc.), scalar subqueries, and more. + +To achieve the highest possible performance, some features are not present: + +- No support for foreign keys, but they are simulated in some existing tables (holding pre-computed metrics mostly). For example, there is an `asset_id` column in the `intraday_metrics` table, and an `asset_metadata` table to which the `asset_id` refers. The lack of foreign key support means that the database cannot guarantee referential integrity, so it is enforced by application-level code. +- No full-fledged transactions. The SQL Editor has read-only access, and Clickhouse is used mainly as append-only storage, so the lack of transactions does not cause any issues for this use case. + +Official [Clickhouse SQL Reference](https://clickhouse.com/docs/en/sql-reference/) + +Some important pages containing useful information: + +- [Syntax](https://clickhouse.com/docs/en/sql-reference/syntax/) +- [SELECT Statements](https://clickhouse.com/docs/en/sql-reference/statements/select/) +- [Functions](https://clickhouse.com/docs/en/sql-reference/functions/) +- [Operators](https://clickhouse.com/docs/en/sql-reference/operators/) +- [Aggregate Functions](https://clickhouse.com/docs/en/sql-reference/aggregate-functions/) + +## The FINAL keyword + +> Note: This part is more technical + +There are some keywords that can often be seen in Clickhouse SQL but are not +seen in other known SQL variants. These keywords are explained here. + +Values in Clickhouse tables are not updated directly. Instead, in case there is a need to +modify an existing row, the [MergeTree Table Engine](https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree/) is used. +In order to update an existing row, a new row with the same primary key is +inserted. At some unspecified point in time, Clickhouse will merge all rows with +the same primary key into one. Until that merge happens, all rows will exist and +will appear in selects. + +Example: There is one value per day for an asset-metric pair in the +`daily_metrics_v2` table. The value is recomputed every hour and a new row with +the same primary key but different `value` and `computed_at` is inserted. + +In order to read the data as if it is already merged, you need to add the +`FINAL` keyword after the table name: + +```sql +SELECT dt, value +FROM daily_metrics_v2 FINAL +WHERE asset_id = get_asset_id('bitcoin') AND metric_id = get_metric_id('daily_active_addresses') +ORDER BY dt DESC +LIMIT 2 +``` + +Test in [Queries](https://queries.santiment.net/query/final-example-408) + +This `FINAL` keyword is not free - it slightly reduces the performance. In case +performance is seeked, the same goal can be achieved with standard SQL by using +`GROUP BY` the primary key and aggregate functions. This approach has smaller +performance penalty at the cost of code readability and maintainability. + +```sql +SELECT dt, argMax(value, computed_at) +FROM daily_metrics_v2 +WHERE asset_id = get_asset_id('bitcoin') AND metric_id = get_metric_id('daily_active_addresses') +GROUP BY dt, asset_id, metric_id +ORDER BY dt DESC +LIMIT 2 +``` + +Test in [Queries](https://queries.santiment.net/query/without-final-example-409) + +## The PREWHERE Clause + +In addition to the standard [WHERE](https://clickhouse.com/docs/en/sql-reference/statements/select/where) clause, Clickhouse also supports the [PREWHERE](https://clickhouse.com/docs/en/sql-reference/statements/select/prewhere/) clause. This optimization allows for more efficient filtering by initially reading only the columns necessary for executing the filtering expression. + +When the `FINAL` keyword is not used, the `WHERE` clause is automatically transformed into a `PREWHERE` clause. However, when the `FINAL` keyword is used, the `WHERE` clause does not automatically transform into a `PREWHERE` clause. This transformation in the latter case can lead to different results if columns that are not part of the primary key are used in the filtering. + +It is recommended not to use the `PREWHERE` clause unless you are certain of its implications and effects on your query. + +## Using Pre-computed Metrics + +We store pre-computed metrics in tables that are described on [this page](/santiment-queries/metric-tables). + +Let's use `daily_metrics_v2` table as an example. Here's a schema for this table: + +- `dt` - A `DateTime` field storing the corresponding date and time. +- `asset_id` - An `UInt64` unique identifier for an asset. The data for that ID is stored in the `asset_metadata` table. +- `metric_id` - An `UInt64` unique identifier for a metric. The data for that ID is stored in the `metric_metadata` table. +- `value` - A `Float` column holding the metric's value for the given asset/metric pair. +- `computed_at` - A `DateTime` column storing the date and time when the given row was computed. + +### Fetch data for asset bitcoin and metric **daily_active_addresses** + +The following example shows how to fetch rows for Bitcoin's +`daily_active_addresses` metric: + +```SQL +SELECT asset_id, metric_id, dt, value +FROM daily_metrics_v2 FINAL +WHERE + asset_id = (SELECT asset_id FROM asset_metadata FINAL WHERE name = 'bitcoin' LIMIT 1) AND + metric_id = (SELECT metric_id FROM metric_metadata FINAL WHERE name = 'daily_active_addresses' LIMIT 1) AND + dt >= toDateTime('2020-01-01 00:00:00') +LIMIT 2 +``` + +Test in [Queries](https://queries.santiment.net/query/fetch-data-for-asset-bitcoin-and-metric-daily-active-addresses-410) + +``` +┌─asset_id─┬─metric_id─┬─────────dt─┬──value─┐ +│ 1452 │ 74 │ 2020-01-01 │ 522172 │ +│ 1452 │ 74 │ 2020-01-02 │ 678391 │ +└──────────┴───────────┴────────────┴────────┘ +``` + +The query is lengthy and contains parts that will be often used in +queries - the `asset_id` and `metric_id` filtering. For this reason, predefined functions can be used to simplify fetching those ids. + +```SQL +SELECT asset_id, metric_id, dt, value +FROM daily_metrics_v2 FINAL +WHERE + asset_id = get_asset_id('bitcoin') AND + metric_id = get_metric_id('daily_active_addresses') AND + dt >= toDateTime('2020-01-01 00:00:00') +LIMIT 2 +``` + +Test in [Queries](https://queries.santiment.net/query/predef-example-411) + +The result still contains the integer representation of the asset and metric. To +convert the `asset_id` to the asset name and the `metric_id` to the metric name +there are a few options: + +- Join the result with the `asset_metadata` and `metric_metadata` tables. This + works, but is highly verbose. +- Use [dictionaries](https://clickhouse.com/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts) that store these mappings and can be used without JOIN. + +```SQL +SELECT + dt, + dictGetString('asset_metadata_dict', 'name', asset_id) AS asset, + dictGetString('metric_metadata_dict', 'name', metric_id) AS metric, + value +FROM daily_metrics_v2 FINAL +WHERE + asset_id = get_asset_id('bitcoin') AND + metric_id = get_metric_id('daily_active_addresses') AND + dt >= toDateTime('2020-01-01 00:00:00') +LIMIT 2 +``` + +Test in [Queries](https://queries.santiment.net/query/dict-example-412) + +``` +┌─────────dt─┬─asset───┬─metric─────────────────┬─value─┐ +│ 2022-06-30 │ bitcoin │ daily_active_addresses │ 0 │ +│ 2022-07-01 │ bitcoin │ daily_active_addresses │ 0 │ +└────────────┴─────────┴────────────────────────┴───────┘ +``` + +As with the `asset_id` and `metric_id` filtering, there are functions that +simplify the dictionary access as well. + +```SQL +SELECT + dt, + get_asset_name(asset_id) AS asset, + get_metric_name(metric_id) AS metric, + value +FROM daily_metrics_v2 FINAL +WHERE + asset_id = get_asset_id('bitcoin') AND + metric_id = get_metric_id('daily_active_addresses') AND + dt >= toDateTime('2020-01-01 00:00:00') +LIMIT 2 +``` + +Test in [Queries](https://queries.santiment.net/query/dict-example-with-func-413) + +To obtain the average value per month, aggregation and grouping must be used. +When grouping, all columns not part of the `GROUP BY` must have an aggregation +applied. In this case, as there is data for a single asset and a single metric, +their corresponding id columns can be aggregated with `any` as all these values +are the same. + +```SQL +SELECT + toStartOfMonth(dt) AS month, + get_asset_name(any(asset_id)) AS asset, + get_metric_name(any(metric_id)) AS metric, + floor(avg(value)) AS monthly_avg_value +FROM daily_metrics_v2 FINAL +WHERE + asset_id = get_asset_id('bitcoin') AND + metric_id = get_metric_id('daily_active_addresses') AND + dt >= toDateTime('2020-01-01 00:00:00') +GROUP BY month +LIMIT 12 +``` + +Test in [Queries](https://queries.santiment.net/query/group-by-example-414) + +``` +┌──────month─┬─asset───┬─metric─────────────────┬─monthly_avg_value─┐ +│ 2020-01-01 │ bitcoin │ daily_active_addresses │ 712767 │ +│ 2020-02-01 │ bitcoin │ daily_active_addresses │ 758896 │ +│ 2020-03-01 │ bitcoin │ daily_active_addresses │ 738555 │ +│ 2020-04-01 │ bitcoin │ daily_active_addresses │ 803423 │ +│ 2020-05-01 │ bitcoin │ daily_active_addresses │ 896321 │ +│ 2020-06-01 │ bitcoin │ daily_active_addresses │ 876348 │ +│ 2020-07-01 │ bitcoin │ daily_active_addresses │ 958904 │ +│ 2020-08-01 │ bitcoin │ daily_active_addresses │ 984239 │ +│ 2020-09-01 │ bitcoin │ daily_active_addresses │ 982237 │ +│ 2020-10-01 │ bitcoin │ daily_active_addresses │ 942581 │ +│ 2020-11-01 │ bitcoin │ daily_active_addresses │ 1026279 │ +│ 2020-12-01 │ bitcoin │ daily_active_addresses │ 1072016 │ +└────────────┴─────────┴────────────────────────┴───────────────────┘ +``` + +### Using precomputed metrics to build new metrics + +[This section was moved here](/santiment-queries/metric-tables/#using-precomputed-metrics-to-build-new-metrics) + +## Using Raw Data + +### Example: Top Transfers + +Find the 5 biggest ETH transactions to the graveyard address 0x0000000000000000000000000000000000000000. + +> Note: Some tables are duplicated with different `ORDER BY` clauses. In the case of transfer tables, there are tables with the `_to` suffix. This indicates that the `to` address is at the front of the `ORDER BY` key. This table has better performance when only filtering by the `to` address. + +```sql +SELECT + dt, + from, + transactionHash, + value / pow(10, 18) -- transform from gwei to ETH +FROM eth_transfers_to FINAL +WHERE to = '0x0000000000000000000000000000000000000000' +ORDER BY value DESC +LIMIT 5 +``` + +Test in [Queries](https://queries.santiment.net/query/example-top-transfers-418) + +```sql +┌──────────────────dt─┬─from───────────────────────────────────────┬─transactionHash────────────────────────────────────────────────────┬─divide(value, pow(10, 18))─┐ +│ 2015-08-08 11:01:14 │ 0x3f98e477a361f777da14611a7e419a75fd238b6b │ 0x242a15349ad0a7070afb73df92e8e569fd196c88c7f589a467f24e6028a07c69 │ 2000 │ +│ 2016-07-28 19:39:05 │ 0xaa1a6e3e6ef20068f7f8d8c835d2d22fd5116444 │ 0x1c96608bda6ce4be0d0f30b3a5b3a9d9c94930291a168a0dbddfe9be24ac70d1 │ 1493 │ +│ 2015-08-13 17:50:09 │ 0xf5437e158090b2a2d68f82b54a5864b95dd6dbea │ 0x88db76f50553d3d9d61eaf7480a92b1d68db08d69e688fd9b457571cc22ab2b0 │ 1000 │ +│ 2021-09-08 03:30:47 │ 0x517bb391cb3a6d879762eb655e48a478498c3698 │ 0x429bfa5fdd1bf8117d6707914b6300ccf08ec3383d38a10ddf37247e18d90557 │ 515.001801432 │ +│ 2015-08-15 06:52:11 │ 0x20134cbff88bfadc466b52eceaa79857891d831e │ 0xe218f7abd6b557e01376c57bcdf7f5d8e94e0760306b1d9eb37e1a8ddc51e6ab │ 400 │ +└─────────────────────┴────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────┴────────────────────────────┘ +``` + +### Example for address balance + +Select the UNI balance of address at the beginning of each month. + +For performance reasons the table has a non-intuitive design. The balances of an address +are stored in a single field of type `AggregateFunction(groupArray, Tuple(DateTime, Float64))`. +When the `groupArrayMerge` function is called on that field, it essentially turns into +`Array` + +The [arrayJoin](https://clickhouse.com/docs/en/sql-reference/functions/array-join/) is a Clickhouse-specific function that is useful in many +scenarios. Normal functions do not change a set of rows, but just change the +values in each row (map). Aggregate functions compress a set of rows (fold or +reduce). The arrayJoin function takes each row and generates a set of rows +(unfold). + +In this scenario `arrayJoin` is used to unfold the array of tuples into rows where each row has a datetime and value. + +```sql +SELECT + toStartOfMonth(dt) AS datetime, + toFloat64(argMax(value, dt)) / pow(10, 18) AS value +FROM ( + SELECT + arrayJoin(groupArrayMerge(values)) AS values_merged, + values_merged.1 AS dt, + values_merged.2 AS value + FROM balances_aggregated + WHERE + address = '0x1a9c8182c09f50c8318d769245bea52c32be35bc' AND + blockchain = 'ethereum' AND + asset_ref_id = get_asset_ref_id('uniswap') + GROUP BY address, blockchain, asset_ref_id + HAVING dt >= toDateTime('2021-01-01 00:00:00') AND dt < toDateTime('2022-08-01 00:00:00') +) +GROUP BY datetime +``` + +Test in [Queries](https://queries.santiment.net/query/example-for-address-balance-419) + +Note that not every month has a balance. This is because during these months no transfers happened and balance records +are produced only when the balance changes. + +```sql +┌───datetime─┬──────────────value─┐ +│ 2021-01-01 │ 54854034.6123795 │ +│ 2021-02-01 │ 75792689.3561644 │ +│ 2021-04-01 │ 105258204.83054289 │ +│ 2021-05-01 │ 113312234.63774733 │ +│ 2021-06-01 │ 123442268.88432267 │ +│ 2021-07-01 │ 134441434.15575847 │ +│ 2021-08-01 │ 158560087.2506342 │ +│ 2021-09-01 │ 173403155.20471838 │ +│ 2021-11-01 │ 173403155.20471838 │ +│ 2021-12-01 │ 173403155.20471838 │ +│ 2022-02-01 │ 227551085.1894977 │ +│ 2022-04-01 │ 227040881.1894977 │ +│ 2022-05-01 │ 254925338.09589037 │ +│ 2022-06-01 │ 268638940.6453577 │ +│ 2022-07-01 │ 280393165.7214612 │ +└────────────┴────────────────────┘ +``` + +### Example for Development Activity + +The `github_v2` table contains [Github Events](https://docs.github.com/en/developers/webhooks-and-events/events/github-event-types) data. +Using these events one can compute better development activity metrics compared to using just commits counts, +as described in [this article](https://medium.com/santiment/tracking-github-activity-of-crypto-projects-introducing-a-better-approach-9fb1af3f1c32) + +To compute the development activity of an organization: + +```sql +WITH ('IssueCommentEvent', + 'IssuesEvent', + 'ForkEvent', + 'CommitCommentEvent', + 'FollowEvent', + 'ForkEvent', + 'DownloadEvent', + 'WatchEvent', + 'ProjectCardEvent', + 'ProjectColumnEvent', + 'ProjectEvent') AS non_dev_related_event_types +SELECT + toStartOfMonth(dt) AS month, + count(*) AS events +FROM ( + SELECT event, dt + FROM github_v2 FINAL + WHERE + owner = 'santiment' AND + dt >= toDateTime('2021-01-01 00:00:00') AND + dt < toDateTime('2021-12-31 23:59:59') AND + event NOT IN non_dev_related_event_types -- these events are related more with comments/issues, not developing +) +GROUP BY month +``` + +Test in [Queries](https://queries.santiment.net/query/example-for-development-activity-420) + +``` +┌──────month─┬─events─┐ +│ 2021-01-01 │ 1600 │ +│ 2021-02-01 │ 1815 │ +│ 2021-03-01 │ 1709 │ +│ 2021-04-01 │ 1541 │ +│ 2021-05-01 │ 1139 │ +│ 2021-06-01 │ 1211 │ +│ 2021-07-01 │ 1213 │ +│ 2021-08-01 │ 1058 │ +│ 2021-09-01 │ 1156 │ +│ 2021-10-01 │ 269 │ +│ 2021-11-01 │ 1079 │ +│ 2021-12-01 │ 760 │ +└────────────┴────────┘ +``` + +To count all the people that have contributed to the development activity of an organization in a given +time period: + +```sql +WITH ('IssueCommentEvent', + 'IssuesEvent', + 'ForkEvent', + 'CommitCommentEvent', + 'FollowEvent', + 'ForkEvent', + 'DownloadEvent', + 'WatchEvent', + 'ProjectCardEvent', + 'ProjectColumnEvent', + 'ProjectEvent') AS non_dev_related_event_types +SELECT + toStartOfMonth(dt) AS month, + uniqExact(actor) AS contributors +FROM ( + SELECT actor, dt + FROM github_v2 FINAL + WHERE + owner = 'santiment' AND + dt >= toDateTime('2021-01-01 00:00:00') AND + dt < toDateTime('2021-12-31 23:59:59') AND + event NOT IN non_dev_related_event_types -- these events are related more with comments/issues, not developing +) +GROUP BY month +``` + +Test in [Queries](https://queries.santiment.net/query/example-2-for-development-activity-421) + +``` +┌──────month─┬─contributors─┐ +│ 2021-01-01 │ 18 │ +│ 2021-02-01 │ 17 │ +│ 2021-03-01 │ 20 │ +│ 2021-04-01 │ 22 │ +│ 2021-05-01 │ 23 │ +│ 2021-06-01 │ 19 │ +│ 2021-07-01 │ 21 │ +│ 2021-08-01 │ 20 │ +│ 2021-09-01 │ 20 │ +│ 2021-10-01 │ 19 │ +│ 2021-11-01 │ 19 │ +│ 2021-12-01 │ 19 │ +└────────────┴──────────────┘ +``` + diff --git a/src/content/docs/guides/santiment-queries/xrpl-tables/index.mdx b/src/content/docs/guides/santiment-queries/xrpl-tables/index.mdx new file mode 100644 index 000000000..a67cfcbfb --- /dev/null +++ b/src/content/docs/guides/santiment-queries/xrpl-tables/index.mdx @@ -0,0 +1,131 @@ +--- +title: XRPL Tables Overview +author: Boris +description: An overview of the XRPL-related tables and their functions +datePublished: 2023-03-30 +dateModified: 2024-03-13 +sidebar: + label: XRPL Tables + order: 120 +--- + +## List of Tables + +All our tables that contain XRPL-related data have the string 'xrp' in their name. To find them yourself, run the following query: + +```sql +SHOW TABLES LIKE '%xrp%' +``` + +The result will display the list of tables: + +``` +┌─name───────────────────┐ +│ xrp_balances │ +│ xrp_balances_shard_v5 │ +│ xrp_dex_volume │ +│ xrp_dex_volume_shard │ +│ xrp_ripple_state │ +│ xrp_ripple_state_shard │ +└────────────────────────┘ +``` + +## Exploration of the Tables + +We can inspect the tables with the commands we learned in [Exploration](/santiment-queries/exploration/). + +Below, we have listed all the XRPL tables with their columns and a brief description of each. + +## xrp_balances + +Represents balance changes per address per currency. + +- **dt** (_DateTime_): The date and time of the balance change +- **blockNumber** (_UInt64_): Unique identifier for the block in which the transaction was processed +- **balance** (_Float64_): The balance of the asset in the account after the transaction was completed +- **oldDt** (_Nullable(DateTime)_): The date and time of the previous balance change +- **oldBlockNumber** (_Nullable(UInt64)_): The block number of the previous balance change +- **oldBalance** (_Float64_): The previous balance in this currency for this address +- **address** (_String_): The owner of the funds +- **currency** (_String_): Type of currency used in the transaction +- **issuer** (_Nullable(String)_): The issuer of the currency +- **issuerCurrency** (_String_): The type of the issued currency +- **addressType** (_String_): Enum(NORMAL | SPECIAL) - Indicates if the address is a valid XRPL address or a meta address used for metric purposes +- **transactionIndex** (_UInt64_): Position of the transaction that caused the balance change inside the XRPL block +- **transactionHash** (_String_): Hash value identifying the transaction that caused the balance change + +## xrp_dex_volume + +Represents trades on the XRPL DEX. + +- **dt** (_DateTime_): The time when the transaction occurred. +- **blockNumber** (_UInt64_): Unique identifier for the block in which the transaction was processed. +- **offerAddress** (_String_): The owner of the funds. +- **makerAddress** (_String_): The address of the account that owns the Offer, resulting in a DEX trade. +- **offerSequence** (_UInt32_): The sequence number of the Offer transaction that resulted in a DEX trade. +- **takerPaysIssuerCurrency** (_String_): The currency type offered by the taker. +- **takerPaysAmount** (_Float64_): The amount of currency offered by the taker. +- **takerGetsIssuerCurrency** (_String_): The currency type received by the taker. +- **takerGetsAmount** (_Float64_): The amount of currency received by the taker. +- **transactionIndex** (_UInt64_): Position of the transaction that caused the balance change inside the XRPL block. +- **transactionHash** (_String_): Hash value identifying the transaction that caused the balance change. +- **xrpAmount** (_Nullable(Float64)_): The amount of the trade measured in XRP. + +## xrp_ripple_state + +Represents creation and destruction or XRPL trustlines. + +- **sign** (_Int8_): Indicates the creation or deletion of a trustline. '1' denotes creation, and '-1' denotes deletion. +- **dt** (_DateTime_): The date and time when the transaction occurred. +- **blockNumber** (_UInt64_): A unique identifier for the block in which the transaction was processed. +- **transactionIndex** (_UInt32_): The position of the transaction that caused the balance change inside the XRPL block. +- **transactionHash** (_String_): The hash value identifying the transaction that caused the balance change. +- **currency** (_String_): The type of currency used in the trustline. +- **balance** (_Float64_): The accumulated balance. +- **highLimitIssuer** (_String_): The issuer of the high account. +- **highLimitBalance** (_Float64_): The balance of the high account. +- **lowLimitIssuer** (_String_): The issuer of the low account. +- **lowLimitBalance** (_Float64_): The balance of the low account. + +## Sample Queries + +### DEX Volume per Asset Pair, Measured in XRP + +DEX volume for a specific asset pair, per day, measured in XRP. + +```sql +WITH ('r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV/USD', 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B/BTC') AS issuer_pair +SELECT + toDate(dt) AS day, + SUM(xrpAmount) AS count_final +FROM xrp_dex_volume +WHERE (takerPaysIssuerCurrency IN (issuer_pair)) OR (takerGetsIssuerCurrency IN (issuer_pair)) +GROUP BY day +ORDER BY day DESC +LIMIT 100 +``` + +Test in [Queries](https://queries.santiment.net/query/dex-volume-per-asset-pair-measured-in-xrp-422) + +--- + +### DEX Volume per Asset Pair, Measured in USD + +DEX volume for a specific asset pair, per day, measured in USD. To achieve the result, we need to join the on-chain XRPL data with prices. + +```sql +WITH ('r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV/USD', 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B/BTC') AS issuer_pair +SELECT + toDate(dt) AS dt, + SUM(xrpAmount * value) AS volume_usd +FROM xrp_dex_volume +INNER JOIN daily_metrics_v2 USING (dt) +WHERE (metric_id = dictGet('metrics_by_name', 'metric_id', 'daily_avg_price_usd')) +AND (asset_id = dictGet('assets_by_name', 'asset_id', 'xrp')) +AND ((takerPaysIssuerCurrency IN (issuer_pair)) OR (takerGetsIssuerCurrency IN (issuer_pair))) +GROUP BY dt +ORDER BY dt DESC +LIMIT 100 +``` + +Test in [Queries](https://queries.santiment.net/query/dex-volume-per-asset-pair-measured-in-usd-423) diff --git a/src/content/docs/guides/youtube-videos/index.mdx b/src/content/docs/guides/youtube-videos/index.mdx new file mode 100644 index 000000000..15cbc95d6 --- /dev/null +++ b/src/content/docs/guides/youtube-videos/index.mdx @@ -0,0 +1,15 @@ +--- +title: Videos +author: Santiment Team +description: Youtube webinars and tutorials +datePublished: 2021-05-24 +dateModified: 2025-08-14 +sidebar: + label: Youtube Videos + order: 90 +--- + +- [The Santiment Youtube Channel](https://www.youtube.com/@Santimentfeed/videos) has many videos not necessarily featured here. +- [Tutorials](/youtube-videos/tutorials) +- [Full Walkthroughs](/youtube-videos/walkthroughs) +- [Webinars](/youtube-videos/webinars) diff --git a/src/content/docs/guides/youtube-videos/tutorials/index.mdx b/src/content/docs/guides/youtube-videos/tutorials/index.mdx new file mode 100644 index 000000000..0211ae7cb --- /dev/null +++ b/src/content/docs/guides/youtube-videos/tutorials/index.mdx @@ -0,0 +1,64 @@ +--- +title: Youtube tutorials +author: Santiment Team +datePublished: 2021-05-26 +dateModified: 2025-08-14 +sidebar: + order: 30 +--- + +## How to create a Watchlist + + + +## How to create an Alert + + + +## Tracking the Social Trends + + + +## Santiment Screener + + + +## Combine any metrics to take fundamental analysis to the next level **Charts** + + + diff --git a/src/content/docs/guides/youtube-videos/walkthroughs/index.mdx b/src/content/docs/guides/youtube-videos/walkthroughs/index.mdx new file mode 100644 index 000000000..a94dda378 --- /dev/null +++ b/src/content/docs/guides/youtube-videos/walkthroughs/index.mdx @@ -0,0 +1,34 @@ +--- +title: Walkthroughs +author: Santiment Team +datePublished: 2021-05-26 +dateModified: 2025-09-16 +sidebar: + order: 20 +--- + +## Walking Through Sanbase + +_The social, onchain, and fundamental data dashboard for crypto tokens_ + + + +## Walking Through SanR + +_The first blockchain-powered, price prediction battleground_ + + diff --git a/src/content/docs/guides/youtube-videos/webinars/index.mdx b/src/content/docs/guides/youtube-videos/webinars/index.mdx new file mode 100644 index 000000000..0809d49ac --- /dev/null +++ b/src/content/docs/guides/youtube-videos/webinars/index.mdx @@ -0,0 +1,87 @@ +--- +title: Youtube webinars +author: Santiment Team +datePublished: 2021-05-24 +dateModified: 2025-08-14 +sidebar: + label: Webinars + order: 10 +--- + +## 6 ways you could have caught REN’s summer tops + + + +## Top on-chain 'valuation' metrics and how to use them (Public Webinar) + + + +## How to analyze crowd sentiment with Sanbase (Public Webinar) + + + +## How to analyze 'whale' behavior with Sanbase (Public Webinar) + + + +## How to analyze 'whale' behavior with Sanbase (Pro Webinar) + + + +## Sansheets Webinar - Using Santiment API for Price Prediction Models + + + +## How to Analyze Speculative Demand with Sanbase (Pro Webinar) + + + diff --git a/src/content/docs/resources/changelog/assets/index.mdx b/src/content/docs/resources/changelog/assets/index.mdx new file mode 100644 index 000000000..6f7469b00 --- /dev/null +++ b/src/content/docs/resources/changelog/assets/index.mdx @@ -0,0 +1,14 @@ +--- +title: Assets changelog +description: Keep track of development updates, new product features and other items from our changelog +author: Santiment Team +datePublished: 2025-10-06 +dateModified: 2025-10-06 +sidebar: + label: Assets + order: 10 +--- + +import AssetsChangelog from '$components/features/changelog/Assets.astro' + + diff --git a/src/content/docs/resources/changelog/index.mdx b/src/content/docs/resources/changelog/index.mdx new file mode 100644 index 000000000..6dc061510 --- /dev/null +++ b/src/content/docs/resources/changelog/index.mdx @@ -0,0 +1,15 @@ +--- +title: Changelog +dateModified: 2025-10-06 +datePublished: 2025-10-06 +sidebar: + order: 20 +--- + +Keep track of development updates, new product features and other +items from our changelog. We update this page every two weeks or +more frequently. + +- [Assets](/changelog/assets) +- [Metrics](/changelog/metrics) +- [Legacy Changelog](/changelog/legacy-changelog) diff --git a/src/docs/changelog/legacy-changelog/axis.png b/src/content/docs/resources/changelog/legacy-changelog/axis.png similarity index 100% rename from src/docs/changelog/legacy-changelog/axis.png rename to src/content/docs/resources/changelog/legacy-changelog/axis.png diff --git a/src/docs/changelog/legacy-changelog/calendar.png b/src/content/docs/resources/changelog/legacy-changelog/calendar.png similarity index 100% rename from src/docs/changelog/legacy-changelog/calendar.png rename to src/content/docs/resources/changelog/legacy-changelog/calendar.png diff --git a/src/docs/changelog/legacy-changelog/charts.png b/src/content/docs/resources/changelog/legacy-changelog/charts.png similarity index 100% rename from src/docs/changelog/legacy-changelog/charts.png rename to src/content/docs/resources/changelog/legacy-changelog/charts.png diff --git a/src/docs/changelog/legacy-changelog/comments.png b/src/content/docs/resources/changelog/legacy-changelog/comments.png similarity index 100% rename from src/docs/changelog/legacy-changelog/comments.png rename to src/content/docs/resources/changelog/legacy-changelog/comments.png diff --git a/src/docs/changelog/legacy-changelog/comparing.png b/src/content/docs/resources/changelog/legacy-changelog/comparing.png similarity index 100% rename from src/docs/changelog/legacy-changelog/comparing.png rename to src/content/docs/resources/changelog/legacy-changelog/comparing.png diff --git a/src/docs/changelog/legacy-changelog/csv.png b/src/content/docs/resources/changelog/legacy-changelog/csv.png similarity index 100% rename from src/docs/changelog/legacy-changelog/csv.png rename to src/content/docs/resources/changelog/legacy-changelog/csv.png diff --git a/src/docs/changelog/legacy-changelog/explanations.png b/src/content/docs/resources/changelog/legacy-changelog/explanations.png similarity index 100% rename from src/docs/changelog/legacy-changelog/explanations.png rename to src/content/docs/resources/changelog/legacy-changelog/explanations.png diff --git a/src/docs/changelog/legacy-changelog/feed.png b/src/content/docs/resources/changelog/legacy-changelog/feed.png similarity index 100% rename from src/docs/changelog/legacy-changelog/feed.png rename to src/content/docs/resources/changelog/legacy-changelog/feed.png diff --git a/src/docs/changelog/legacy-changelog/fullscreen-chart.png b/src/content/docs/resources/changelog/legacy-changelog/fullscreen-chart.png similarity index 100% rename from src/docs/changelog/legacy-changelog/fullscreen-chart.png rename to src/content/docs/resources/changelog/legacy-changelog/fullscreen-chart.png diff --git a/src/docs/changelog/legacy-changelog/graphs.png b/src/content/docs/resources/changelog/legacy-changelog/graphs.png similarity index 100% rename from src/docs/changelog/legacy-changelog/graphs.png rename to src/content/docs/resources/changelog/legacy-changelog/graphs.png diff --git a/src/docs/changelog/legacy-changelog/header.png b/src/content/docs/resources/changelog/legacy-changelog/header.png similarity index 100% rename from src/docs/changelog/legacy-changelog/header.png rename to src/content/docs/resources/changelog/legacy-changelog/header.png diff --git a/src/docs/changelog/legacy-changelog/how-to-draw.gif b/src/content/docs/resources/changelog/legacy-changelog/how-to-draw.gif similarity index 100% rename from src/docs/changelog/legacy-changelog/how-to-draw.gif rename to src/content/docs/resources/changelog/legacy-changelog/how-to-draw.gif diff --git a/src/docs/changelog/legacy-changelog/icoPrice.png b/src/content/docs/resources/changelog/legacy-changelog/icoPrice.png similarity index 100% rename from src/docs/changelog/legacy-changelog/icoPrice.png rename to src/content/docs/resources/changelog/legacy-changelog/icoPrice.png diff --git a/src/content/docs/resources/changelog/legacy-changelog/index.mdx b/src/content/docs/resources/changelog/legacy-changelog/index.mdx new file mode 100644 index 000000000..f182f4749 --- /dev/null +++ b/src/content/docs/resources/changelog/legacy-changelog/index.mdx @@ -0,0 +1,1368 @@ +--- +title: Legacy Development changelog +description: Keep track of development updates, new product features and other items from our changelog +author: Santiment Team +datePublished: 2022-04-20 +dateModified: 2024-02-27 +sidebar: + label: Legacy Changelog + order: 30 +--- + +Keep track of development updates, new product features and other items from our changelog. +We update this page every two weeks or more frequently. + +## February 2024 + +**General** + +- The winners of the New Year Campaign had a chance to learn alpha in private calls with Santiment founder and market analysts. +- Affiliate program is relaunched, [https://medium.com/santiment/santiment-is-proud-to-announce-the-relaunch-of-our-referral-program-now-with-increased-commission-e8b7feb5606c](https://medium.com/santiment/santiment-is-proud-to-announce-the-relaunch-of-our-referral-program-now-with-increased-commission-e8b7feb5606c) +- BTC ETF volumes dashboard is live, [https://queries.santiment.net/dashboard/etf-volumes-728](https://queries.santiment.net/dashboard/etf-volumes-728) +- Gini Index and Annual Inflation Rate dashboard is live, [https://queries.santiment.net/dashboard/gini-index-and-annual-inflation-rate-738](https://queries.santiment.net/dashboard/gini-index-and-annual-inflation-rate-738) +- Santiment daily metrics framework gets 10x faster. +- BNB-chain-based tokens data pipeline is fixed, Santiment is providing BNB chain data again. Limitations apply. +- Santiment Feed expands to Google News: [https://news.google.com/publications/CAAqBwgKMNLDqQww5MO2BA?ceid=US:en&oc=3&hl=en-US&gl=US](https://news.google.com/publications/CAAqBwgKMNLDqQww5MO2BA?ceid=US:en&oc=3&hl=en-US&gl=US) +- Active SanR validator nodes count increased to 30, [https://nodes.sanr.network/](https://nodes.sanr.network/) +- An application for creating manual signals for buying and selling, SanR, has been upgraded to a completely new version. SanR v2 is live on [https://sanr.app/battle/](https://sanr.app/battle/) + +**New assets** + +- On Arbitrum: KUJI, SPA, XAI. +- On Avalanche: COQ, HEC. +- On BNB Chain: AI, BABYBONK, ELDA, GTAI, KICKS, MF, NFP, OFN, PALM, SQR, TLC. +- On Ethereum: ALT, BANANA, BBANK, BEAM, BOTTO, CAH, CHEQ, DEL, DMTR, FLIP, GHX, IMPT, KUJI, LMWR, MAVIA, MEME, ML, OGV, ONDO, OVR, PAAL, PEPE2.0, POL, PORK, SAVM, SHRAP, STFX, TET, TLOS, TOKEN, TRVL, VIC, ZKB. +- On Polygon: ASK, CPR, FAR, FYN, KASTA, WIFI. +- Other: 1000SATS, AFC, ANALOS, CETUS, CLEG, DYM, ERG, EXFI, FEVR, FLIX, GMMT, GRUM, IOT, ISLM, JOY, JTO, JUP, KLEVA, KMA, KYVE, LING, MANTA, MNDE, MOBILE, MPLX, MYRO, NAP, OMAX, PROP, PYTH, PZP, SEI, SILLY, SSWP, STIK, TRA, UX, WEN, WIF, WLKN, ZETA. + +## December 2023 + +**Sanbase** + +- The explorer page now has more advanced filtering capabilities, including recently viewed items, likes, and your own creations. +- The feed can be filtered by the projects you specify +- A more comprehensive explorer page, backed by robust filtering options, is now fully supported on our mobile version. +- We are constantly looking to enhance our analytics. We invite you to suggest a Twitter account at [https://app.santiment.net/social-trends](https://app.santiment.net/social-trends) +- Our updated Social Trends feature now includes an AI-generated summary of a chosen trend. +- Additional Social Trends updates include Trending Tokens and Alpha Narratives +- We have added support for Apple Pay and Google Pay +- The issue with the profile picture upload has been fixed + +**Charts** + +- We have expanded the metrics interval setting by adding more intervals +- We have added these new chart metrics: Total Supply in profit, Percent of Total Supply in profit, RSI 4h, RSI 1d, and RSI 7d + +**New assets** + +- On Arbitrum: arb-arbdoge-ai, arb-frax, arb-magic-internet-money, arb-pendle +- On BNB Chain: bnb-asta, bnb-binance-idr, bnb-cyberconnect, bnb-first-digital-usd, bnb-planettoken, bnb-tokpie, bnb-altura, bnb-avalanche, bnb-benft-solutions, bnb-chaingpt, bnb-cheelee, Bnb-open-campus, bnb-floki-inu, bnb-frax, bnb-hello-labs, bnb-lovely-inu, bnb-magic-internet-money, bnb-milc-platform, bnb-paxos-standard, bnb-strikecoin, bnb-trueusd, bnb-usdd +- On Ethereum: katana-inu, gho, lootbot, moonbot, paypal-usd, wagie-bot, turbo, grok-erc, symbiosis-finance, leisuremeta, across-protocol, propchain, wagmi-game-2, cere-network, crustnetwork, cyberconnect, elysia, planettoken, echelon-prime, pointpay, radworks, harrypotterobamapacman8inu, maverick-protocol, mantle, pendle, quiztok, rollbit-coin, render, stader, unibot-eth, worldcoin-org, mongcoin, 0x0-ai-ai-smart-contract, adreward, arkham, airtor-protocol, bad-idea-ai, harrypotterobamasonic10inu-eth, combo-network, crvusd, coinweb, dacxi, dione-protocol, first-digital-usd, hippocrat, l, milady-meme-coin, lybra-finance, doge-killer, smardex, shib-original-vision, tamadoge, wall-street-bet, delysium, akita-inu, ava, big-time, dora-factory-new, fasttoken, havah, izumi-finance, myria, rektcoin, wall-street-memes +- On Optimism: o-cyberconnect, o-frax, o-worldcoin-org, o-kwenta +- On Polygon: p-orbcity, p-binance-usd, p-frax, p-dust-protocol, p-nakamoto-games, p-sportx, p-dimo, p-rebel-bots, p-carrieverse +- On Avalanche: a-binance-usd, a-multi-collateral-dai, a-frax, a-magic-internet-money, a-trueusd, a-usd-coin, a-tether +- Other: statter-network, pip, gari, defi-kingdoms, access-protocol, as-roma-fan-token, atletico-de-madrid-fan-token, galatasaray-fan-token, gleec, bald, bricks, lukso-network, moon, xdc-network, alex-lab, aleph-zero, dynex, neon, cannation, finschia, memetic, onomy-protocol, neutron-ntrn, ordinals, oxbt, planetwatch, snek, sui, alephium, bonk1, comtech-gold, evadore, superwalk, indigo-protocol, inter-milan-fan-token, minswap, ordi, roa-core, celestia + +## April 2022 + +`06.04.22 - 20.04.22` + +**Sanbase** + +- New assets: ATOLO, INSUR, MV, SENATE, STANDARD, STG, WMT, XCN, XDEFI +- Fix creating alerts from Watchlists / Screeners / Charts / Balance pages + +**Alerts** + +- Update Alert’s Explore page +- Update Alert’s Preview +- Alert’s matching metrics conditions fix +- Update alert’s notification flow + +**Charts** + +- Main selector supports chain addresses +- Add recently shown assets +- 2 new metrics: Contract Interacting Addreses, Contract Transactions Count + +Last 2 weeks we made many fixes for our Alerts. Our Alerts notifications and preview work better now. + +🎉🎉🎉 Finally We have added new selector for our Charts tool. You can remember our Charts as a great analytics tool for ERC20 or many other type of assets, but now it’s much advanced tool. You can do a research of any chain addresses on supported blockchains In the closed future we will add social metrics for some type of smart contracts like erc721. + +Example: + +1. [https://app.santiment.net/s/rk-8It-D](https://app.santiment.net/s/rk-8It-D) (BoredApeYachtClub (BAYC) Contract) + +You can see 2 available metrics: + +- Contract Interecting Addresses +- Contract Transactions Count + +Actually it’s not only for contract, it works for any address. +I am really appreciate any feedback. +Disclaimer new 2 metrics for our addresses have slow performance. +Loaded time can be up to 1 minute. Sorry. + +### `30.03.22 - 6.04.22` + +**Sanbase** + +- New assets: ALI, FRTS, GENE, TT, ZIG +- New TopBar added to Watchlists / Screeners / Addresses +- Add comments and likes to Watchlists / Screeners / Addresses +- Fix Alert’s creating issues +- Fix treemap chart issues + +**Charts** + +- Embedded chart live preview +- Embedded chart shared data access + +**Academy** + +- Update cookies preferences +- Add Alerts use cases + +![Embed chart dialog](https://user-images.githubusercontent.com/25135650/162019025-e3aecb38-c1cb-4abc-a281-4e45084c8894.jpg) + +## March 2022 + +**Sanbase** + +- New assets: 1ECO, ALPINE, GMT, LAZIO, MCONTENT, THG, TREEB, XFL, WTRX, APE, HI, RPG, POLC +- Alert creation bug fixed +- Add Cardano Onchain Metrics ([https://app.santiment.net/s/eIzhNOf6](https://app.santiment.net/s/eIzhNOf6)) + +**Charts** + +- Combined metrics section in the sidebar +- “Top Transaction Table” sorting fixed +- “Smoothing” sharing fixed +- Fullscreen-freeze bug fixed +- Asset’s market cap and rank info in the top header +- New master asset selector +- New metrics: + - Daily On-Chain Transaction Volume in Profit + - Daily On-Chain Transaction Volume in Loss + - The Ratio of Daily On-Chain Transaction Volume in Profit to Loss + [/metrics/transaction-volume-in-profit-or-loss](/metrics/transaction-volume-in-profit-or-loss) +- Add Master selector blockchains’ filter +- Ctrl+K (Cmd+K) shortcut for opening master selector + +**Insights/Charts** + +- Performance improvements +- New comments features: + - Bold, italic, links + - Type \$ for assets suggestions + - Type @ to mention an user + - Type # to link a trend + +**Screeners/Watchlists** + +- New Screener's Filters: Mvrv 7d, 60d, 90d +- You can like and comment any public watchlist or screener. One more step for our community. + +## February 2022 + +**Sanbase** + +- New assets added: ASTR, CCX, WRLD, XCAD +- User info added to profile dropdown +- Create alert bug fixed +- Profile page fixed +- Watchlist Addresses bugs fix +- Updated Cookies policy dialog +- Follow/Unfollow inside profile page bug fixed +- NEW Metric on Sanbase - Social Volume AI. + +**Charts** + +- Fix empty data issue when Exchanges 2.0 metrics were combined +- Combined metrics’ project locking fix +- Open Edit/Save dialog by clicking on the layout name in the header +- Displaying amount of available metrics + +We exited to announce our new social metric - Social Volume AI. This metric is alternative to Social Volume. For old metric we have a simple algorythm to detect an asset per message. New metric computed using Natural Language Processing (NLP) technique such as Named Entity Recognition (NER). Our trained NER model can process large amount of social data and extract from it mentions about crypto assets. +Look at [https://app.santiment.net/s/0UQIX6NU](this metric) + +## December 2021 and January 2022 + +**Sanbase** + +- New assets: APX, BTT, CBK, CUBE, DESO, DG, DOBO, FORM, GF, GFI, GLMR, HERO, HOO, HYDRA, ISP, KILT, LOOKS, MAGIC, ONUS, OOKI, OUSD, POSI, RISE, SHILL, SIDUS, SOS, THN, YIME, TONCOIN, VADER, VOXEL, VR, ZUM +- Updated Create chart layout link +- NFT metrics (NFT Harbor) +- added on-chain data for Dogecoin DOGE + +**Watchlist** + +- "Copy", "Save as", "Clear all" action buttons added to Watchlists + +**Alerts** + +- New Fresh UI of Alerts Master 🤡 +- Updated Share modal for alerts +- Updated notifications channels. You can set up any public channel as a notification source. +- Added new type selector for alert modal +- Added asset categories tabs +- Added ability to create Social trends alert with any word +- Fixed Social trends alert creation +- Fixed creating different types of alert +- Fixed Edit button on a signal card +- Fixed signal card title when a user is not logged in + +**Academy** + +- Navigation from Academy to Sanbase become better. + +## November 2021 + +### `17.11.21 - 26.11.21` + +**Watchlist** + +- Quick action `delete` button with `undo` added. +- `Save as` menu item changed to `Duplicate` with new icon (Also in `Screener`) + +**Sanbase** + +- New assets: ASM, BANANA, BLCT, BSW,, CUSD, DDX, DERC, DOGEDASH, EURT, HAI, KAR, LGCY, METIS, MPL, NFT, PLSPAD, SFUND, SGB, SHFT, SNL, SPS, SSV, SSX, TKING, USDX, WHALE, WNCG, XSGD +- Nightmode styles fixes + +**Alerts** + +- Fixed some bugs on Alerts page + +**Charts** + +- Add Layout comments +- Charts header tool bar is updated. We make it more compact + +### `10.11.21 - 17.11.21` + +**Sanbase** + +- New assets: ALT, BLOK, BNX, DAR, DPR, DVI, GAFI, IMX, KLV, LAT, LN, MC, OOE, PEAK, PSP, RMRK, RVP, SAFE, SAMO, SAPP, SPH, STARL, SUN, TABOO, TOKE, WILD +- Main navigation items resorted, "Signals" and "Explore screeners" moved (internal update) + +**Screener** + +- Add one more filter option - Weighted Sentiment (Total) +- Bar chart, X-axis label position centered + +**Charts** + +- New sidebar open/close toggle +- `Insights` category +- All derivative metrics made public + +## October 2021 + +### `14.10.21 - 10.11.21` + +**Sanbase** + +- New assets: AI, ARV, ATLAS, BETA, BRY, BTRST, CFG, CFI, CIRUS, DHV, DOE, ENS, FLUX, FONT, GODS, HERO, JOE, KLIMA, LSS, MIM, PDEX, PHB, POLIS, PYR, QRDO, RACA, RBC, SDN, TFL, WEMIX, XIO +- Fixed Screener performance issues +- Fixed 404/Broken pages +- Fixed Charts small bugs +- Added new metric Santiment + +**Weighted Sentiment Total** + +(eg.[https://app.santiment.net/s/lE6Y9IjH](https://app.santiment.net/s/lE6Y9IjH)) + +- Added more derivatives! New FTX Funding Rate (Available for _beta_) + +### `07.10.21 - 13.10.21` + +**Sanbase** + +- New assets: DORA, NWC, KOK, IF, RBN, YLD + +**Insights** + +- Embedding charts in the article + +## September 2021 + +### `30.09.21 - 06.10.21` + +**Charts** + +- Sticky notes + +**Insights** + +- Make better search experience +- Add new Search Results Page + +**Sanbase** + +- Fresh Home page + +### `23.09.21 - 29.09.21` + +**Charts** + +- Adding emojis to chart; +- Drawings' visibility toggle + +### `16.09.21 - 22.09.21` + +**Sanbase** + +- New assets: DAFI, PPAY, YGG, RAZE, ZLW, LUSD, FAB, XCH, XPRT + +**Charts** + +- `Transacted Coin Acquisition Cost` available for all users +- New bitcoin metrics: `Exchanges v2.0` + +### `09.09.21 - 15.09.21` + +**Sanbase** + +- New assets: DYDX, SENSO, TTT, EGR, YOUC, URUS, ORC, XEC, DFI + +**Charts** + +- Combining project locked metrics +- Metric's axis max/min settings +- Saving `Shared axis` state +- [Beta only] `Spent Coin Cost` histogram on chart + +### `02.09.21 - 08.09.21` + +**Sanbase** + +- New assets: MOBX, O3, PLA, DG, BIT, AGLD, NPX, VEGA, BIFI, MOVR + +**Charts** + +- Layouts stability improvements +- Layout's sidebar items quick actions: `edit` and `Save to my library` +- "Embed chart" available for all users + +### `26.08.21 - 01.09.21` + +**Sanbase** + +- New assets: BIN, SLIM, SLRS, TULIP, MNGO +- Enhanced webinars widget + +**Charts** + +We've enhanced our Charts layout. It is more compact, clean and powerful. + +- Better sidebar's search +- Updated shortcuts dialog with more useful shortcuts +- Sidebar layouts explorer +- "Combine metrics" has passed beta testing, it's available for all users +- "Reapply metric" action in metric's options menu + +## August 2021 + +`19.08.21 - 25.08.21` + +**Sanbase** + +- New assets: FEI, TRIBE, RARE, CHART, JULD + +**Charts** + +- `Average Gas Used in Gwei` metric +- \[Beta only\] Embed chart + ![](https://user-images.githubusercontent.com/24521041/131119924-412b0f73-7d0f-4c79-bbad-78815aae9a45.gif) +- \[Beta only\] `Binance Exchange Funding Rates (USDT)`, `Binance Exchange Funding Rates (BUSD)` metrics + +`12.08.21 - 18.08.21` + +**Charts** + +- `Top holders` setting for `Supply held by … addresses` metrics +- Highlighting metric with opened settings + +`05.08.21 - 11.08.21` + +**Sanbase** + +- New assets: PIPT, HYVE, GMEE, GALA, CGG, CLV, EFI, FCL, FEAR, C98 + +**Charts** + +#### Combined metrics + +\[Beta only\] +![](https://user-images.githubusercontent.com/24521041/131119917-cd8c36d0-bc47-49d5-9f9a-db758f23c340.gif) + +- `My chart layouts` sorted by the edit date + +`29.07.21 - 04.08.21` + +Migrated [neuro.santiment.net](https://neuro.santiment.net) —> [api.santiment.net](https://api.santiment.net) + +**Sanbase** + +- Screener: enhance ALL/ANY combinators in filters + +**Charts** + +- Stability improvements +- Closing fullscreen chart with the `Esc` key +- Supply distribution merged metrics' compact labels +- `Active Addresses` values' domain adjusted + +## July 2021 + +`14.07.21 - 28.07.21` + +**Sanbase** + +- New assets: SKILL, STEP, FOX, MVI, WSG, DPET, MIST, ALPACA +- Exchanges filter in Screener: `ANY` selector by default +- `Explore address watchlists` category in watchlists navigation dropdown + +**Sanbase Charts** + +- Offsetting tooltip position when it blocks the hovered area +- Displaying values' difference in tooltip when selecting area and holding Shift key + ![](https://user-images.githubusercontent.com/24521041/127341368-602cd1cb-c9e1-4e7e-81ad-c3d93002c01d.gif) + +`07.07.21 - 14.07.21` + +**Sanbase** + +- New assets: DAWN, TOTM, DEXE, ILV +- Exchange filter in Screener + +**Sanbase Charts** + +- Updated mapview UI +- Increased granularity for Active Deposits, Deposit Transactions, Withdrawal Transactions metrics +- New metric: Active Withdrawals +- Positive/Negative Bars style option for BitMEX Perpetual Contract Funding Rate metric +- “Recent Chart Layouts" bug fix + +`30.06.21 - 07.07.21` + +**Sanbase** + +- Labels for sender/receiver in Latest transactions and Top transactions table in Wallet Balance tool +- Live This Week In Crypto Widget + +**Sanbase Charts** + +- Automatic short/live links +- Supporting drawings in the downloaded png +- "Project in Trends" signal as a subitem of the "Social Volume" metric (for non BTC/ETH assets) +- Candles' width fix + +## June 2021 + +`23.06.21 - 30.06.21` + +**Sanbase** + +- New assets: MINA, CQT, SLP, PNY, TIME, RNO, NDX +- Update webinars section +- Fix ATH signals +- Notifications & Profile Page UI improvements + +**Sanbase Charts** + +- Undoing changes by pressing CMD/CTRL + Z +- Redoing changes by pressing CMD/CTRL + SHIFT + Z + ![](https://user-images.githubusercontent.com/24521041/127341515-a57498b0-6dcb-4dc1-85a6-a3e2214edd8c.gif) +- Supply Distribution labeled by number of addresses widget + ![](https://user-images.githubusercontent.com/24521041/127335518-d2116a4a-62d1-4452-a818-6be52e2bc7db.png) + +`16.06.21 - 23.06.21` + +**Sanbase** + +- Fix trx hash link in Recent transactions +- Add Top transactions table to the Wallet Address Tool + ![](https://user-images.githubusercontent.com/24521041/123233913-25b1b500-d4e3-11eb-9ed2-49aaef15f9a7.png) + +**Sanbase Charts** + +- Color picker HEX input +- Smoothing setting for all Social metrics; +- MVRV USD intraday renamed to MVRV Ratio Intraday + +`09.06.21 - 16.06.21` + +**Sanbase** + +- Home page UI improvements + +**Sanbase Charts** + +- New color picker +- "Weighted sentiment" metrics' smoothing +- “Download as PNG” button in chart's controls bar + +`02.06.2021 - 09.06.2021` + +**Sanbase** + +- New coins: GTC, ATA, CVX, HAPI +- Support datetime on Social Trends Page: [/labs/trends?datetime=2021-06-04T12:04:21Z](https://app.santiment.net/labs/trends?datetime=2021-06-04T12:04:21Z) + +**Sanbase Charts** + +- Stability improvements +- "Stablecoins" asset + ![](https://media.giphy.com/media/XTX186r2ZeQkUBNcfk/source.gif) +- "Keyboard Shortcuts" panel + ![](https://user-images.githubusercontent.com/24521041/123233337-a8864000-d4e2-11eb-8e06-a8b9165c5687.png) +- Metric's loading indicator +- "Presenter mode" for a clean chart view + ![](https://media.giphy.com/media/zF9cLlvalQWkrvCDku/source.gif) +- Labelling metrics with tickers in downloaded PNG +- "Supply Distribution" merged metrics’ MA indicators support +- \[Beta only\] Reordering chart’s metrics by using drag and drop + ![](https://media.giphy.com/media/uoy6WD4LIvjCVMzNUo/source.gif) + +`26.05.2021 - 02.06.2021` + +**Sanbase** + +- New coins: BRG, WEST, CSPR, LOWB, TRU, UNCX, RAY, ID, TRIAS +- New Sessions control panel [https://app.santiment.net/account#sessions](https://app-stage.santiment.net/account#sessions) +- Add Shared axis toggle on Social Tool page +- Add `Social tool` and `Social Trends` to the Navigation → Dashboards +- `Notifications` dropdown in header + ![image](https://user-images.githubusercontent.com/522287/120511618-3d5db800-c3d3-11eb-9f02-968fa4277de1.png) + +**Screener** + +Add new filter option -`Rank` +![Untitled-2](https://user-images.githubusercontent.com/522287/120509618-582f2d00-c3d1-11eb-8644-e4736512c015.png) + +**Charts** + +- Notable metrics + ![image](https://user-images.githubusercontent.com/522287/120517024-a85dbd80-c3d8-11eb-8440-74264108008c.png) +- Auto-update toggle + ![image](https://user-images.githubusercontent.com/522287/120516795-6af93000-c3d8-11eb-9148-729ebce8360f.png) +- “Holdings on the top exchanges" widget +- Searching metrics by group name + ![image](https://user-images.githubusercontent.com/522287/120516208-c840b180-c3d7-11eb-8dc0-f32ffcbee3ae.png) +- New metrics: “Circulation NVT”, “Percent of Stablecoin Total Supply held by Whales with more than 5 million USD” +- Normalizing “'MVRV USD intraday” values +- **Fix:** preserving metric’s settings after un/lock + +**Sanbase Mobile** + +- Add recently used metrics + ![image](https://user-images.githubusercontent.com/522287/120517317-01c5ec80-c3d9-11eb-8182-be12eb48968a.png) + +## May 2021 + +`19.05.2021 - 26.05.2021` + +**Sanbase** + +Introducing **Charts v3** 📈👋 + +- Better performance +- Displaying search suggestions in the sidebar +- Mark metric as a favorite directly in the sidebar +- Metrics’ compact layout +- Quick settings access by clicking on the metric + ![](https://media.giphy.com/media/2cQiNEFfdy4tIKztHf/source.gif) + ![](https://media.giphy.com/media/PJFgKCfAuH1U6GBhjP/source.gif) + +`12.05.2021 - 19.05.2021` + +**Sanbase** + +- Fix historical balance page crash from top claimers table +- Fix watchlist & screener loader for anon user +- Fix stories crash on mobile app +- Minor changes of Keystakeholder Signals +- 2 more mini charts on Screener/Watchlists 1d/30d Price Changes + ![image](https://user-images.githubusercontent.com/522287/118840637-424d4280-b8d0-11eb-8668-398f2bd8d476.png) + +`28.04.2021 - 12.05.2021` + +**Sanbase** + +- New coins: NFY, BOSON, ICE, MIST, MTHD, SMTY, SAKE, URQA, MOB, BAKE, SPORE + +## April 2021 + +`21.04 - 28.04` + +**Sanbase** + +- New coins: DOGEFI, FORTH, KISHU, XEND, ELON, OHM, OMI +- Home page: updated recents block, conversations feed. +- Signals in widget 'Key Stakeholder Signals' are sorted by marketcap. + +**Hunters** + +**_Welcome to our new DApp [https://hunters.santiment.net](https://hunters.santiment.net) _** + +What is Hunters app? -> [https://www.notion.so/santiment/Introducing-Wallet-Hunters-A-decentralized-platform-for-crowdsourced-market-intelligence-777586562ced436682125816eb206c63](https://www.notion.so/santiment/Introducing-Wallet-Hunters-A-decentralized-platform-for-crowdsourced-market-intelligence-777586562ced436682125816eb206c63) + +How distribution reward works? -> [https://www.notion.so/santiment/WalletHunters-Reward-Distribution-14c7ad8f39684024970814fa051631a7](https://www.notion.so/santiment/WalletHunters-Reward-Distribution-14c7ad8f39684024970814fa051631a7) + +--- + +Hunters App is **BETA**. When you are trying the SAN hunters app that you agree with BETA behavior. Some of the features can work with bugs, lags or some of them can be changed completely in the Release version. + +`14.04 - 21.04` +Sanbase + +- New coins: K21, TLM, EPNS, VISR, SRK, GS, ZCX +- New header navigation +- Home page “Conversations” widget +- Top Holders Table: “Part of Total” values as percentages +- Screener: Allowing to save the whole table as a .csv +- Charts: Loading and performance optimizations for big chart layouts +- Charts: Adjusted "Weighted Sentiment" metrics' auto-interval +- Fix: Watchlist links "/assets/all" & "/assets/erc20” +- Fix: Screener column save +- Fix: Alerts bugfixes for some metrics/watchlists + +`07.04 - 14.04` +Sanbase + +- New coins: CFX, MDX, TKO, SHOPX, RAGE, BLANK, AIOZ, 10SET, NFTX, LQTY, KTN +- Address watchlist: More assets columns in table, Asset distribution column + ![image](https://user-images.githubusercontent.com/24521041/115566326-d1ac0980-a2c2-11eb-8828-5ed2ac9f5bb6.png) +- Add [Key Stakeholder Signals](https://app.santiment.net/#stakeholders) widget + ![image](https://user-images.githubusercontent.com/24521041/115566435-e9838d80-a2c2-11eb-9ede-571f368c0770.png) +- Update 'Quick start guide' +- Move metrics from beta state (labeled holders widget is still in beta) +- Fix trial subscription status +- Fix labels on Historical balance tool +- Fix 1d resolution on mobile charts + +`31.03 - 07.04` + +Sanbase + +- New coins added: EPS, ATD, FMG, USDF, TIDAL, RAMP, QIUCK, CONV, POLK, MARSH, CELL, FST, STN, BLES, GLQ +- Screener new filters and columns: Network Realized Profit/Loss, Whale transaction count +- Fix bug for empty watchlist screen, update infographics after screener filter changes +- Add labeled holders widget(for ETH/ERC20) +- Alerts: Add more metrics + +## March 2021 + +`24.03 - 31.03` + +Sanbase + +- New coins added: STR, L3P, KONO, PKF, COVER, BAMBOO, PROPS, VRA, BANK, NFT, ERN, KLAY +- New in Watchlists: dynamic columns (as in screener), server-side pagination, horizontal scroll +- Increased speed of 'eth spent overview' table ('Key stats' tab on ETH chart page) +- Address watchlist: fixed bug with dublicates in addresses +- Add table 'Top Holders' table +- Add metrics 'whale_transaction_count_100k_usd_to_inf' and 'whale_transaction_count_1m_usd_to_inf' +- Add anchor(link) for sheets templates on home page [https://app.santiment.net/#san-sheets](https://app.santiment.net/#san-sheets) + +`17.03 - 24.03` + +Sanbase + +- 'Fees Distribution' in metrics sidebar for Ethereum +- You can save notes for any addresses in your watchlists. Addresses watchlist table: 'Notes' column, horizontal scroll +- Charts: Price metric new visualisation type – [Candles](https://app.santiment.net/s/YCt8Wk0R) + ![image](https://user-images.githubusercontent.com/24521041/115565626-32871200-a2c2-11eb-8c05-305d81786870.png) + +`10.03 - 17.03` + +Sanbase + +- Social: show social volume for last day, fix asset's detection +- Screener: 'Explore watchlists' category as new Screener's entry point +- Charts: update the structure of metrics tree +- DEXes dashboard: chart shows price of selected asset +- Historical Balance: "Assets USD distribution" and "Current balance" widgets + +`03.03 - 10.03` + +Sanbase + +- Add `BTC/ETH` infographics in screener +- `Create alert` button in feed +- Move `Edit assets/Addresses` to table header +- Open watchlist after creation +- User's favorite chart metrics category +- Axis values readability improved + +`25.02 - 03.03` + +Sanbase + +- Add sharing link for cabinet section: [https://app.santiment.net/#cabinet](https://app.santiment.net/#cabinet) +- Reset 'Error' view on page change +- Add metric 'mvrv_usd_z_score' +- Chart's stability improved + +SanSheets + +- Added a new function for marketcap (`SAN_MARKETCAP`) which uses the `marketcap_` getMetric metric + +## February 2021 + +`17.02 - 24.02` + +Sanbase + +- Add metric: Whale Transaction Count + Number of Transactions Transferring More Than 100k USD +- 'Explore screeners' category in Navigation Header Dropdown +- Charts + - Metrics’ stability improved + - Customizable axes + - New auto-hide/lock sidebar flow +- Bugfixes + - Alerts with wrong settings + - Infographics loading on screener + +SanSheets + +- Social volume metric: Add twitter as a source, add TOTAL source + +`11.02 - 17.02` + +Sanbase + +- Alerts: + - Absolute/percent settings for wallet's alert + - LTC/BCH/XRP addresses in wallet's tracker +- Screener: Enhance share popup, horizontal scroll for big tables +- Beta: Dashboard "ETH Token Trading Analysis" + +`04.02 - 10.02` + +SanSheets + +- SAN_PRICES will be deprecated in the future +- New functions: SAN_PRICE_VOLUME, SAN_PRICE + +Sanbase + +- Alerts has new available metrics: + - Holders distributions + - Whale transaction count + - Bitmex + - Mean age + - Mean dollar invested age + - NVT + - Withdrawal transactions + +- Home page: Show percent changes for recent watchlists/screeners +- Screener: reorder columms ability, saving table sorting, fix flow metrics names + +`27.01 - 03.02` + +Sanbase + +- Add zero step app's new version upgrade +- Add new ETH 2.0 ROI widget +- New category "addresses" in "My watchlists" +- Drag and drop chart rearrangement in the Mapview +- Allowing to draw on chart for non-beta users + +Screener: + +- 200+ new columns (all metrics that supported in filter) +- Fix "Circulation 180 \$" filter + percent filter for that + +## January 2021 + +`20.01 - 27.01` + +- Historical balance: New Money Flow chart +- Mobile & Tablet & Laptop styles many fixes +- Bug fix: dashboard's charts + +`14.01 - 20.01` + +**Sanbase** + +Charts & Dashboards + +- New metric "MVRV USD intraday" +- New dashboard [Ethereum 2.0 Staking Analytics](https://app.santiment.net/eth2) +- Custom interval selector for dashboard charts + +Screener & Watchlists + +- "Newest first" my watchlists & screeners sorting in navigation dropdown +- Screener table loading improvements: server-side pagination and sorting +- /watchlists and /assets pages stability improved +- Watchlists and Screener pages SEO links + +Santrends + +- Trends table stability improved + +Fixes + +- Metamask login +- Dashboards: mobile & tablet versions improvements + +`24.12 - 13.01` + +**Sanbase** + +Alerts + +- Add MVRV metrics +- Add Network Profit Loss + +Screener + +- Autorefresh toggle in Screener and Watchlist table +- Bug fix: Correct sorting for percent columns in Screener + +- Bug fix: Social_active_users, miners_balance metrics +- Bug fix: Chart Layout with empty title(?) +- Bug fix: Checkout form night mode styles +- Bug fix: Show the latest price on social tool + +**Sansheets | Santiment plugin for Google sheets** + +- Add SAN_HOLDERS_DISTRIBUTION (projectSlug, from, to, balance, interval) +- Add SAN_BITMEX_PERPETUAL_CONTRACT_FUNDING_RATE (projectSlug, from, to, interval) +- Add SAN_NETWORK_PROFIT_LOSS (projectSlug, from, to, interval) + +## December 2020 + +`17.12 - 23.12` + +Screener + +- Ability to filter assets through your watchlists + +Santrends + +- New design for trends page/table + +Alerts + +- New metric 'Network profit/loss' + +Account settings + +- Show monthly usage of API calls + +Historical balance + +- Address’ labels, comments and latest transactions +- Recently viewed “Chart layouts” on home page +- Lookup wallets using global search +- Watchlists for addresses + +`10.12 - 16.12` + +New home page for the Sanbase app is here! +Now you can easily navigate to your personal watchlists, screeners, exclusive PRO features and more, directly from our home page. + +Charts: + +- “Exchange Balance” settings added +- Data from Coinbase wallets added to Exchange metrics (Inflow/Outflow/Flow Balance) for ETH and ERC20 projects + +Screener & Watchlists + +- New "save as" button for community watchlists + description field +- Added settings for alert frequency +- Fixed a Firefox bug with small Infographics +- Two-way table scrolling +- Saving indicator in the header + +Historical balance + +- Fixed project infrastructure + +Sanbase + +More data on Santiment +We start tracking Coinbase erc20 wallets. + +Charts + +- Chart layouts stores the color settings +- New MVRV visualisation +- More contrast axes in the night mode +- Assets selector has a new category "DeFi" +- Add Recents Chart Layouts to desktop navigation dropdown + +## November 2020 + +Sanbase + +- Added 'sign in with Google' option +- New topics added to Social Trends widgets on the home page +- Watchlist & Screener | 'Recent' category added to desktop navigation dropdown + +Charts + +- Draw straight lines on the chart by holding “Shift” while using the draw tool +- Fixed the “Spent Coin Cost” widget + +Mobile + +- Watchlists & Screener | Added a mini price chart next to each asset, supports 24h, 7d and 30d range + +--- + +Charts + +- Allowing to draw on charts for beta users +- Cursor mode toggle +- New share flow + +![](./how-to-draw.gif) + +--- + +Charts: + +- New metrics: average/median fees (only for ethereum) +- Small fixes + +--- + +Sanbase has a New Plan! This Plan is the perfect for **Crypto Lords**! + +What's inside? + +- All in PRO and +- Dedicated account manager +- Basic API 300k API calls +- Closed Webinars with Santiment Analytics +- Closed chat with Santiment market analysts +- Custom education & onboarding + +--- + +Watchlist & Screener page: + +- Rename & save as actions +- Copy assets to watchlist & save as watchlist table actions +- Price graph 7 days column +- Infographics available for watchlists. +- Screener has new one infographic: Volume and Marketcap +- Screener has a new 'Age consumed' filter + +Charts: + +- Labelling all metrics with a project’s ticker +- Select project’s metrics for comparison in a sidebar +- New Metric 'Dev. Activity Contributors Count' + +Sanbase: + +- Historical balance/Alerts now has support BTC/LTC and other wallets +- Uni Dashboard New Navigation and charts +- Add help&feedback button + +Fixes: + +- Fixed responsive mode of home page + +--- + +- Charts | Allowing to change metric’s style +- Charts | Moving Average indicators for bar metrics +- Charts | Supporting BTC addresses in Top Transactions Table +- Watchlist | Full-width layout +- Screener | Outside percent filter +- “BTC locked on ETH” dashboard + +## October 2020 + +- Account Settings | Limit of notification per day setting; +- Historical Balance | Performance and loading speed improved; +- Stablecoins Dashboard | Exchange inflow/outflow chart added; +- Uniswap Dashboard | 30d period setting for the Top claimers table; +- Stablecoins and Uniswap Dashboard | Top exchanges table added; +- Charts | Moving average indicators for line metrics; +- Charts | Displaying MVRV as % +- Charts and Screener | Supporting short URL sharing +- Charts | Studio’s chart performance improved +- Charts | Displaying MVRV timebounds as % +- Charts | Correctly displaying alerts on different scales +- Charts | Unlocked cursor when holding “Alt” +- Charts | Add metric Dormant Circulation +- Insights | (For authors) Manual selection of minichart’s project +- Dashboards | Add 'Sushiswap' to DEXs list on DEX dashboard, add 'ctrl+click' for metrics for dashboards charts +- Insights and Sanbase | Fresh insight's card design and likes logic +- Screener | Optimize loading data for infographics +- Alerts | Add mvrv 365d/180d metrics support +- Halloween event is coming +- Fees distribution: Ability to see distribution for selected day +- Top holders on exchanges: More readable balances +- Bug fixes. + +## September 2020 + +- New Uniswap Dashboard +- Uniswap Dashboard | Date selection for the “UNI Flow Balances” widget; +- Uniswap Dashboard | Update top claimers table: transaction volume inflow/outflow; +- Several app bug fixes. +- New global search. Simultaneous lookup for assets, trending words, insights and popular users +- Move all metrics from API Custom plan to Pro +- Add BTC top transactions table +- New metric SAN_ACTIVE_ADDRESSES_24H available for SanSheets +- Charts | “Top Token Transactions” table now supports BTC; +- Charts | “Price DAA Divergence” and “Adjusted Price DAA Divergence” widgets (available only for beta users); +- Charts | Supporting negative bars visualization (e.g. Price DAA Divergence) +- Charts | Add more labels for transactions table(this table also works for BTC) +- Charts | Add new Active Addresses 1h & 24h metrics +- Charts | MVRV is displayed using a gradient line +- Charts | “Exchange Inflow/Outflow” metrics’ exchange setting now has exchanges divided into 2 categories: CEX and DEX +- Charts | Add Dex Volume and Trade Amount metrics +- Charts | Add new Price-DAA Divergence metrics: `price_daa_divergence`, `adjusted_price_daa_divergence` +- Charts | Search submetrics(Twitter Followers 24h, Socail active users, etc) in metrics search, +- Charts | New metric Social Active Users +- Charts | "Exchange Inflow" and "Exchange Outflow", You can choose specific exchange +- Charts | More sanfam users added to the “Sanfam Insights” +- Charts | Chart performance improved +- Charts | Supply Distribution Combined Balance widget +- Charts | Supply Distribution percentage metric’s label and value are appended with the ‘%’ sign +- Screener | New filter category `Flow metrics` with 34 new filters; +- Screener | Fix some problems of "Compare" +- Screener | New metrics: Social volume %, Mean dollar inv. age (only %), Circulation (180d) in USD, Exchange inflow in USD, Exchange outflow in USD, Supply on Exchanges (as % of total supply) +- Screener | Search input for Market Segments filter +- Screener & Watchlists | New "compare" feature, which makes life easier to compare assets from your list +- Screener | UX improvement | Open operator by default (when add a new filter) +- Screener | Screener tab in the main navigation +- Screener | Add change metrics for Social Volume, Sentiment and Social Dominance +- Screener | 3 new filters: inside channel, outside channel, inside % channel +- Screener | Pro popup +- Screener | Search for metrics in filter +- Screener | Toggle "Only active filters" +- Screener | Changes in ui +- Screener | Various fixes around screener signals +- Alerts | Fix the master of the historical balance alert +- Add navigation on Stablecoins Dashboard +- Stablecoin Dashboard - the Stablecoin Hub - [https://app.santiment.net/stablecoins](https://app.santiment.net/stablecoins) +- API performance optimizations. Fixed issue in available metrics caching which will prevent API performance degradation over time. +- Add new labeled balance and flow metrics: + Ex. Eth & Uniswap - [https://tinyurl.com/y5zrc4lp](https://tinyurl.com/y5zrc4lp) + Social Active Users metric - [https://tinyurl.com/yyycjjcg](https://tinyurl.com/yyycjjcg) + +``` + "miners_balance", + "genesis_balance", + "dex_trader_balance", + "defi_balance", + "dex_balance", + "cex_balance", + "withdrawal_balance", + "deposit_balance", + "proxy_balance", + "whale_balance", + "makerdao_bite_keeper_balance", + "makerdao_cdp_owner_balance", + "proxy_balance", + "miners_to_exchanges_flow", + "exchanges_to_miners_flow", + "miners_exchange_balance", + "whales_to_exchanges_flow", + "exchanges_to_whales_flow", + "whales_exchange_balance", + "dex_traders_to_exchanges_flow", + "exchanges_to_dex_traders_flow", + "dex_traders_exchange_balance", + "defi_to_exchanges_flow", + "exchanges_to_defi_flow", + "defi_exchange_balance", + "dex_traders_to_dexes_flow", + "dexes_to_dex_traders_flow", + "dex_traders_dex_balance", + "dex_traders_to_cexes_flow", + "cexes_to_dex_traders_flow", + "dex_traders_cex_balance", + "dex_traders_to_defi_flow", + "defi_to_dex_traders_flow", + "dex_traders_defi_balance", + "genesis_to_exchanges_flow", + "exchanges_to_genesis_flow", + "genesis_exchange_balance", + "other_to_exchanges_flow", + "exchanges_to_other_flow", + "other_exchange_balance", + "unlabeled_to_labeled_flow", + "labeled_to_unlabeled_flow", + "unlabeled_to_unlabeled_flow", + "labeled_to_labeled_flow", + "unlabeled_balance", + "all_known_balance" +``` + +## August 2020 + +- Charts | Insights layout on the Charts tool +- Charts | Related Asset's Insights on the Asset's Detailed Page +- Charts | Small fixes for Chart Layouts (Remove Duplication Action) +- Charts | CMD + SHIFT + CLICK - Add metric to the new chart +- Charts | New metric - Defi total value locked in USD (ETH, for beta users) +- Charts | Supply Distribution is available in Search for metrics +- Charts | Make more visible Insigths on the chart +- Charts | Add more categories for Insights +- Charts | Chart layout hot fix +- Charts | More labels on Top Token Transactions +- Charts | Chart’s right axis padding +- Charts | Interval setting for the bar metrics +- Charts | Displaying insights for the selected chart’s time frame +- Charts | "Top Transactions Table" is now available in metrics search by its name or “ttt” abbreviation +- Charts | Interval setting for line metrics +- Charts | Showing only backend-available intervals +- Charts | Hiding tooltip when future ticks are hovered +- Charts | Supply Distribution has Merge tool now +- Screener | Add suggestions for some filters +- Screener | Small updates for visualisations +- Screener | New metric in the Filter "Network Growth" with % changes +- Screener | You can edit/save as your screener +- Screener | Small improvements/fixes of visualisations +- Screener | Add new metrics: Market Segments, Transaction Volume USD, Circulation (180d), BitMEX Perpetual Contract Funding Rate, Dormant Circulation (1y) +- Sanbase | Update Recent highlights +- Santrends | Fix bugs with compare feature +- Insights | Popular authors +- Metrics | NEW: Transaction Volume in USD +- Update Navbar Header | New dropdown for Chart layouts +- Rename Watchlist in the Navigation Bar to Market +- Insights | You can see new category - Only for PRO users +- Update User's dropdown in the Navigation Barj + +## July 2020 + +**`Sanbase`**: + +- New | Santiment Screener is here! +- Insights has new home page +- Watchlist & Screener has new column "Market segments" + +- New metric | Top transactions table (It's connected metric with Transaction volume) +- New metric | Bitmex Basis Ratio +- New metric | Supply distribution (You can add more than one Supply Distributions in your chart layout) +- You can apply any chart layout from your watchlist +- We add settings for the watermark for our charts. +- Webhooks for alerts works with Discord. + +- New metric | Sentiment Weighted +- On Alerts page we add the featured list of alerts. It's a good examples of usage +- Add keyboard navigation in all search by assets. ![](https://media.giphy.com/media/lqLdJ505muGP88kXJs/giphy.gif) +- Fix when search list was empty +- Add formatting for Exchange Balance metric +- Fixes for tooltip UX +- Fixes for Alpha reports +- Fixes Login/Create an account Flow +- Shift swapped to CMD + Click for Transactions Table +- The huge update for Santiment Charts. There is much more flexibility to setup your own dashboard based on Santiment metrics. +- Fix watchlists stats on mobile +- Fix search order on Sanbase +- Add more keyboard shortcuts +- CMD + Click \{Charts Page\} on Holder Distribution list will pick only only one group +- CMD + L \{Charts Page\} will open a list of chart layouts +- / \{Any page\} will focus on search input +- CMD + M \{Charts Page\} will toggle Mapview/Charts mode + +## June 2020 + +**`Sanbase`**: + +- Webhooks for Alerts +- Dev activity on Desktop now looks better (default MA 7 days) +- MVRV Long/Short looks better. (Area lines, percents instead of ratio) +- Add Sentiment Metrics (Finally on Santiment App we have Sentiments :smile: ) +- Add Derivatives Metrics (For BTC & ETH) +- We rebuild fullscreen for the Chart. It's bigger now +- Chart becomes bigger +- Grid on the Chart becomes more granular +- Chart layouts - small fixes +- You can open our chart tool right from navigation now +- Add Frequencies for each metric in "Explanation" sidebar +- Add Price in BTC & ETH +- New Alert: MVRV Intraday +- Many fixes for links and docs +- New minimap feature: [https://www.loom.com/share/8362041e6551404ba7dd092d125dac5d](https://www.loom.com/share/8362041e6551404ba7dd092d125dac5d) +- New Select&ZoomIn feature for Sanbase Charts +- You can edit the calendar as a text. + +## May 2020 + +- **`Sanbase`**: You can setup manually amount of top holders for next metrics + +![top-holders](top-holders.png) + +- **`Sanbase`**: Add categories for Quick Search + +![search](search-categories.png) + +- **`Sanbase`**: All projects now have Social Volume metric available. + +- **`Sanbase`**: Our chart has 2 Axis support now. + +![search](axis.png) + +- **`Sanbase`**: Social tool has better suggestions. And some small changes for better UX. + +![search](social-suggestions.png) + +## April 2020 + +- **`Sanbase`**: Social tool has a new feature. "Comparing". You can compare any topics and assets by social volume and social dominance. + +![search](social-compare.png) + +- **`Sanbase`**: You can save your ideas with new feature "templates" and manage them in profile + +![search](templates.png) +![search](templates-profile.png) + +- **`Sanbase`**: We have a new flow for selecting a datetime interval + +![search](calendar.png) + +- **`Sanbase`**: You can add an alert for any "text" topic in our social tool. + +![search](socsalerts.png) + +- **`Sanbase`**: We add very specific metric for Ethereum. Say welcome to Miners Balance + +![miners balance](minersBalance.png) + +- **`Sanbase`**: New Top Holders metric on Sanbase Charts + +![top holders](topHolders.png) + +## March 2020 + +- **`Sanbase`**: We add Twitter % changes 24h, 7d + +![twitter changes](twitterChanges.png) + +- **`Sanbase`**: You can create alerts right from the chart with shortcuts. + +![signals on chart](signalsOnChart.png) + +- **`Sanbase`**: ICO price can be visible right on the chart + +![ico price](icoPrice.png) + +- **`Sanbase`**: Studio supports comparison our metrics and assets now + +![comparing](comparing.png) + +- **`Sanbase`**: We add a better explanation for our metrics on •Studio• + +![explanations](explanations.png) + +## February 2020 + +- **`Sanbase`**: We add time bounds metrics + +![timebounds](timebounds.png) + +- **`Sansheets`**: `=SAN_MEAN_DOLLAR_INVESTED_AGE` function has been published + +- **`Sanbase`**: New look of Santiment Studio. Our chart tool is much ease to use now. + ![charts](charts.png) + +- **`Sanbase`**: First time to see our new feed. Where you can find latest hot events, insights and anomalies in the crypto world. + And now Santiment has own Indices. + ![feed](feed.png) + +- **`Sanbase`**: It's time to pay with crypto for our tools. [https://app.santiment.net/pricing](https://app.santiment.net/pricing) + +- **`Sanbase`**: We've updated Sanbase's user profile. And you can track followers. + ![profile](profile.png) + +## January 2020 + +- **`Sanbase`**: We make fresh new chart's engine for our services. Now our charts become much faster. You can try it on our desktop web app - [https://app.santiment.net/](https://app.santiment.net/) + +- **`Sanbase`**: Better mobile experience is here. Also you can open our chart in `fullscreen` mode. + ![mdp](mdp.png) + +- **`Sansheets`**: + +1. Removed `SAN_NEWS` function. +2. Change order of returned data of `SAN_OHLC` function. +
    + +- **`Sanbase/Insights`**: Now you can see an amount of comments per Insight + ![total_comments](total_comments.png) + +- **`Sanbase`**: Small changes of our navigation super menu + ![insights_dropdown](insights_dropdown.png) + +## December 2019 + +- **`Sanbase`**: Our profile page is live - [https://app.santiment.net/profile/120](https://app.santiment.net/profile/120) + +- **`Sanbase/Insights`**: Let's talk about crypto in our new comments + ![comments](comments.png) + +- **`Sanbase`**: User can toggle the fullscreen mode for our chart. + +
    + +## November 2019 + +- **`Sanbase`**: Now you can check top trending words on our charts - + ![trends-chart](trends-chart.png) + Just hovering the chart and moving the mouse pointer. This works with Social Volume metric. +- **`Sanbase`**: You can use the new search field if you looking for some metric + ![metrics-search](metrics-search.png) +- **`Sanbase/Sansheets/API`**: Finally we have unified header for all our services (except santiment.net) + ![header](header.png) +- **`Sanbase Graphs`**: Graphs is the part of Sanbase account and user flow + ![graphs](graphs.png) + +- **`Sansheets`**: New function introduced `=SAN_FUNCTIONS` - returns a list of all the available san functions. + +- **`Sanbase.Insights`** Insights has a new widget with a list of assets in this insight. + ![insights](insights.png) + +- **`Sanbase/Sansheets/API`**: Increased the historical access for paid plans: + Sanbase/Sansheets: Pro plan now gives 5 years of access instead of 3 + API: Basic plan gives 3 years instead of 6 months, Pro: 7 years instead of 1.5 years +- **`Sanbase`**: Now you can download CSV data from our Sanbase's chart tool. + ![csv](csv.png) + +- **`Sansheets`**: Some functions has been introduced: + +``` + SAN_DAILY_AVG_MARKETCAP + SAN_DAILY_CLOSING_MARKETCAP + SAN_MEAN_REALIZED_PRICE + SAN_MVRV_LONG_SHORT_DIFF + SAN_MEAN_AGE + SAN_VELOCITY + SAN_EXCHANGE_INFLOW + SAN_EXCHANGE_OUTFLOW + SAN_EXCHANGE_BALANCE + SAN_AGE_DESTROYED +``` + +
    + +## October 2019 + +- **`Sanbase`**: New weekly report for your watchlists. Now you can get hot info about assets from your watchlist in your inbox. + ![weekly](weekly.png) + +- **`Sanbase`**: New beta feature. You can setup simple pricing signal on the chart tool. + ![signals-on-chart](signals-on-chart.png) + +- **`Sanbase`**: Since today on-chain data is available on the charts for EOS + (discontinued in May 2020), Ripple and Binance Chain. Binance Chain is + available under the `Binance Native` name and `binance-coin-native` slug. The + old `Binance/binance-coin` is still pointing to the ERC20 contract. Not all + the available data is currently displayed, the frontend team is working on + that. diff --git a/src/docs/changelog/legacy-changelog/insights.png b/src/content/docs/resources/changelog/legacy-changelog/insights.png similarity index 100% rename from src/docs/changelog/legacy-changelog/insights.png rename to src/content/docs/resources/changelog/legacy-changelog/insights.png diff --git a/src/docs/changelog/legacy-changelog/insights_dropdown.png b/src/content/docs/resources/changelog/legacy-changelog/insights_dropdown.png similarity index 100% rename from src/docs/changelog/legacy-changelog/insights_dropdown.png rename to src/content/docs/resources/changelog/legacy-changelog/insights_dropdown.png diff --git a/src/docs/changelog/legacy-changelog/mdp.png b/src/content/docs/resources/changelog/legacy-changelog/mdp.png similarity index 100% rename from src/docs/changelog/legacy-changelog/mdp.png rename to src/content/docs/resources/changelog/legacy-changelog/mdp.png diff --git a/src/docs/changelog/legacy-changelog/metrics-search.png b/src/content/docs/resources/changelog/legacy-changelog/metrics-search.png similarity index 100% rename from src/docs/changelog/legacy-changelog/metrics-search.png rename to src/content/docs/resources/changelog/legacy-changelog/metrics-search.png diff --git a/src/docs/changelog/legacy-changelog/minersBalance.png b/src/content/docs/resources/changelog/legacy-changelog/minersBalance.png similarity index 100% rename from src/docs/changelog/legacy-changelog/minersBalance.png rename to src/content/docs/resources/changelog/legacy-changelog/minersBalance.png diff --git a/src/docs/changelog/legacy-changelog/profile.png b/src/content/docs/resources/changelog/legacy-changelog/profile.png similarity index 100% rename from src/docs/changelog/legacy-changelog/profile.png rename to src/content/docs/resources/changelog/legacy-changelog/profile.png diff --git a/src/docs/changelog/legacy-changelog/search-categories.png b/src/content/docs/resources/changelog/legacy-changelog/search-categories.png similarity index 100% rename from src/docs/changelog/legacy-changelog/search-categories.png rename to src/content/docs/resources/changelog/legacy-changelog/search-categories.png diff --git a/src/docs/changelog/legacy-changelog/signals-on-chart.png b/src/content/docs/resources/changelog/legacy-changelog/signals-on-chart.png similarity index 100% rename from src/docs/changelog/legacy-changelog/signals-on-chart.png rename to src/content/docs/resources/changelog/legacy-changelog/signals-on-chart.png diff --git a/src/docs/changelog/legacy-changelog/signalsOnChart.png b/src/content/docs/resources/changelog/legacy-changelog/signalsOnChart.png similarity index 100% rename from src/docs/changelog/legacy-changelog/signalsOnChart.png rename to src/content/docs/resources/changelog/legacy-changelog/signalsOnChart.png diff --git a/src/docs/changelog/legacy-changelog/social-compare.png b/src/content/docs/resources/changelog/legacy-changelog/social-compare.png similarity index 100% rename from src/docs/changelog/legacy-changelog/social-compare.png rename to src/content/docs/resources/changelog/legacy-changelog/social-compare.png diff --git a/src/docs/changelog/legacy-changelog/social-suggestions.png b/src/content/docs/resources/changelog/legacy-changelog/social-suggestions.png similarity index 100% rename from src/docs/changelog/legacy-changelog/social-suggestions.png rename to src/content/docs/resources/changelog/legacy-changelog/social-suggestions.png diff --git a/src/docs/changelog/legacy-changelog/socsalerts.png b/src/content/docs/resources/changelog/legacy-changelog/socsalerts.png similarity index 100% rename from src/docs/changelog/legacy-changelog/socsalerts.png rename to src/content/docs/resources/changelog/legacy-changelog/socsalerts.png diff --git a/src/docs/changelog/legacy-changelog/templates-profile.png b/src/content/docs/resources/changelog/legacy-changelog/templates-profile.png similarity index 100% rename from src/docs/changelog/legacy-changelog/templates-profile.png rename to src/content/docs/resources/changelog/legacy-changelog/templates-profile.png diff --git a/src/docs/changelog/legacy-changelog/templates.png b/src/content/docs/resources/changelog/legacy-changelog/templates.png similarity index 100% rename from src/docs/changelog/legacy-changelog/templates.png rename to src/content/docs/resources/changelog/legacy-changelog/templates.png diff --git a/src/docs/changelog/legacy-changelog/timebounds.png b/src/content/docs/resources/changelog/legacy-changelog/timebounds.png similarity index 100% rename from src/docs/changelog/legacy-changelog/timebounds.png rename to src/content/docs/resources/changelog/legacy-changelog/timebounds.png diff --git a/src/docs/changelog/legacy-changelog/top-holders.png b/src/content/docs/resources/changelog/legacy-changelog/top-holders.png similarity index 100% rename from src/docs/changelog/legacy-changelog/top-holders.png rename to src/content/docs/resources/changelog/legacy-changelog/top-holders.png diff --git a/src/docs/changelog/legacy-changelog/topHolders.png b/src/content/docs/resources/changelog/legacy-changelog/topHolders.png similarity index 100% rename from src/docs/changelog/legacy-changelog/topHolders.png rename to src/content/docs/resources/changelog/legacy-changelog/topHolders.png diff --git a/src/docs/changelog/legacy-changelog/total_comments.png b/src/content/docs/resources/changelog/legacy-changelog/total_comments.png similarity index 100% rename from src/docs/changelog/legacy-changelog/total_comments.png rename to src/content/docs/resources/changelog/legacy-changelog/total_comments.png diff --git a/src/docs/changelog/legacy-changelog/trends-chart.png b/src/content/docs/resources/changelog/legacy-changelog/trends-chart.png similarity index 100% rename from src/docs/changelog/legacy-changelog/trends-chart.png rename to src/content/docs/resources/changelog/legacy-changelog/trends-chart.png diff --git a/src/docs/changelog/legacy-changelog/twitterChanges.png b/src/content/docs/resources/changelog/legacy-changelog/twitterChanges.png similarity index 100% rename from src/docs/changelog/legacy-changelog/twitterChanges.png rename to src/content/docs/resources/changelog/legacy-changelog/twitterChanges.png diff --git a/src/docs/changelog/legacy-changelog/weekly.png b/src/content/docs/resources/changelog/legacy-changelog/weekly.png similarity index 100% rename from src/docs/changelog/legacy-changelog/weekly.png rename to src/content/docs/resources/changelog/legacy-changelog/weekly.png diff --git a/src/content/docs/resources/changelog/metrics/index.mdx b/src/content/docs/resources/changelog/metrics/index.mdx new file mode 100644 index 000000000..690c45d6c --- /dev/null +++ b/src/content/docs/resources/changelog/metrics/index.mdx @@ -0,0 +1,14 @@ +--- +title: Metrics changelog +description: Keep track of development updates, new product features and other items from our changelog +author: Santiment Team +dateModified: 2025-10-06 +datePublished: 2025-10-06 +sidebar: + label: Metrics + order: 20 +--- + +import MetricsChangelog from '$components/features/changelog/Metrics.astro' + + diff --git a/src/docs/data-anomaly/binance-funding-rate/image1.png b/src/content/docs/resources/data-anomaly/binance-funding-rate/image1.png similarity index 100% rename from src/docs/data-anomaly/binance-funding-rate/image1.png rename to src/content/docs/resources/data-anomaly/binance-funding-rate/image1.png diff --git a/src/content/docs/resources/data-anomaly/binance-funding-rate/index.mdx b/src/content/docs/resources/data-anomaly/binance-funding-rate/index.mdx new file mode 100644 index 000000000..50a30eeb3 --- /dev/null +++ b/src/content/docs/resources/data-anomaly/binance-funding-rate/index.mdx @@ -0,0 +1,25 @@ +--- +title: Binance Funding Rate +author: Boris +description: Data Anomaly shows market sentiment in perpetual futures, with spikes signaling potential volatility. +datePublished: 2025-09-12 +dateModified: 2025-10-30 +--- + +## Definition + +**Binance Funding Rate** is designed to monitor significant changes in Binance's funding rate for perpetual futures contracts. Persistent spikes or drops in the funding rate can indicate extreme market sentiment, allowing traders to anticipate price movements or periods of heightened volatility. + +Funding rate is a periodic payment made to ensure the price of perpetual futures contracts remains anchored to the spot market price. A positive funding rate indicates that the perpetual contract price is higher than the spot price, with long position holders paying shorts. A negative funding rate suggests the opposite, with short position holders paying longs. + +![](image1.png) + +## Use Cases + +- **Market Sentiment Analysis:** The anomaly tracks funding rates across major trading pairs (e.g., BTC/USDT, ETH/USDT). When funding rates significantly deviate from historical norms, the anomaly is triggered. High positive rates may indicate extreme bullish sentiment, while high negative rates may suggest panic selling and bearish sentiment. + +- **Risk Management:** If funding rates reach extreme levels, it could imply incoming sharp price movements, prompting precautionary actions. + +- **Funding Rate Arbitrage**: Traders can exploit differences in funding rates across different exchanges by taking opposing positions to capture the spread, thereby generating risk-free or low-risk profit. + +- **Volatility Trading**: Traders may use funding rate anomalies as an indicator of upcoming volatility. Significant shifts in funding rates can imply an impending price move, allowing traders to implement volatility-based strategies such as buying options or utilizing straddles to profit from expected price swings. \ No newline at end of file diff --git a/src/docs/data-anomaly/btc-correlation/image1.png b/src/content/docs/resources/data-anomaly/btc-correlation/image1.png similarity index 100% rename from src/docs/data-anomaly/btc-correlation/image1.png rename to src/content/docs/resources/data-anomaly/btc-correlation/image1.png diff --git a/src/content/docs/resources/data-anomaly/btc-correlation/index.mdx b/src/content/docs/resources/data-anomaly/btc-correlation/index.mdx new file mode 100644 index 000000000..15fb2863b --- /dev/null +++ b/src/content/docs/resources/data-anomaly/btc-correlation/index.mdx @@ -0,0 +1,33 @@ +--- +title: BTC Correlation +author: Boris +description: Data Anomaly shows Bitcoin’s relationship with Gold and SPY, highlighting market trends, risk, and diversification opportunities. +datePublished: 2025-09-12 +dateModified: 2025-10-30 +--- + +## Definition + +**BTC Correlation** Anomaly is designed to monitor and analyze the correlation between Bitcoin (BTC) and GOLD and SPY. By examining how BTC moves in relation to other market participants, traders can gain valuable insights into market dynamics and interdependencies. This signal is essential for understanding diversification opportunities, managing risk, and identifying broader market trends. + +**Correlation** measures the strength and direction of the relationship between two assets, typically represented by a coefficient ranging from -1 to 1. A value close to 1 indicates a strong positive correlation, meaning the assets tend to move together, while a value near -1 suggests a strong negative correlation, where the assets move in opposite directions. + +![](image1.png) + +## Use Cases + +- **Diversification Strategies**: + + Utilize the BTC Correlation Anomaly to assess which assets may provide diversification benefits. When BTC shows low or negative correlation with certain altcoins or traditional assets, these instruments can help stabilize your portfolio during periods of BTC volatility. + +- **Risk Management**: + + By tracking shifts in BTC’s correlation with other assets, traders can identify periods of heightened systemic risk. A rising correlation across multiple assets may signal market stress, prompting adjustments in position sizing and hedging strategies. + +- **Market Sentiment Analysis**: + + Changes in correlation can be indicative of evolving market sentiment. For instance, a decreasing correlation between BTC and traditional financial instruments might suggest a divergence in market behavior, offering clues about potential shifts in investor sentiment and macroeconomic trends. + +- **Hedging Strategies**: + + Understanding BTC’s correlation with other assets helps in constructing effective hedges. For example, if BTC exhibits a strong inverse correlation with a specific altcoin or commodity, traders may use this relationship to offset potential losses and protect their portfolios during downturns. \ No newline at end of file diff --git a/src/content/docs/resources/data-anomaly/deprecated/ath-price-usd/index.mdx b/src/content/docs/resources/data-anomaly/deprecated/ath-price-usd/index.mdx new file mode 100644 index 000000000..ee0f9f033 --- /dev/null +++ b/src/content/docs/resources/data-anomaly/deprecated/ath-price-usd/index.mdx @@ -0,0 +1,11 @@ +--- +title: ATH price USD +author: Alex +description: Signal indicating a new price USD All Time High is reached. +datePublished: 2021-12-08 +dateModified: 2025-10-30 +--- + +## Definition + +**ATH Price USD Signal** indicates that an asset has reached it's new ATH. After an ATH was reached, for a given asset a cooldown period of 12 hours it set. While a cooldown period is active new signals are not fired even if the asset keep reaching new ATHs. \ No newline at end of file diff --git a/src/content/docs/resources/data-anomaly/deprecated/dai-mint/index.mdx b/src/content/docs/resources/data-anomaly/deprecated/dai-mint/index.mdx new file mode 100644 index 000000000..3c63433e8 --- /dev/null +++ b/src/content/docs/resources/data-anomaly/deprecated/dai-mint/index.mdx @@ -0,0 +1,15 @@ +--- +title: DAI Mint +author: Alex +description: Signal indicating a large DAI portion was minted +datePublished: 2021-02-11 +dateModified: 2025-10-30 +--- + +## Definition + +**DAI Mint signal** indicates that an outstanding portion of DAI was minted. + +In order to identify "outstanding" mints the **99.9% rolling quantile over last 3000 mints** is computed. If the minted amount is greater than the computed value, it's marked it as "outstanding" value. + +The amount of minted DAI and the corresponding transaction hash are provided. diff --git a/src/content/docs/resources/data-anomaly/deprecated/index.mdx b/src/content/docs/resources/data-anomaly/deprecated/index.mdx new file mode 100644 index 000000000..0fa9fdc50 --- /dev/null +++ b/src/content/docs/resources/data-anomaly/deprecated/index.mdx @@ -0,0 +1,18 @@ +--- +title: Deprecated Data Anomalies +author: Santiment Team +datePublished: 2024-04-23 +dateModified: 2025-10-30 +--- + +Currently deprecated Data Anomalies: + +- [ATH Price USD](/data-anomaly/deprecated/ath-price-usd/) +- [DAI Mint](/data-anomaly/deprecated/dai-mint/) +- [Large Exchange Transactions](/data-anomaly/deprecated/large-exchange-transactions/) +- [Large Exchange Transactions 1M](/data-anomaly/deprecated/large-exchange-transactions-1m/) +- [Large Transactions](/data-anomaly/deprecated/large-transactions/) +- [MCD ART Liquidation](/data-anomaly/deprecated/mcd-art-liquidation/) +- [Old Coins Moved](/data-anomaly/deprecated/old-coins-moved/) +- [Project in Trending Words](/data-anomaly/deprecated/project-in-trending-words/) +- [UniswapV3 PoolCreated](/data-anomaly/deprecated/uniswapv3-poolcreated/) diff --git a/src/content/docs/resources/data-anomaly/deprecated/large-exchange-transactions-1m/index.mdx b/src/content/docs/resources/data-anomaly/deprecated/large-exchange-transactions-1m/index.mdx new file mode 100644 index 000000000..99e437ed7 --- /dev/null +++ b/src/content/docs/resources/data-anomaly/deprecated/large-exchange-transactions-1m/index.mdx @@ -0,0 +1,13 @@ +--- +title: Large Exchange Transactions 1M +author: Katsiaryna +description: Signal shows that a deposit or withdrawal of 1M USD or more is made +datePublished: 2023-07-07 +dateModified: 2025-10-30 +--- + +## Definition + +**Large Exchange Transactions 1M** indicates that transactions of 1 million USD or more (in any token or ETH) was deposited or withdrawaled to/from some CEX. + +The signal metadata tracks sender and reciever, aproximate USD value and the hash of the transaction. diff --git a/src/content/docs/resources/data-anomaly/deprecated/large-exchange-transactions/index.mdx b/src/content/docs/resources/data-anomaly/deprecated/large-exchange-transactions/index.mdx new file mode 100644 index 000000000..e21fad9d3 --- /dev/null +++ b/src/content/docs/resources/data-anomaly/deprecated/large-exchange-transactions/index.mdx @@ -0,0 +1,14 @@ +--- +title: Large Exchange Transactions +author: Vlad +description: Signal shows that any large transaction has been made. +datePublished: 2021-04-07 +dateModified: 2025-10-30 +--- + +## Definition + +**Large Exchange Transactions** indicates that large transactions has been made. + +We take transaction for the last 30 days, calculating thresholds for each asset every day. We take thresholds values, the cost of which exceeds 10000 USD. +Then we take all the transactions whose transaction volume more than this threshold separately for each asset. diff --git a/src/content/docs/resources/data-anomaly/deprecated/large-transactions/index.mdx b/src/content/docs/resources/data-anomaly/deprecated/large-transactions/index.mdx new file mode 100644 index 000000000..856e0ee2c --- /dev/null +++ b/src/content/docs/resources/data-anomaly/deprecated/large-transactions/index.mdx @@ -0,0 +1,43 @@ +--- +title: Large Transactions +author: Katsiaryna +description: Signal indicating transactions with big value in USD +datePublished: 2021-04-26 +dateModified: 2025-10-30 +--- + +## Definition + +**Large Transaction Signal** indicates transactions with large value in USD. + +In order to filter most valuable transactions for each transaction a threshold value is defined. The threshold is the USD value of the top-fifth transaction in last 30 days. + +If the transaction's approximate value in USD is above the threshold value, a signal is fired. + +Approximate transaction values are calculated by multiplying the amount of transferres coins to closest coin's price value using price data with 5 minutes interval for each transaction. + +## List of supported tokens +* ethereum +* tether +* 1inch +* aave +* badger-dao +* balancer +* band-protocol +* bancor +* compound +* curve +* dodo +* enjin-coin +* kyber-network +* chainlink +* loopring +* maker +* orion-protocol +* ren +* augur +* synthetix-network-token +* sushi +* uniswap +* yearn-finance +* 0x diff --git a/src/content/docs/resources/data-anomaly/deprecated/mcd-art-liquidation/index.mdx b/src/content/docs/resources/data-anomaly/deprecated/mcd-art-liquidation/index.mdx new file mode 100644 index 000000000..2745c9e0c --- /dev/null +++ b/src/content/docs/resources/data-anomaly/deprecated/mcd-art-liquidation/index.mdx @@ -0,0 +1,35 @@ +--- +title: MCD ART Liquidation +author: Alex +description: Signal indicating a large MakerDAO liquidation +datePublished: 2021-12-08 +dateModified: 2025-10-30 +--- + +## Definition + +**Multi-Collateral DAI ART Liquidation Signal** indicates that an outstanding liquidation occured. + +Fires a signal if more than $100k was liquidated over last 5 minutes. + +## Collateral Assets + +* 0x +* balancer +* basic-attention-token +* chainlink +* compound +* DAI +* decentraland +* gemini-dollar +* kyber-network +* loopring +* paxos-standard +* tether +* trueusd +* usd-coin +* USDC-b +* WETH +* WETH-b +* wrapped-bitcoin +* yearn-finance \ No newline at end of file diff --git a/src/content/docs/resources/data-anomaly/deprecated/old-coins-moved/index.mdx b/src/content/docs/resources/data-anomaly/deprecated/old-coins-moved/index.mdx new file mode 100644 index 000000000..aa877644f --- /dev/null +++ b/src/content/docs/resources/data-anomaly/deprecated/old-coins-moved/index.mdx @@ -0,0 +1,13 @@ +--- +title: Old Coins Moved +author: Alex +description: Signal indicating a large portion of old coins were moved. +datePublished: 2021-12-08 +dateModified: 2025-10-30 +--- + +## Definition + +**Old Coins Moved Signal** indicates that an outstanding amount of old coins were moved. + +In order to identify "outstanding" transfer for each transfer it's burn age is computed. Burn age is the amount of tokens changing address on a certain transfer, multiplied by the time since they last moved. After that for each asset **top-10 transfers by age over 30 days are considered**. If the new given transfer's burn age is greater than the top-10 value, the transfer marked as "outstanding". \ No newline at end of file diff --git a/src/content/docs/resources/data-anomaly/deprecated/project-in-trending-words/index.mdx b/src/content/docs/resources/data-anomaly/deprecated/project-in-trending-words/index.mdx new file mode 100644 index 000000000..6637ed88d --- /dev/null +++ b/src/content/docs/resources/data-anomaly/deprecated/project-in-trending-words/index.mdx @@ -0,0 +1,14 @@ +--- +title: Project in Trending Words +author: Katsiaryna +description: Signal indicates that some project appeared in top-10 trending words +datePublished: 2021-12-27 +dateModified: 2025-10-30 +--- + +## Definition + +**Project in Trending Words** indicates that the project appeared in top-10 trending words. + +Bitcoin and Ethereum are not tracked. +Once the signal is fired for some project the cooldown period of 12 hours is activeted for this project. No new project-in-trending-words signals are emitted during the cooldown period. diff --git a/src/content/docs/resources/data-anomaly/deprecated/uniswapv3-poolcreated/index.mdx b/src/content/docs/resources/data-anomaly/deprecated/uniswapv3-poolcreated/index.mdx new file mode 100644 index 000000000..f0908ca03 --- /dev/null +++ b/src/content/docs/resources/data-anomaly/deprecated/uniswapv3-poolcreated/index.mdx @@ -0,0 +1,17 @@ +--- +title: UniswapV3 PoolCreated +author: Vlad +description: Signal shows that new pool was created. +datePublished: 2021-12-27 +dateModified: 2025-10-30 +--- + +## Definition + +**UniswapV3 PoolCreated** indicates that new pool was created. + +It indicates for which pair of assets pool was created. Shows related to this pool information: + - transaction hash + - fee + - tick spacing + - pool address diff --git a/src/docs/data-anomaly/dex-exchanges-1m-usd/image1.png b/src/content/docs/resources/data-anomaly/dex-exchanges-1m-usd/image1.png similarity index 100% rename from src/docs/data-anomaly/dex-exchanges-1m-usd/image1.png rename to src/content/docs/resources/data-anomaly/dex-exchanges-1m-usd/image1.png diff --git a/src/docs/data-anomaly/dex-exchanges-1m-usd/image2.png b/src/content/docs/resources/data-anomaly/dex-exchanges-1m-usd/image2.png similarity index 100% rename from src/docs/data-anomaly/dex-exchanges-1m-usd/image2.png rename to src/content/docs/resources/data-anomaly/dex-exchanges-1m-usd/image2.png diff --git a/src/docs/data-anomaly/dex-exchanges-1m-usd/image3.png b/src/content/docs/resources/data-anomaly/dex-exchanges-1m-usd/image3.png similarity index 100% rename from src/docs/data-anomaly/dex-exchanges-1m-usd/image3.png rename to src/content/docs/resources/data-anomaly/dex-exchanges-1m-usd/image3.png diff --git a/src/content/docs/resources/data-anomaly/dex-exchanges-1m-usd/index.mdx b/src/content/docs/resources/data-anomaly/dex-exchanges-1m-usd/index.mdx new file mode 100644 index 000000000..9bed16922 --- /dev/null +++ b/src/content/docs/resources/data-anomaly/dex-exchanges-1m-usd/index.mdx @@ -0,0 +1,30 @@ +--- +title: Dex Exchanges 1M USD +author: Boris +description: Data Anomaly shows DEX trades of $1M or more, highlighting significant market moves by major holders. +datePublished: 2025-09-12 +dateModified: 2025-10-30 +--- + +## Definition + +**Dex Exchanges 1M USD** anomaly is fired when a decentralized exchange (DEX) transaction involves a token trade amounting to $1 million USD or more. This alert identifies unusually large swaps or trades that take place on DEX platforms, often indicating significant market activity by major holders or institutional players operating in a decentralized and transparent environment. + +Such transactions can have a noticeable impact on token prices, liquidity, and market sentiment, and are often precursors to major market movements or strategic portfolio changes. + +## Use Cases + +- **Large Trade Monitoring on DEXs** +Track large-scale trading activity in real time. These trades can signal intent to accumulate or offload a position without going through centralized exchanges. +- **Liquidity Shock Detection** +A massive trade on a DEX may result in price slippage and sudden liquidity changes. This anomaly can warn traders and liquidity providers about possible short-term volatility. +- **DeFi Project Analysis** +DeFi analysts and investors can assess how significant token holders interact with their ecosystem, helping them evaluate project health, token stability, or manipulation risks. + +##Examples + +![](image1.png) + +![](image2.png) + +![](image3.png) \ No newline at end of file diff --git a/src/docs/data-anomaly/eth-whale-dump/image1.png b/src/content/docs/resources/data-anomaly/eth-whale-dump/image1.png similarity index 100% rename from src/docs/data-anomaly/eth-whale-dump/image1.png rename to src/content/docs/resources/data-anomaly/eth-whale-dump/image1.png diff --git a/src/content/docs/resources/data-anomaly/eth-whale-dump/index.mdx b/src/content/docs/resources/data-anomaly/eth-whale-dump/index.mdx new file mode 100644 index 000000000..809eca874 --- /dev/null +++ b/src/content/docs/resources/data-anomaly/eth-whale-dump/index.mdx @@ -0,0 +1,21 @@ +--- +title: ETH Whale Dump +author: Boris +description: Data Anomaly shows large ETH outflows from whale wallets, signaling potential selling pressure and dump scenarios. +datePublished: 2025-09-12 +dateModified: 2025-10-30 +--- + +## Definition + +**ETH Whale Dump** anomaly is designed to detect potential large-scale ETH dumps by monitoring whale wallet behaviors. It specifically focuses on identifying significant outflows from addresses that could indicate selling pressure from major holders. The anomaly uses a 30-day holding period as a key parameter to distinguish between normal trading activity and potential dump scenarios. + +![](image1.png) + +## Use Cases +- Identifying potential large-scale selling pressure +- Monitoring whale behavior patterns +- Early warning system for significant market movements +- Risk management for ETH positions + +This data anomaly helps traders and analysts anticipate potential market pressure from large ETH holders, particularly focusing on cases where long-term holders (30+ days) initiate substantial outflows that could impact market conditions. \ No newline at end of file diff --git a/src/docs/data-anomaly/hyperliquid-average-funding-rates/image1.png b/src/content/docs/resources/data-anomaly/hyperliquid-average-funding-rates/image1.png similarity index 100% rename from src/docs/data-anomaly/hyperliquid-average-funding-rates/image1.png rename to src/content/docs/resources/data-anomaly/hyperliquid-average-funding-rates/image1.png diff --git a/src/content/docs/resources/data-anomaly/hyperliquid-average-funding-rates/index.mdx b/src/content/docs/resources/data-anomaly/hyperliquid-average-funding-rates/index.mdx new file mode 100644 index 000000000..5d53cb01b --- /dev/null +++ b/src/content/docs/resources/data-anomaly/hyperliquid-average-funding-rates/index.mdx @@ -0,0 +1,30 @@ +--- +title: Hyperliquid Average Funding Rates +author: Boris +description: Data Anomaly shows unusual funding rate spikes or drops, alerting traders to potential market anomalies in real time. +datePublished: 2025-09-12 +dateModified: 2025-10-30 +--- + +## Definition + +**Hyperliquid Average Funding Rates** Anomaly monitors Hyperliquid's funding rates to detect anomalies when rates exceed predefined high/low thresholds. It retrieves data from ClickHouse, identifies unusual funding patterns, and streams alerts to Kafka for real-time processing. + +![](image1.png) + +## Use Cases + +**Risk Management** + +- Early warning for excessive leverage conditions +- Market stress detection before major price movements + +**Trading Opportunities** + +- Identify arbitrage opportunities from funding imbalances +- Optimize position timing based on funding cycles + +**Market Analysis** + +- Track liquidity conditions and market sentiment +- Monitor unusual market behavior for research/compliance \ No newline at end of file diff --git a/src/content/docs/resources/data-anomaly/index.mdx b/src/content/docs/resources/data-anomaly/index.mdx new file mode 100644 index 000000000..ba0f00c71 --- /dev/null +++ b/src/content/docs/resources/data-anomaly/index.mdx @@ -0,0 +1,41 @@ +--- +title: Data Anomaly Overview +author: Larry +datePublished: 2025-10-20 +dateModified: 2025-11-17 +sidebar: + label: Data Anomaly + order: 40 +--- + +import Resource from '$components/markdown/Resource.svelte' + +The crypto market is noisy by the minute. We keep it simple: we surface meaningful anomalies from on-chain activity, social signals, and derivatives microstructure, and turn them into clear, ready-to-use signals. + +Unlike traditional dashboards, we focus on actionability and reliability. Every signal is validated with rigorous statistical tests and out-of-sample checks to reduce false positives. Integrate notifications to fit your workflow—use the actionable anomalies in a way you like. + +If you’re looking for a systematic way to improve decision quality in a complex market, Data Anomaly is the simplest place to start. + +- [Dex Exchanges 1M USD](/data-anomaly/dex-exchanges-1m-usd) +- [ETH Whale Dump](/data-anomaly/eth-whale-dump) +- [Hyperliquid Average Funding Rates](/data-anomaly/hyperliquid-average-funding-rates) +- [Large Transfers](/data-anomaly/large-transfers) +- [Large USDC-USDT Mint](/data-anomaly/large-usdc-usdt-mint) +- [Liquidations](/data-anomaly/liquidations) +- [MVRV Danger (Overvaluation) Zone](/data-anomaly/mvrv-danger-zone) +- [MVRV Opportunity (Undervaluation) Zone](/data-anomaly/mvrv-opportunity-zone) +- [Network Activity - Price Divergence](/data-anomaly/network-activity-price-divergence) +- [Project in Trends](/data-anomaly/project-in-trends) +- [Social Dominance Spike](/data-anomaly/social-dominance-spike) +- [Social-Dev Score](/data-anomaly/social-dev-score) +- [USDC Borrow](/data-anomaly/usdc-borrow) + + + +Deprecated Data Anomalies + +There are data anomalies that have been deprecated, are scheduled for deprecation, or are now available under a new name. Please refrain from using the old data anomalies and migrate to the updated versions as necessary. + +- [Deprecated Data Anomalies](/data-anomaly/deprecated) + + diff --git a/src/docs/data-anomaly/large-transfers/image1.png b/src/content/docs/resources/data-anomaly/large-transfers/image1.png similarity index 100% rename from src/docs/data-anomaly/large-transfers/image1.png rename to src/content/docs/resources/data-anomaly/large-transfers/image1.png diff --git a/src/docs/data-anomaly/large-transfers/image2.png b/src/content/docs/resources/data-anomaly/large-transfers/image2.png similarity index 100% rename from src/docs/data-anomaly/large-transfers/image2.png rename to src/content/docs/resources/data-anomaly/large-transfers/image2.png diff --git a/src/content/docs/resources/data-anomaly/large-transfers/index.mdx b/src/content/docs/resources/data-anomaly/large-transfers/index.mdx new file mode 100644 index 000000000..a0e7b68eb --- /dev/null +++ b/src/content/docs/resources/data-anomaly/large-transfers/index.mdx @@ -0,0 +1,27 @@ +--- +title: Large Transfers +author: Boris +description: Data anomaly shows unusually big token movements, highlighting whale activity and potential market shifts. +datePublished: 2025-09-12 +dateModified: 2025-10-30 +--- + +## Definition + +**Large Transfers** anomaly is triggered when a significant non-DEX and non-CEX transfer occurs for a particular token. This alert activates when a transfer in USD value exceeds the top-10th largest transfer in the last two weeks for that token. +This data anomaly is essential for monitoring whale movements, tracking large holder activity, and detecting potential strategic shifts in the market. + +## Ethereum large transfers: + +![](image1.png) + +## Tether large transfers (with ETH price on the chart): + +![](image2.png) + +## Use Cases + +- **Whale Activity Monitoring** +Large transfers often indicate movements by major holders or institutions. Identifying these transactions can provide insights into potential market shifts and price movements. +- **Suspicious Transaction Alerts** +If a sudden large transfer occurs without clear market indicators, it may suggest upcoming volatility, liquidation events, or even potential security threats. \ No newline at end of file diff --git a/src/docs/data-anomaly/large-usdc-usdt-mint/image1.png b/src/content/docs/resources/data-anomaly/large-usdc-usdt-mint/image1.png similarity index 100% rename from src/docs/data-anomaly/large-usdc-usdt-mint/image1.png rename to src/content/docs/resources/data-anomaly/large-usdc-usdt-mint/image1.png diff --git a/src/content/docs/resources/data-anomaly/large-usdc-usdt-mint/index.mdx b/src/content/docs/resources/data-anomaly/large-usdc-usdt-mint/index.mdx new file mode 100644 index 000000000..d6456845c --- /dev/null +++ b/src/content/docs/resources/data-anomaly/large-usdc-usdt-mint/index.mdx @@ -0,0 +1,24 @@ +--- +title: Large USDC-USDT Mint +author: Boris +description: Data Anomaly shows unusually big stablecoin minting events, highlighting potential major market moves or institutional activity. +datePublished: 2025-09-12 +dateModified: 2025-10-30 +--- + +## Definition + +**Large USDC-USDT Mint** Anomaly monitors and detects unusually large minting events of USDC and USDT stablecoins on the Ethereum blockchain. It tracks daily mint volumes and triggers alerts when the combined minting amount exceeds a predefined threshold (default: $1 billion USD). + +The data anomaly aggregates mint events from both USDC and USDT smart contracts and analyzes the total daily volume to identify significant market events that could indicate major institutional activity or market movements. + +![](image1.png) + +## Use Cases +- **Market Analysis**: Identifying periods of high stablecoin demand that may precede significant crypto market activity +- **Institutional Monitoring**: Detecting large-scale institutional entries or preparations for major market positions +- **Liquidity Tracking**: Understanding when substantial new liquidity is entering the crypto ecosystem +- **Risk Assessment**: Monitoring for unusual stablecoin supply expansion that could signal market stress or opportunity +- **Trading Insights**: Providing early indicators of potential market movements driven by large capital inflows + +The data anomaly helps traders, analysts, and institutions stay informed about significant stablecoin supply changes that often correlate with broader cryptocurrency market dynamics. \ No newline at end of file diff --git a/src/docs/data-anomaly/liquidations/image1.png b/src/content/docs/resources/data-anomaly/liquidations/image1.png similarity index 100% rename from src/docs/data-anomaly/liquidations/image1.png rename to src/content/docs/resources/data-anomaly/liquidations/image1.png diff --git a/src/content/docs/resources/data-anomaly/liquidations/index.mdx b/src/content/docs/resources/data-anomaly/liquidations/index.mdx new file mode 100644 index 000000000..8bf020b77 --- /dev/null +++ b/src/content/docs/resources/data-anomaly/liquidations/index.mdx @@ -0,0 +1,25 @@ +--- +title: Liquidations +author: Boris +description: Data Anomaly shows major forced sell-offs in the crypto market, signaling sudden spikes in leveraged trading losses. +datePublished: 2025-09-12 +dateModified: 2025-10-30 +--- + +## Definition + +**Liquidations** anomaly is designed to monitor significant liquidations on the blockchain. A rapid succession of anomalies indicates a sharp increase in the scale of these liquidations. + +A huge liquidation in the crypto space refers to the forced selling of a trader's position, typically on leveraged trades, when the market moves against them. In the context of cryptocurrencies, liquidation occurs when a trader borrows funds to trade (using margin or leverage) and the value of their position falls below a certain threshold, at which point the exchange automatically sells the assets to cover the loss. + +![](image1.png) + +## Use Cases + +- Real-Time Monitoring: The anomaly tracks total liquidations over a 1-hour rolling window. When the liquidation volume surpasses a predefined threshold (e.g., $1M), an anomaly is triggered, alerting the fund’s risk management team. +- Escalating Alert System: If multiple anomalies fire within a short period (e.g., 2 hours), the threshold doubles, indicating that the liquidation size is rapidly increasing. This warns the fund of an accelerating sell-off, potentially signaling a market crash or price correction. +- Automated Trading Response: Upon receiving the data anomaly, the hedge fund's automated trading bots can execute predefined strategies: +- Reduce Exposure: Automatically decrease leveraged positions to minimize risk during a potential downturn. + - Trigger Stop Losses: Close positions before liquidity dries up or prices fall drastically. + - Execute Hedging: Initiate hedging strategies, such as buying options or shorting correlated assets, to offset potential losses. + - Human Intervention: The risk management team receives the alert and analyzes the market conditions to determine if additional manual intervention is required. They might pause trading or adjust strategies based on market sentiment. \ No newline at end of file diff --git a/src/docs/data-anomaly/mvrv-danger-zone/image1.png b/src/content/docs/resources/data-anomaly/mvrv-danger-zone/image1.png similarity index 100% rename from src/docs/data-anomaly/mvrv-danger-zone/image1.png rename to src/content/docs/resources/data-anomaly/mvrv-danger-zone/image1.png diff --git a/src/content/docs/resources/data-anomaly/mvrv-danger-zone/index.mdx b/src/content/docs/resources/data-anomaly/mvrv-danger-zone/index.mdx new file mode 100644 index 000000000..0e95c2ce7 --- /dev/null +++ b/src/content/docs/resources/data-anomaly/mvrv-danger-zone/index.mdx @@ -0,0 +1,19 @@ +--- +title: MVRV Danger (Overvaluation) Zone +author: Boris +description: Data Anomaly shows potential overvaluation, highlighting periods of heightened risk for market corrections. +datePublished: 2025-09-12 +dateModified: 2025-10-30 +--- + +## Definition + +**MVRV Danger (Overvaluation) Zone** anomaly is triggered when the MVRV metric suggests that the asset is overvalued, indicating a potential risk of market correction. This anomaly activates when the current MVRV value exceeds the upper threshold based on historical MVRV spikes over recent time. It helps investors assess when the market may be becoming over-leveraged, signaling a heightened risk of asset overvaluation. + +![](image1.png) + +## Use Cases + +- MVRV can help institutional investors gauge market liquidity and risk exposure. Spikes in MVRV ratios can indicate that the market is becoming over-leveraged, while dips may signal safer entry points. +- Long-term investors can use MVRV to track market cycles and identify when it might be wise to enter or exit positions. +- The MVRV Danger Zone Data Anomaly becomes even more powerful when used in conjunction with the [MVRV Opportunity (Undervaluation) Zone](/data-anomaly/mvrv-opportunity-zone) Data Anomaly. While the Opportunity Data Anomaly identifies undervaluation and potential accumulation points, the Danger Anomaly warns of potential overvaluation and the risk of a price correction. By leveraging both anomalies, you can strategically time their entry and exit points. \ No newline at end of file diff --git a/src/docs/data-anomaly/mvrv-opportunity-zone/image1.png b/src/content/docs/resources/data-anomaly/mvrv-opportunity-zone/image1.png similarity index 100% rename from src/docs/data-anomaly/mvrv-opportunity-zone/image1.png rename to src/content/docs/resources/data-anomaly/mvrv-opportunity-zone/image1.png diff --git a/src/content/docs/resources/data-anomaly/mvrv-opportunity-zone/index.mdx b/src/content/docs/resources/data-anomaly/mvrv-opportunity-zone/index.mdx new file mode 100644 index 000000000..37a2fd69c --- /dev/null +++ b/src/content/docs/resources/data-anomaly/mvrv-opportunity-zone/index.mdx @@ -0,0 +1,18 @@ +--- +title: MVRV Opportunity (Undervaluation) Zone +author: Boris +description: Data Anomaly shows potential undervaluation, signaling favorable entry points for long-term investors. +datePublished: 2025-09-12 +dateModified: 2025-10-30 +--- + +## Definition + +**MVRV Opportunity (Undervaluation) Zone** Data Anomaly is triggered when the MVRV metric indicates that the asset is undervalued, signaling a favorable entry point for long-term investors. This anomaly activates when the current MVRV value falls below the lower threshold based on historical MVRV dips over the recent period, highlighting potential accumulation opportunities. + +![](image1.png) + +## Use Cases + +- This anomaly is valuable for long-term investors tracking market cycles to identify ideal entry points for accumulating assets. +- The MVRV Opportunity Zone Data Anomaly becomes even more powerful when used in conjunction with the [MVRV Danger (Overvaluation) Zone](/data-anomaly/mvrv-danger-zone) Data Anomaly. While the Opportunity Data Anomaly identifies undervaluation and potential accumulation points, the Danger Anomaly warns of potential overvaluation and the risk of a price correction. By leveraging both anomalies, you can strategically time their entry and exit points. \ No newline at end of file diff --git a/src/docs/data-anomaly/network-activity-price-divergence/image1.png b/src/content/docs/resources/data-anomaly/network-activity-price-divergence/image1.png similarity index 100% rename from src/docs/data-anomaly/network-activity-price-divergence/image1.png rename to src/content/docs/resources/data-anomaly/network-activity-price-divergence/image1.png diff --git a/src/docs/data-anomaly/network-activity-price-divergence/image2.png b/src/content/docs/resources/data-anomaly/network-activity-price-divergence/image2.png similarity index 100% rename from src/docs/data-anomaly/network-activity-price-divergence/image2.png rename to src/content/docs/resources/data-anomaly/network-activity-price-divergence/image2.png diff --git a/src/docs/data-anomaly/network-activity-price-divergence/image3.png b/src/content/docs/resources/data-anomaly/network-activity-price-divergence/image3.png similarity index 100% rename from src/docs/data-anomaly/network-activity-price-divergence/image3.png rename to src/content/docs/resources/data-anomaly/network-activity-price-divergence/image3.png diff --git a/src/docs/data-anomaly/network-activity-price-divergence/image4.png b/src/content/docs/resources/data-anomaly/network-activity-price-divergence/image4.png similarity index 100% rename from src/docs/data-anomaly/network-activity-price-divergence/image4.png rename to src/content/docs/resources/data-anomaly/network-activity-price-divergence/image4.png diff --git a/src/docs/data-anomaly/network-activity-price-divergence/image5.png b/src/content/docs/resources/data-anomaly/network-activity-price-divergence/image5.png similarity index 100% rename from src/docs/data-anomaly/network-activity-price-divergence/image5.png rename to src/content/docs/resources/data-anomaly/network-activity-price-divergence/image5.png diff --git a/src/content/docs/resources/data-anomaly/network-activity-price-divergence/index.mdx b/src/content/docs/resources/data-anomaly/network-activity-price-divergence/index.mdx new file mode 100644 index 000000000..78f742331 --- /dev/null +++ b/src/content/docs/resources/data-anomaly/network-activity-price-divergence/index.mdx @@ -0,0 +1,41 @@ +--- +title: Network Activity - Price Divergence +author: Boris +description: Data Anomaly shows price surges not supported by network growth, highlighting potentially unsustainable or speculative moves. +datePublished: 2025-09-12 +dateModified: 2025-10-30 +--- + +## Definition + +**Network Activity - Price Divergence** Data Anomaly identifies anomalous price surges that are not accompanied by a corresponding rise in network activity (growth). It flags potentially unsustainable or speculative price increases that are not backed by healthy user adoption or blockchain usage. + +The detection logic is based on the modified z-score applied to the price-to-growth momentum ratio, using Median Absolute Deviation (MAD) for robustness against outliers. We smooth raw metrics to reduce noise and focus on consistent deviations from historical behavior. + +The anomaly is triggered only if the price growth exceeds 3% on the same day — ensuring the alert is relevant for significant bullish moves. + +## Use Cases + +- **Token Due Diligence** +Identify tokens that are experiencing unusual price rallies not supported by on-chain fundamentals. This helps investors filter hype-driven assets during bull runs. +- **Risk Monitoring for Listings** +Exchanges or asset managers can use this anomaly to detect early signs of artificial inflation or wash trading prior to token listings or announcements. +- **Alpha Signal for Reversals** +Divergence between price and network activity may indicate upcoming price correction. Traders can use this anomaly as a contrarian indicator to time exits or hedging strategies. + +## Examples: + +- **Ethereum**: +![](image1.png) + +- **Dogecoin**: +![](image2.png) + +- **XRP**: +![](image3.png) + +- **Chainlink**: +![](image4.png) + +- **Cardano**: +![](image5.png) diff --git a/src/docs/data-anomaly/project-in-trends/image1.png b/src/content/docs/resources/data-anomaly/project-in-trends/image1.png similarity index 100% rename from src/docs/data-anomaly/project-in-trends/image1.png rename to src/content/docs/resources/data-anomaly/project-in-trends/image1.png diff --git a/src/docs/data-anomaly/project-in-trends/image2.png b/src/content/docs/resources/data-anomaly/project-in-trends/image2.png similarity index 100% rename from src/docs/data-anomaly/project-in-trends/image2.png rename to src/content/docs/resources/data-anomaly/project-in-trends/image2.png diff --git a/src/docs/data-anomaly/project-in-trends/image3.png b/src/content/docs/resources/data-anomaly/project-in-trends/image3.png similarity index 100% rename from src/docs/data-anomaly/project-in-trends/image3.png rename to src/content/docs/resources/data-anomaly/project-in-trends/image3.png diff --git a/src/content/docs/resources/data-anomaly/project-in-trends/index.mdx b/src/content/docs/resources/data-anomaly/project-in-trends/index.mdx new file mode 100644 index 000000000..e24e196db --- /dev/null +++ b/src/content/docs/resources/data-anomaly/project-in-trends/index.mdx @@ -0,0 +1,23 @@ +--- +title: Project in Trends +author: Boris +description: Data Anomaly shows crypto tokens gaining major social buzz, signaling trending projects and potential market opportunities. +datePublished: 2025-09-12 +dateModified: 2025-10-30 +--- + +## Definition + +**Project in Trends** Anomaly is triggered when a specific crypto token (excluding Ethereum and Bitcoin) gains significant traction in online discussions, placing it among the top 10 most-mentioned words in crypto-related conversations across social media platforms. By leveraging real-time data, the ‘project in trends’ anomaly helps users identify tokens that are generating buzz, allowing them to react quickly to market trends, sentiment shifts, and potential investment opportunities. + +- Uniswap anomalies: +![](image1.png) +- Tron anomalies: +![](image2.png) +- Dogecoin anomalies: +![](image3.png) + +## Usecases + +- **Early Trend Detection for Traders** +A sudden surge in mentions can indicate both hype and risk. If a token is trending due to controversy or security issues, users can take precautionary measures to protect their investments. \ No newline at end of file diff --git a/src/docs/data-anomaly/social-dev-score/image1.png b/src/content/docs/resources/data-anomaly/social-dev-score/image1.png similarity index 100% rename from src/docs/data-anomaly/social-dev-score/image1.png rename to src/content/docs/resources/data-anomaly/social-dev-score/image1.png diff --git a/src/content/docs/resources/data-anomaly/social-dev-score/index.mdx b/src/content/docs/resources/data-anomaly/social-dev-score/index.mdx new file mode 100644 index 000000000..4383d9212 --- /dev/null +++ b/src/content/docs/resources/data-anomaly/social-dev-score/index.mdx @@ -0,0 +1,30 @@ +--- +title: Social-Dev Score +author: Boris +description: Data Anomaly shows combined social and development activity to highlight trends and anomalies in crypto assets. +datePublished: 2025-09-12 +dateModified: 2025-10-30 +--- + +## Definition + +**Social-Dev Score** Anomaly combines social media metrics and development activity to create a comprehensive scoring system for crypto assets. It helps identify notable trends and anomalies in both social engagement and development activity. + +![](image1.png) + +## **Score Composition** + +- **Social Score (60% weight)** + - Twitter volume + - Reddit community activity + - Telegram dominance + - 4chan discussions +- **Developer Score (40% weight)** + - GitHub activity + +## **Use Cases** + +- Identify assets with sudden spikes in social interest +- Monitor developer activity trends +- Detect coordinated social media campaigns +- Track overall project health through combined metrics \ No newline at end of file diff --git a/src/docs/data-anomaly/social-dominance-spike/image1.png b/src/content/docs/resources/data-anomaly/social-dominance-spike/image1.png similarity index 100% rename from src/docs/data-anomaly/social-dominance-spike/image1.png rename to src/content/docs/resources/data-anomaly/social-dominance-spike/image1.png diff --git a/src/content/docs/resources/data-anomaly/social-dominance-spike/index.mdx b/src/content/docs/resources/data-anomaly/social-dominance-spike/index.mdx new file mode 100644 index 000000000..9639a5987 --- /dev/null +++ b/src/content/docs/resources/data-anomaly/social-dominance-spike/index.mdx @@ -0,0 +1,22 @@ +--- +title: Social Dominance Spike +author: Boris +description: Data Anomaly shows unusual surges in social attention for crypto assets, signaling potential market interest or momentum shifts. +datePublished: 2025-09-12 +dateModified: 2025-10-30 +--- + +## Definition + +**Social Dominance Spike** Anomaly identifies abnormal spikes in social dominance metrics for cryptocurrency assets using statistical z-score analysis. It monitors pre-calculated z-scores from social data and detects when assets experience unusually high or low levels of social attention compared to their historical patterns. + +The anomaly processes z-score values that represent how many standard deviations an asset's current social dominance deviates from its historical average, triggering alerts when these values exceed statistical significance thresholds (default: 3.0 standard deviations). + +![](image1.png) + +## Use Cases + +- **Trend Detection**: Identifying cryptocurrencies experiencing viral social media attention or sudden drops in community interest +- **Market Sentiment Analysis**: Understanding shifts in public perception and social sentiment toward specific assets before they impact prices +- **Risk Management**: Detecting when assets are losing social traction, potentially indicating weakening fundamentals or community support +- **Trading Opportunities**: Finding assets gaining unexpected social momentum that may precede price movements \ No newline at end of file diff --git a/src/docs/data-anomaly/usdc-borrow/image1.png b/src/content/docs/resources/data-anomaly/usdc-borrow/image1.png similarity index 100% rename from src/docs/data-anomaly/usdc-borrow/image1.png rename to src/content/docs/resources/data-anomaly/usdc-borrow/image1.png diff --git a/src/content/docs/resources/data-anomaly/usdc-borrow/index.mdx b/src/content/docs/resources/data-anomaly/usdc-borrow/index.mdx new file mode 100644 index 000000000..bfcbc843a --- /dev/null +++ b/src/content/docs/resources/data-anomaly/usdc-borrow/index.mdx @@ -0,0 +1,35 @@ +--- +title: USDC Borrow +author: Boris +description: Data Anomaly shows changes in USDC loans across DeFi platforms, highlighting shifts in market liquidity and borrowing activity. +datePublished: 2025-09-12 +dateModified: 2025-10-30 +--- + +## Definition + +**USDC Borrow** anomaly monitors significant changes in the total amount of USDC borrowed across major decentralized finance (DeFi) platforms. This anomaly is calculated by summing the USDC borrowed in AAVE and Compound, providing insight into the market's borrowing behavior and liquidity dynamics. + +**USDC Borrow** represents the aggregated value of USDC that market participants are borrowing on these platforms. An increase in borrowing can indicate rising demand for liquidity, increased leveraging, or bullish market sentiment, whereas a decrease might suggest a more cautious approach or reduced market activity. + +![](image1.png) + +## Use Cases + +- **Market Sentiment Analysis**: + + By tracking the combined USDC borrowing on AAVE v3 and Compound v3, traders can gauge overall market sentiment. A significant uptick in borrow activity may signal confidence and aggressive positioning, while a downturn might indicate risk aversion. + +- **Liquidity Assessment**: + + Monitoring USDC borrow levels provides insights into liquidity conditions within the DeFi ecosystem. High borrowing activity often reflects strong liquidity and market participation, whereas lower levels could point to tightening liquidity. + +- **Risk Management**: + + Elevated borrowing can serve as an early indicator of potential market volatility. By recognizing these trends, traders and risk managers can adjust their positions, hedge exposures, or prepare for possible market corrections. + +- **Arbitrage and Yield Strategies**: + + Shifts in USDC borrow rates can impact interest rates and reward structures on lending platforms. Traders can exploit discrepancies between these platforms for arbitrage opportunities or optimize yield farming strategies based on borrowing trends. + +This anomaly provides a valuable overview of borrowing dynamics across key DeFi platforms, enabling traders to better interpret market trends, assess liquidity, and implement more informed risk management and trading strategies. \ No newline at end of file diff --git a/src/content/docs/resources/labels/airdrop-receiver/index.mdx b/src/content/docs/resources/labels/airdrop-receiver/index.mdx new file mode 100644 index 000000000..7f694b669 --- /dev/null +++ b/src/content/docs/resources/labels/airdrop-receiver/index.mdx @@ -0,0 +1,23 @@ +--- +title: Airdrop Receiver +author: Alex.g +description: Airdrop Receiver Label +datePublished: 2023-06-01 +dateModified: 2025-01-24 +--- + +## Description + +The airdrop_receiver label is assigned to wallet addresses that have received any airdrops. + +## [Label fqn](/labels/label-fqn) + +`santiment/airdrop_receiver:v1` + +## Label Examples + +[0x1082d6e47d0e7148b9a2e5517a91f9822a80a3b2](https://etherscan.io/address/0x1082d6e47d0e7148b9a2e5517a91f9822a80a3b2) + +## Available Blockchains + +* ethereum diff --git a/src/content/docs/resources/labels/airdrop-sender/index.mdx b/src/content/docs/resources/labels/airdrop-sender/index.mdx new file mode 100644 index 000000000..5f3bb94d4 --- /dev/null +++ b/src/content/docs/resources/labels/airdrop-sender/index.mdx @@ -0,0 +1,26 @@ +--- +title: Airdrop Sender +author: Alex.g +description: Airdrop Sender Label +datePublished: 2023-06-01 +dateModified: 2025-01-24 +--- + +## Description + +The airdrop_sender label is used to identify wallet addresses that are associated with sending airdrops. Airdrops are a marketing strategy commonly used in the cryptocurrency space to distribute tokens or digital assets to a specific group of recipients for promotional or community-building purposes. + +By applying the airdrop_sender label to specific addresses, you can quickly identify wallets that have been involved in initiating and sending airdrops. This label helps provide insights into the participation of wallets in airdrop campaigns and token distributions. + +## [Label fqn](/labels/label-fqn) + +`santiment/airdrop_sender:v1` + +## Label Examples + +DyDx Airdrop Address: [0x639192d54431f8c816368d3fb4107bc168d0e871](https://etherscan.io/address/0x639192d54431f8c816368d3fb4107bc168d0e871) + + +## Available Blockchains + +* ethereum diff --git a/src/content/docs/resources/labels/blocked/index.mdx b/src/content/docs/resources/labels/blocked/index.mdx new file mode 100644 index 000000000..84a88b022 --- /dev/null +++ b/src/content/docs/resources/labels/blocked/index.mdx @@ -0,0 +1,24 @@ +--- +title: Blocked Label +author: Vladimir +description: Blocked Label +datePublished: 2023-03-23 +dateModified: 2025-01-24 +--- + +## Description + +This address has been blocked by an authorized entity. + +## [Label fqn](/labels/label-fqn) + +`santiment/blocked:v1` + +## Label Examples +Blocked address: [0x0000ef2a62c7c7580db66bbb50e1a913f0cc0615](https://etherscan.io/address/0x0000ef2a62c7c7580db66bbb50e1a913f0cc0615) + +Blocked address: [0x008fe40574e881e7247b50b991c0cc057d66647f](https://etherscan.io/address/0x008fe40574e881e7247b50b991c0cc057d66647f) + +## Available Blockchains + +- ethereum diff --git a/src/content/docs/resources/labels/bridge/index.mdx b/src/content/docs/resources/labels/bridge/index.mdx new file mode 100644 index 000000000..21ad7b984 --- /dev/null +++ b/src/content/docs/resources/labels/bridge/index.mdx @@ -0,0 +1,26 @@ +--- +title: Bridge +author: Vladimir +description: Bridge label +datePublished: 2023-04-18 +dateModified: 2025-01-24 +--- + +## Description + +Crypto bridges enable the exchange of cryptocurrencies across different blockchains, +allowing users to access assets that were previously inaccessible. +They increase liquidity and interoperability between blockchain networks. Examples include Wrapped Bitcoin and the Binance Smart Chain. + + +## [Label fqn](/labels/label-fqn) + +`santiment/bridge:v1` + +## Label Examples +Celer Bridge "ethereum: polygon" address: [0x5427FEFA711Eff984124bFBB1AB6fbf5E3DA1820](https://etherscan.io/address/0x5427FEFA711Eff984124bFBB1AB6fbf5E3DA1820) + +Debridge Bridge "ethereum: polygon" address: [0x43dE2d77BF8027e25dBD179B491e8d64f38398aA](https://etherscan.io/address/0x43dE2d77BF8027e25dBD179B491e8d64f38398aA) +## Available Blockchains + +* ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/cefi/index.mdx b/src/content/docs/resources/labels/cefi/index.mdx new file mode 100644 index 000000000..9def8c59e --- /dev/null +++ b/src/content/docs/resources/labels/cefi/index.mdx @@ -0,0 +1,31 @@ +--- +title: CeFi +author: Alex +description: CeFi label +datePublished: 2023-03-22 +dateModified: 2025-11-13 +--- + +## Description + +Centralized Finance (CeFi) refers to financial services and applications that operate on blockchain and are provided by centralized entities or organizations, such as exchanges, banks, financial institutions, etc. Unlike DeFi, which are managed by smart-contracts, CeFi are rely on the central authority or entity which manages the financial transactions, executes trades, and stores users' assets. + +CeFi platforms typically offer higher speed, liquidity, and convenience compared to decentralized finance (DeFi) platforms, but they may also have higher fees, lower privacy, and greater risks. + +CeFi group includes other labels such as [centralized exchange](/labels/centralized-exchange), [fund](/labels/fund) and others. Visit [this page](labels/#domains) to see full child labels list. + +## [Label fqn](/labels/label-fqn) + +`santiment/cefi:v1` + +## Label Examples + +Binance centralized exchange address: [0x28c6c06298d514db089934071355e5743bf21d60](https://etherscan.io/address/0x28c6c06298d514db089934071355e5743bf21d60) + +Alameda Fund address: [0x93c08a3168fc469f3fc165cd3a471d19a37ca19e](https://etherscan.io/address/0x93c08a3168fc469f3fc165cd3a471d19a37ca19e) + +## Available Blockchains + +* ethereum + +Bitcoin network support for this label has been temporarily suspended. diff --git a/src/content/docs/resources/labels/centralized-exchange/index.mdx b/src/content/docs/resources/labels/centralized-exchange/index.mdx new file mode 100644 index 000000000..8b8c41170 --- /dev/null +++ b/src/content/docs/resources/labels/centralized-exchange/index.mdx @@ -0,0 +1,210 @@ +--- +title: Centralized exchange +author: Alex +description: Centralized exhange label +datePublished: 2023-03-21 +dateModified: 2025-11-13 +--- + +## Description + +The centralized exchange label is used to identify wallet addresses that belong to centralized cryptocurrency exchanges (e.g. Binance, Coinbase, etc). + +Centralzied exchanges (CEX) are operated by a central authority or entity that manages the exchange, executes trades, and stores users' digital assets. CEXs typically have a user-friendly interface and offer high liquidity, faster transaction processing, and a wide range of trading pairs. + +## [Label fqn](/labels/label-fqn) + +`santiment/centralized_exchange:v1` + +## Limitations + +Please note that there's no way to know whether you collected ALL addresses of the particular exchange. Although we constantly working on adding new labels it's safe to assume there are still exchange addresses we did not label yet. + +## Label Examples + +Binance centralized exchange address: [0x28c6c06298d514db089934071355e5743bf21d60](https://etherscan.io/address/0x28c6c06298d514db089934071355e5743bf21d60) + +Huobi centralized exchange address: [0x5c985e89dde482efe97ea9f1950ad149eb73829b](https://etherscan.io/address/0x5c985e89dde482efe97ea9f1950ad149eb73829b) + +## Available Blockchains + +* ethereum + +Bitcoin network support for this label has been temporarily suspended. + +## See Also + +**List of centralized exchanges we label addresses for:** + +``` + Abcc + Alcumex_exchange + Aprobit + Artis_turba_exchange + Arzpaya.com + Ataix + Azbit + Beaxy + Beldex + Bgogo + Bibox + Bidesk + Bigone + Biki.com + Bilaxy + Binance + Bit-z + Bit2c + Bitazza + Bitbase + Bitbee + Bitblinx + Bitci + Bitebtc + Bitexlive + Bitfinex + Bitflyer + Bitfront + Bitgrail + Bithumb + Bitkeep + Bitkub + Bitmart + Bitmax + Bitmex + Bitpanda + Bitrue + Bitstamp + Bitstorage + Bittrex + Bitun.io + Bity.com + Bitzlato + Blockfolio + Blocktrades_exchange + Bololex.com + Btc-alpha_exchange + Btc-e + Btcrush + Btcturk + Bw.com + Bybit + C-cex + C2cx + Cakedefi + Cambochanger + Cashierest + Catex_exchange + Cex.io + Chainx + Changelly + Cobinhood + Coinbase + Coinbene + Coindcx + Coindelta + Coindhan + Coinex + Coinexchange.io + Coinhako + Coinmetro_exchange + Coinnest + Coinone + Coinsquare + Coinswitch + Coinw + Coss.io + Crex24 + Crypto.com + Cryptopia + Cryptsy + Currency.com + Deribit + Digifinex + Dmex + Eidoo + Eigen_fx + Eterbase + Etherc + Exchange_a + Exmo + Faa.st + Fatbtc + Fcoin + Firi + Fixedfloat + Flata.exchange + Flybit + Folgory_exchange + Ftx + Gate.io + Gatehub + Gbx + Gemini + Ggbtc.com + Gopax + Hitbtc + Hoo.com + Hotbit + Huobi + Idax.global + Indodax + Indoex_ltd + Jpmarket.cc + Kickex + Korbit + Kraken + Kryptono + Kucoin + Kuna.io + Latoken + Liqui.io + Liquid + Livecoin.net + Localethereum + Luno + Maicoin + Maskex + Mercatox + Mexc + Minedtrade.com + Mxc + Nbx + Nexbit_pro + Oax + Okcoin + Okex + Omgfin_exchange + Otcbtc + Panda.exchange + Paribu + Peatio + Poloniex + Qryptos + Quadrigacx + Quantaex + Refund + Remitano + Shapeshift + Southxchange + Sparrow_exchange + Streamity: streamdesk + Swissborg + Switchain + Tagz + Tidex + Tokocrypto + Topbtc + Trade.io + Uex + Upbit + Vinex + Wex + Whitebit + Wintermute + Xtcom + Yobit.net + Yoobtc + Yunbi + Zb.com +``` \ No newline at end of file diff --git a/src/content/docs/resources/labels/charity/index.mdx b/src/content/docs/resources/labels/charity/index.mdx new file mode 100644 index 000000000..b37da0fde --- /dev/null +++ b/src/content/docs/resources/labels/charity/index.mdx @@ -0,0 +1,25 @@ +--- +title: Charity +author: Vladimir +description: Charity label +datePublished: 2023-03-23 +dateModified: 2025-01-24 +--- + +## Description + +This label is assigned for project addresses that are involved in charitable or nonprofit endeavors. + +## [Label fqn](/labels/label-fqn) + +`santiment/charity:v1` + +## Label Examples + +Endaoment: [0x00259ef939eb043cd81613f18ebfdb10f250155c](https://etherscan.io/address/0x00259ef939eb043cd81613f18ebfdb10f250155c) + +Endaoment Astraea Foundation: [0xa04ede9f75f54e28c74b1c75d9b44e7418fee4dd](https://etherscan.io/address/0xa04ede9f75f54e28c74b1c75d9b44e7418fee4dd) + +## Available Blockchains + +- ethereum diff --git a/src/content/docs/resources/labels/closed/index.mdx b/src/content/docs/resources/labels/closed/index.mdx new file mode 100644 index 000000000..0446ba4cb --- /dev/null +++ b/src/content/docs/resources/labels/closed/index.mdx @@ -0,0 +1,25 @@ +--- +title: Closed +author: Vladimir +description: Closed label +datePublished: 2023-04-18 +dateModified: 2025-01-24 +--- + +## Description + +Label `closed` used to indicate that an address's owner has announced the end of their project or business operations. + +## [Label fqn](/labels/label-fqn) + +`santiment/closed:v1` + +## Label Examples + +Plaugeinc.io Closed: [0x00ee67308138958a08c463ed144b86899537c923](https://etherscan.io/address/0x00ee67308138958a08c463ed144b86899537c923) +ethcash.online Closed: [0x0135c9a7bff72aa26e1d105ff5000e454e4dde7a](https://etherscan.io/address/0x0135c9a7bff72aa26e1d105ff5000e454e4dde7a) + + +## Available Blockchains + +- ethereum diff --git a/src/content/docs/resources/labels/cold-wallet/index.mdx b/src/content/docs/resources/labels/cold-wallet/index.mdx new file mode 100644 index 000000000..19fb04df1 --- /dev/null +++ b/src/content/docs/resources/labels/cold-wallet/index.mdx @@ -0,0 +1,22 @@ +--- +title: Cold wallet +author: Alex +description: Cold wallet label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +Label `cold_wallet` refers to a type of wallet that is commonly used by centralized exchanges or other entities as a secure storage solution for cryptocurrency assets. + +## [Label fqn](/labels/label-fqn) + +`santiment/cold_wallet:v1` + +## Label Examples +Bitfinex Cold Wallet Address: [0x742d35Cc6634C0532925a3b844Bc454e4438f44e](https://etherscan.io/address/0x742d35Cc6634C0532925a3b844Bc454e4438f44e) + +## Available Blockchains + +* ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/contract/index.mdx b/src/content/docs/resources/labels/contract/index.mdx new file mode 100644 index 000000000..8712d198c --- /dev/null +++ b/src/content/docs/resources/labels/contract/index.mdx @@ -0,0 +1,26 @@ +--- +title: Contract +author: Alex +description: Smart contract label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +The label `contract` denotes any address which is a smart contract. + +## [Label fqn](/labels/label-fqn) + +`santiment/contract:v1` + +## Label Examples + +[0x9cfac1d8fe48732b8c62628267a83819cb7b496f](https://etherscan.io/address/0x9cfac1d8fe48732b8c62628267a83819cb7b496f) + +[0x98c3d3183c4b8a650614ad179a1a98be0a8d6b8e](https://etherscan.io/address/0x98c3d3183c4b8a650614ad179a1a98be0a8d6b8e) + + +## Available Blockchains + +* ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/dead-address/index.mdx b/src/content/docs/resources/labels/dead-address/index.mdx new file mode 100644 index 000000000..39e14ae6f --- /dev/null +++ b/src/content/docs/resources/labels/dead-address/index.mdx @@ -0,0 +1,57 @@ +--- +title: Dead address +author: Alex +description: Dead address label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +Addresses that can not be owed by anyone and/or used for tokens burning. Also called as cemetary addresses. + +## [Label fqn](/labels/label-fqn) + +`santiment/dead_address:v1` + +## Label examples + +Fixed set of ETH addresses: + +``` +0x0000000000000000000000000000000000000000 +0x0000000000000000000000000000000000000001 +0x0000000000000000000000000000000000000002 +0x0000000000000000000000000000000000000003 +0x0000000000000000000000000000000000000004 +0x0000000000000000000000000000000000000005 +0x0000000000000000000000000000000000000006 +0x0000000000000000000000000000000000000007 +0x0000000000000000000000000000000000000008 +0x0000000000000000000000000000000000000009 +0x000000000000000000000000000000000000dead +0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead +0x1111111111111111111111111111111111111111 +0x2222222222222222222222222222222222222222 +0x3333333333333333333333333333333333333333 +0x4444444444444444444444444444444444444444 +0x5555555555555555555555555555555555555555 +0x6666666666666666666666666666666666666666 +0x7777777777777777777777777777777777777777 +0x8888888888888888888888888888888888888888 +0x9999999999999999999999999999999999999999 +0x00000000000000000000045261d4ee77acdb3286 +0x0123456789012345678901234567890123456789 +0x1234567890123456789012345678901234567890 +0xdead000000000000000042069420694206942069 +0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +0xcccccccccccccccccccccccccccccccccccccccc +0xdddddddddddddddddddddddddddddddddddddddd +0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee +0xffffffffffffffffffffffffffffffffffffffff +``` + +## Available Blockchain: + +* ethereum diff --git a/src/content/docs/resources/labels/decentralized-exchange/index.mdx b/src/content/docs/resources/labels/decentralized-exchange/index.mdx new file mode 100644 index 000000000..043a0b708 --- /dev/null +++ b/src/content/docs/resources/labels/decentralized-exchange/index.mdx @@ -0,0 +1,66 @@ +--- +title: Decentralized exchange +author: Alex +description: Decentralized exchange label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +Decentralized exchange label denotes an address belonging to a decentralized exchange (including dex pools, dex factories, etc). + +Decentralzied exhcnage (DEX) is a decentralized platform that operate on a peer-to-peer (P2P) network, without a central authority or entity. DEXs allow users to trade cryptocurrencies directly with each other, using smart contracts and blockchain technology. Unlike centralzied exchanges (CEX), DEXs offer greater privacy, security, and transparency, as users have full control over their assets and do not need to trust a third party to execute trades. However, DEXs may have lower liquidity, slower transaction processing, and fewer trading pairs compared to CEXs. + +## [Label fqn](/labels/label-fqn) + +`santiment/decentralized_exchange:v1` + +## Label Examples + +Curve pool [0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7](https://etherscan.io/address/0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7) + +Uniswap v2 DEX (UniswapV2Pair) [0x2c5050a646a36fb22f1a1137665e64393b486139](https://etherscan.io/address/0x2c5050a646a36fb22f1a1137665e64393b486139) + + +## Available Blockchains + +* ethereum + +**List of decentralized exchanges we label addresses for:** + +``` +1Inch +Allbit +Ariswap +Balancer +Balancer_v1 +Bamboodefi +Bancor +Bancor_v1 +Bancor_v2 +Chickenswap +Curve +Defiswap +Dodo +Dydx +Elk +Empiredex +Jpegd +Kwikswap +Kyberswap +Lido +Maker +Mooniswap +Radioshack +Shibaswap +Standardtech +Sumswap_v2 +Sushi +Sushiswap_v2 +Uniswap +Uniswap_v1 +Uniswap_v2 +Uniswap_v3 +Youswap +``` \ No newline at end of file diff --git a/src/content/docs/resources/labels/defi/index.mdx b/src/content/docs/resources/labels/defi/index.mdx new file mode 100644 index 000000000..36c63f97e --- /dev/null +++ b/src/content/docs/resources/labels/defi/index.mdx @@ -0,0 +1,28 @@ +--- +title: DeFi +author: Alex +description: DeFi label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +The DeFi label is used to identify wallet addresses that are involved in decentralized finance (DeFi) activities. By using the DeFi label, you quickly identify which wallets are involved in DeFi activities and gain a better understanding of the DeFi ecosystem. + +DeFi group includes other labels such as [decentralized exchange](/labels/decentralized-exchange) and more. Visit [this page](labels/#domains) to see full child labels list. + +## [Label fqn](/labels/label-fqn) + +`santiment/defi:v1` + +## Label Examples + +Curve pool [0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7](https://etherscan.io/address/0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7) + +Gnosis bridge (xDAI) [0x4aa42145Aa6Ebf72e164C9bBC74fbD3788045016](https://etherscan.io/address/0x4aa42145Aa6Ebf72e164C9bBC74fbD3788045016) + +## Available Blockchains + +- ethereum + diff --git a/src/docs/labels/deposit/deposit-withdrawal.png b/src/content/docs/resources/labels/deposit/deposit-withdrawal.png similarity index 100% rename from src/docs/labels/deposit/deposit-withdrawal.png rename to src/content/docs/resources/labels/deposit/deposit-withdrawal.png diff --git a/src/content/docs/resources/labels/deposit/index.mdx b/src/content/docs/resources/labels/deposit/index.mdx new file mode 100644 index 000000000..e798897a4 --- /dev/null +++ b/src/content/docs/resources/labels/deposit/index.mdx @@ -0,0 +1,35 @@ +--- +title: Deposit +author: Alex +description: Deposit address label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +A deposit address is an address that belongs to some entity (e.g. centralized exchange) and used by that entity in order to distinguish between deposit transactions of different users. + +The address is considered as a deposit address if it satisfies 2 conditions: + +1. The address sends funds to a single entity only (single entity doesn’t mean single address; some entities owe few addresses) +2. The address is not the entity itself it sends funds to. + +Most common case is a centralized exhcnage deposit. See the details on the picture below. + +![deposit_address](deposit-withdrawal.png) + +## [Label fqn](/labels/label-fqn) + +`santiment/deposit:v1` + +## Label Examples + +Kucoin deposit address: [0xb50a586be6a5542c0da84ff42de0ebdf8761203c](https://etherscan.io/address/0xb50a586be6a5542c0da84ff42de0ebdf8761203c) + +Gate.io deposit address: [0x11e67b9ca21ae5ab385a31d03929bd0cc1c96bec](https://etherscan.io/address/0x11e67b9ca21ae5ab385a31d03929bd0cc1c96bec) + + +## Available Blockchains + +* ethereum diff --git a/src/content/docs/resources/labels/derivatives/index.mdx b/src/content/docs/resources/labels/derivatives/index.mdx new file mode 100644 index 000000000..2e129cb5c --- /dev/null +++ b/src/content/docs/resources/labels/derivatives/index.mdx @@ -0,0 +1,28 @@ +--- +title: Derivatives Label +author: Vladimir +description: Derivatives Label +datePublished: 2023-03-23 +dateModified: 2025-01-24 +--- + +## Description +Label used for addresses that are used in derivatives projects. + +Crypto derivatives function similarly to traditional derivatives, +where a buyer and a seller engage in a contractual agreement to trade an underlying asset. +These assets are sold at a prearranged time and price. + + +## [Label fqn](/labels/label-fqn) + +`santiment/derivatives:v1` + +## Label Examples +Synthetix Exchange State [0x545973f28950f50fc6c7f52aab4ad214a27c0564](https://etherscan.io/address/0x545973f28950f50fc6c7f52aab4ad214a27c0564) + +Synthetix Token State sEUR [0x6568d9e750fc44af00f857885dfb8281c00529c4](https://etherscan.io/address/0x6568d9e750fc44af00f857885dfb8281c00529c4) + +## Available Blockchains + +* ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/dex-user/index.mdx b/src/content/docs/resources/labels/dex-user/index.mdx new file mode 100644 index 000000000..49d09ded1 --- /dev/null +++ b/src/content/docs/resources/labels/dex-user/index.mdx @@ -0,0 +1,24 @@ +--- +title: DEX user +author: Katsiaryna +description: label +datePublished: 2023-03-23 +dateModified: 2025-01-24 +--- + +## Description + +The label denotes an address that traded on at least one DEX. + +## [Label fqn](/labels/label-fqn) + +`santiment/dex_user:v1` + + +## Label Examples + +[0x708c9d44eafac41fa7217bd8390fc2b18613e739](https://etherscan.io/address/0x708c9d44eafac41fa7217bd8390fc2b18613e739) + +## Available Blockchains + +* Ethereum diff --git a/src/content/docs/resources/labels/dsproxy/index.mdx b/src/content/docs/resources/labels/dsproxy/index.mdx new file mode 100644 index 000000000..b35dd9a3e --- /dev/null +++ b/src/content/docs/resources/labels/dsproxy/index.mdx @@ -0,0 +1,22 @@ +--- +title: DSproxy +author: Vladimir +description: DSproxy Label +datePublished: 2023-04-25 +dateModified: 2025-01-24 +--- + +## Description + +DSProxy, developed by DappHub, is a smart wallet that offers a unique feature allowing developers to execute multiple +contract calls in a single transaction. In contrast to vanilla externally owned accounts (EOAs), which are restricted +to interacting with just one contract per transaction, DSProxy provides greater functionality and flexibility for +executing complex actions on the Ethereum blockchain. + +## [Label fqn](/labels/label-fqn) + +`santiment/dsproxy:v1` + +## Available Blockchains + +* ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/erc1155/index.mdx b/src/content/docs/resources/labels/erc1155/index.mdx new file mode 100644 index 000000000..c4a09a240 --- /dev/null +++ b/src/content/docs/resources/labels/erc1155/index.mdx @@ -0,0 +1,27 @@ +--- +title: ERC1155 +author: Alex +description: ERC1155 standart contract label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +Denotes a smart contract that follows erc-1155 standart. + + +ERC1155 is a multi-token standard developed on the Ethereum blockchain that allows for the creation of fungible +and non-fungible tokens within a single smart contract. They also be used to create semi-fungible tokens, which combine +elements of both fungible and non-fungible tokens, providing greater flexibility in token design and functionality. + +## [Label fqn](/labels/label-fqn) + +`santiment/erc1155:v1` + +## Label Examples +[0x73242c671cf402152e3880af208071dadab0bc27](https://etherscan.io/address/0x73242c671cf402152e3880af208071dadab0bc27) + +## Available Blockchains + +* ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/erc721/index.mdx b/src/content/docs/resources/labels/erc721/index.mdx new file mode 100644 index 000000000..1fd9523b7 --- /dev/null +++ b/src/content/docs/resources/labels/erc721/index.mdx @@ -0,0 +1,25 @@ +--- +title: ERC721 +author: Alex +description: ERC721 contract standart label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +Denotes a smart contract that follows erc-721 standart. + +ERC721 is a standard for non-fungible tokens (NFTs) on the Ethereum blockchain, enabling unique digital assets to be represented and traded on the network. + +## [Label fqn](/labels/label-fqn) + +`santiment/erc721:v1` + +## Label Examples +[0x0000000000001b84b1cb32787b0d64758d019317](https://etherscan.io/address/0x0000000000001b84b1cb32787b0d64758d019317) + + +## Available Blockchains + +* ethereum diff --git a/src/content/docs/resources/labels/eth2-staking-address/index.mdx b/src/content/docs/resources/labels/eth2-staking-address/index.mdx new file mode 100644 index 000000000..b2a18c7ae --- /dev/null +++ b/src/content/docs/resources/labels/eth2-staking-address/index.mdx @@ -0,0 +1,27 @@ +--- +title: ETH2 Staking Address +author: Vladimir +description: Addresses that takes activity in eth2 staking +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +Label `eth2_staking_address` added to adrresses that have already engaged in staking activities on the Ethereum 2.0 network. + +Staking on the Ethereum 2.0 network involves holding and locking up a minimum of 32 ETH to validate transactions and secure the network. +Ethereum 2.0 network plays a crucial role in the transition +from proof-of-work (PoW) to proof-of-stake (PoS) consensus mechanism, which is more energy-efficient and scalable. + +## [Label fqn](/labels/label-fqn) + +`santiment/eth2_staking_address:v1` + +## Label Examples +[0x733087f6a2659d67400a04c7052fbc7aea8dab33](https://etherscan.io/address/0x733087f6a2659d67400a04c7052fbc7aea8dab33) +[0x732080273a7bab8163930754e7b4981a330068be](https://etherscan.io/address/0x732080273a7bab8163930754e7b4981a330068be) + +## Available Blockchains + +* ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/eth2-staking/index.mdx b/src/content/docs/resources/labels/eth2-staking/index.mdx new file mode 100644 index 000000000..9ceeef7fe --- /dev/null +++ b/src/content/docs/resources/labels/eth2-staking/index.mdx @@ -0,0 +1,23 @@ +--- +title: ETH2_Staking +author: Alex +description: ETH2 Staking label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +The eth2_staking label is used to identify wallet addresses that stake ETH + +## [Label fqn](/labels/label-fqn) + +`santiment/eth2_staking:v1` + +## Label Examples +RockerDAO Deposit Pool [0xdd3f50f8a6cafbe9b31a427582963f465e745af8](https://etherscan.io/address/0xdd3f50f8a6cafbe9b31a427582963f465e745af8) + + +## Available Blockchains + +* ethereum diff --git a/src/content/docs/resources/labels/factory/index.mdx b/src/content/docs/resources/labels/factory/index.mdx new file mode 100644 index 000000000..2713aa342 --- /dev/null +++ b/src/content/docs/resources/labels/factory/index.mdx @@ -0,0 +1,25 @@ +--- +title: Contract Factory +author: Vladimir +description: Contract Factory Label +datePublished: 2023-04-25 +dateModified: 2025-01-24 +--- + +## Description +A contract factory is a smart contract that is designed to create other smart contracts. +The contract factory serves as a template for creating new contracts that share the same code and functionality. + +With a contract factory, users can easily deploy new contracts on the blockchain without having to write the code from +scratch. This saves time and effort, especially for contracts with similar functionality. + +A contract factory can also include custom parameters that can be used to personalize each new contract created from the factory. This allows for greater flexibility and customization in the contract creation process. + + +## [Label fqn](/labels/label-fqn) + +`santiment/factory:v1` + +## Available Blockchains + +* ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/fund/index.mdx b/src/content/docs/resources/labels/fund/index.mdx new file mode 100644 index 000000000..226461bb0 --- /dev/null +++ b/src/content/docs/resources/labels/fund/index.mdx @@ -0,0 +1,23 @@ +--- +title: Fund +author: Alex +description: Fund label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +The fund label is used to identify wallet addresses that belong to investment funds operating in the cryptocurrency space. + +## [Label fqn](/labels/label-fqn) + +`santiment/fund:v1` + +## Label Examples + +Alameda Fund address: [0x93c08a3168fc469f3fc165cd3a471d19a37ca19e](https://etherscan.io/address/0x93c08a3168fc469f3fc165cd3a471d19a37ca19e) + +## Available Blockchains + +* ethereum diff --git a/src/content/docs/resources/labels/gambling/index.mdx b/src/content/docs/resources/labels/gambling/index.mdx new file mode 100644 index 000000000..82d764394 --- /dev/null +++ b/src/content/docs/resources/labels/gambling/index.mdx @@ -0,0 +1,23 @@ +--- +title: Gambling +author: Alex.g +description: Gambling label +datePublished: 2023-06-01 +dateModified: 2025-01-24 +--- + +## Description + +The gambling label is used to identify wallet addresses that are involved in gambling activities. This label helps quickly identify addresses associated with online gambling and related transactions. + +## [Label fqn](/labels/label-fqn) + +`santiment/gambling:v1` + +## Label Examples + +Dice2Win [0xd1ceeeeee83f8bcf3bedad437202b6154e9f5405](https://etherscan.io/address/0xd1ceeeeee83f8bcf3bedad437202b6154e9f5405) + +## Available Blockchains + +* ethereum diff --git a/src/content/docs/resources/labels/gamefi/index.mdx b/src/content/docs/resources/labels/gamefi/index.mdx new file mode 100644 index 000000000..cea8fc861 --- /dev/null +++ b/src/content/docs/resources/labels/gamefi/index.mdx @@ -0,0 +1,23 @@ +--- +title: GameFi +author: Alex.g +description: GameFi label +datePublished: 2023-06-01 +dateModified: 2025-01-24 +--- + +## Description + +The gamefi label is used to identify wallet addresses that are actively involved in GameFi activities. GameFi refers to the intersection of gaming and decentralized finance (DeFi), where players can earn, trade, and invest in virtual assets within gaming ecosystems. + +## [Label fqn](/labels/label-fqn) + +`santiment/gamefi:v1` + +## Label Examples + +Crypto Lottery [0xb898ceae9b41ff87b2bc22a41e63755604fe4771](https://etherscan.io/address/0xb898ceae9b41ff87b2bc22a41e63755604fe4771) + +## Available Blockchains + +* ethereum diff --git a/src/content/docs/resources/labels/genesis/index.mdx b/src/content/docs/resources/labels/genesis/index.mdx new file mode 100644 index 000000000..fc91cee5d --- /dev/null +++ b/src/content/docs/resources/labels/genesis/index.mdx @@ -0,0 +1,29 @@ +--- +title: Genesis +author: Alex +description: Genesis address label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +Genesis is an address that got funds in the genesis block. Most of them are ETH ICO participants. + +Genesis Ethereum addresses are the original addresses that were created on the Ethereum network during its initial launch. +These addresses were created during the Genesis block, which is the first block in the Ethereum blockchain. They are often used in Ethereum research and analysis to gain insights into the initial distribution of Ethereum tokens and the early activity on the network. + +In ethereum blockchain there are 8893 genesis addresses. + +## [Label fqn](/labels/label-fqn) + +`santiment/genesis:v1` + +## Label Examples + +Genesis address: [0x144b19f1f66cbe318347e48d84b14039466c5909](https://etherscan.io/address/0x144b19f1f66cbe318347e48d84b14039466c5909) + + +## Available Blockchains + +* ethereum diff --git a/src/content/docs/resources/labels/hacked/index.mdx b/src/content/docs/resources/labels/hacked/index.mdx new file mode 100644 index 000000000..32cc2f188 --- /dev/null +++ b/src/content/docs/resources/labels/hacked/index.mdx @@ -0,0 +1,16 @@ +--- +title: Hacked +author: Vladimir +description: Hacked label +datePublished: 2023-04-18 +dateModified: 2025-01-24 +--- + +## Description + +Label `hacked` means that that the owner of this address may have experienced a security breach, +and official information about the incident has been officially published. + +## [Label fqn](/labels/label-fqn) + +`santiment/hacked:v1` \ No newline at end of file diff --git a/src/content/docs/resources/labels/hot-wallet/index.mdx b/src/content/docs/resources/labels/hot-wallet/index.mdx new file mode 100644 index 000000000..d428338a3 --- /dev/null +++ b/src/content/docs/resources/labels/hot-wallet/index.mdx @@ -0,0 +1,25 @@ +--- +title: Hot wallet +author: Alex +description: Hot wallet label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +Denotes a hot wallet of a centralized exchanges or other entity. + +## [Label fqn](/labels/label-fqn) + +`santiment/hot_wallet:v1` + +## Label Examples + +Bitfinex Hot Wallet Address: [0x77134cbc06cb00b66f4c7e623d5fdbf6777635ec](https://etherscan.io/address/0x77134cbc06cb00b66f4c7e623d5fdbf6777635ec) + +Bitfinex Hot Wallet Address: [0x876eabf441b2ee5b5b0554fd502a8e0600950cfa](https://etherscan.io/address/0x876eabf441b2ee5b5b0554fd502a8e0600950cfa) + +## Available Blockchains + +- ethereum diff --git a/src/content/docs/resources/labels/index.mdx b/src/content/docs/resources/labels/index.mdx new file mode 100644 index 000000000..176f68c3a --- /dev/null +++ b/src/content/docs/resources/labels/index.mdx @@ -0,0 +1,150 @@ +--- +title: Labels +author: Santiment Team +description: Santiment labels vision for crypto wallets +datePublished: 2020-12-07 +dateModified: 2025-11-13 +sidebar: + order: 30 +--- + +## Labels overview + +Generally speaking, an **address label** is a piece of information attached to a wallet address. + +The most common use case of one is to denote the owner of the given address. E.g. address “A” belongs to Alice, and address “B” belongs to Binance exchange. Another use-case would be marking (aka labeling) an address as a smart contract. E.g. address “C” is an ERC-721 standard contract. + +In the context of market analysis we are interested in the market participants' addresses mostly. Information about excanhges, whales, traders, DeFi protocols, etc gives a lot of insights on what's going on on the market. There are a lot of label types and use-cases which are described below. + +## How we gather labels + +Collecting labels is not a trivial task. To keep our explanation concise, there are three main ways to gather a label: + +1. **Open sources** + + Some people or projects are willing to share their addresses. E.g. most DeFi projects post their smart contract addresses, and some centralized exchanges reveal their addresses to prove that they hold a certain amount of funds. We collect these addresses and store them in our database. + +2. **Manual label collection** + + In order to collect some labels, manual research is required. For instance, we can manually deposit some ETH to a centralized exchange and track its flow. The ETH will flow first to a deposit address, and then to the centralized exchange. + +3. **Algorithms** + + This is the most powerful method if you need to label many addresses. At Santiment, we have a lot of manually developed algorithms for labeling different types of addresses. Some of our algorithms are native (e.g. in order to find NFT traders, we can just track trades on an NFT trading platform). Others are quite sophisticated (e.g. we developed an algorithm that tracks coinbase cold wallets and relies on some counterintuitive assumptions and filters the whole history of ETH transactions to find these cold wallets). + +Very often, we combine different methods. For instance, we could manually collect some addresses, manually analyze its on-chain behavior, and design an algorithm gathering all addresses of the initial type. + +## Limitations + +Although we are constantly working on adding and improving labels, there are two types of errors that may occur: + +1. **False positive error** (wrong label was added to the address) + + At Santiment, we care a great deal about false positive errors. We do not add labels without making sure the label is correct, or mark the label as suspicious and exclude the address from further computations. Our goal is to build trustworthy labels so that low false positive error rates are ensured. + +2. **False negative error** (address was not labelled properly) + + It is not a trivial task to find all addresses that belong to a person. Let's say you decided to label all addresses belonging to your friend, Alice. Once you find some Alice addresses it's very hard to prove there are no other addresses that are controlled by Alice. Moreover, Alice might want to hide her funds or transactions, so she might use different addresses, use mixers, or design some sophisticated way to distribute her funds so no one can find them. So we always have to assume that there might be addresses that we missed and didn't label. + +In case you found any mistakes in our labeling, please let us know (via discord or email). We appreciate your help a great deal :) + +## Naming + +Each label has it's own name, so called label FQN (Fully Qualified Name). [Read about label FQNs here](/labels/label-fqn) + +## Label Groups + +At Santiment, we label millions of addresses with dozens of different labels. In order to keep it easy to work with labels, we created a way to split all labels into logical groups. Here's a simplified description of how we handle labels. + +We split all labels into major groups. Each major group might consist of smaller groups. Here's a list of major groups: + +- **Domains** + + The group includes legal entities (exchanges, platforms, mining pools, etc.), DAOs, and smart contracts. + +- **Owner** + + A standalone label which denotes the person or company which controls a given address. Note that the owner label is not a nickname. Owner is a broader term rather than nickname which is an owner's attribute (e.g. Vitalik Buterin might have several nicknames: 'Vitaliy', 'ETH_daddy', 'John Galt', etc) + +- **Infrastructure** + + A group including addresses that are bound to any other group and serve any internal tasks. + +- **Activity** + + A group including addresses which are actively or passively engaged in a certain type of activity (for example: trading, receiving airdrop, blogging, etc.) + +- **Social networks** + + A group including users’ nicknames on social networks, forums, platforms, etc. + +- **Status** + + A group that includes the status of the project: blocked, hacked or associated with fraudulent activity (scam). + +--- + +Below you can find labels which are attached to every group from above. Please note that an address might have many labels. For example, every _DEX_ address is labeled as _DeFi_ as well (_DeFi_ is a parent group for _DEX_ group) or _centralized_exchange_ addresses most often owe a dedicated _owner_ label. + +### Domains + +- [DeFi](/labels/defi) + - [Bridge](/labels/bridge) + - [Decentralized exchange](/labels/decentralized-exchange) + - [Derivatives](/labels/derivatives) + - [Lending](/labels/lending) + - [Liquidity](/labels/liquidity) + - [Yield Farming](/labels/yield) +- [CeFi](/labels/cefi) + - [Centralized exchange](/labels/centralized-exchange) + - [Fund](/labels/fund) +- [NFT](/labels/nft) + - [NFT collection](/labels/nft-collection) + - [NFT collection name](/labels/nft-collection-name) + - [NFT collection symbol](/labels/nft-collection-symbol) + - [NFT marketplace](/labels/nft-marketplace) +- [ETH2_Staking](/labels/eth2-staking) +- [GameFi](/labels/gamefi) + - [Gambling](/labels/gambling) + +### Owner + +- [Owner](/labels/owner) + +### Infrastructure + +- [Airdrop Sender](/labels/airdrop-sender) +- [Deposit](/labels/deposit) +- [Contract](/labels/contract) + - [ERC721](/labels/erc721) + - [ERC1155](/labels/erc1155) + - [Factory](/labels/factory) + - [Proxy](/labels/proxy) +- [Cold wallet](/labels/cold-wallet) +- [Dead address](/labels/dead-address) +- [Migration Address](/labels/migration-address) + +### Activity + +- [Airdrop Receiver](/labels/airdrop-receiver) +- [Charity](/labels/charity) +- [DEX user](/labels/dex-user) +- [ETH2 Staking Address](/labels/eth2-staking-address) +- [Genesis](/labels/genesis) +- [Miner](/labels/miner) +- [NFT trader](/labels/nft-trader) +- [NFT trader threshold](/labels/nft-trader-threshold) +- [NFT user](/labels/nft-user) +- [NFT Influencer](/labels/nft-influencer) +- [Used NFT marketplace](/labels/used-nft-marketplace) +- [Whale](/labels/whale) +- [Whale USD Balance](/labels/whale-usd-balance) +- [Lending User](/labels/lending-user) +- [Withdrawal](/labels/withdrawal) +- [Withdrawn From](/labels/withdrawn-from) + +### Status + +- [Blocked](/labels/blocked) +- [Closed](/labels/closed) +- [Sanctioned](/labels/sanctioned) diff --git a/src/content/docs/resources/labels/label-fqn/index.mdx b/src/content/docs/resources/labels/label-fqn/index.mdx new file mode 100644 index 000000000..a410d8268 --- /dev/null +++ b/src/content/docs/resources/labels/label-fqn/index.mdx @@ -0,0 +1,51 @@ +--- +title: Label-fqn +author: Santiment team +description: Label fqn description +datePublished: 2024-04-09 +dateModified: 2024-04-16 +--- + +## Description + +This page describes the structure and applications of **label FQN** (label Fully Qualified Names), which are integral to various platforms such as [Santiment Queries](/santiment-queries), [API](/sanapi) and [Sanbase](/sanbase). + + +## FQN Structure + +A label FQN typically comprises the following components: + +A typical label FQN consists of: +- `owner`: Identifies the creator of the label. Typically, users will primarily interact with labels created by the Santiment team. +- `key`: Represents the label's key. Mostly serves as a common name. For instance, centralized exchange, fund, personal wallet, A comprehensive list of available labels can be found in our academy +[here](/labels). +- `value` \[optional\]: Specifies the label's value, applicable to labels that require a value. Mostly serves as an own name (e.g. Binance, DWF, Vitalik, etc) or some specification of the key. Details can be found within each label's description in the academy. +- `asset_name` \[optional\]: Indicates the asset to which the label is associated. +- `version`: Ensures consistency through versioning. When an algorithm updates, a new version may be released, while access to previous versions remains available. + +To construct a label FQN, concatenate the fields as described: + +`owner/key->value(asset_name):version` + +For a simpler format without the `value` and `asset` fields: + +`owner/key:version` + + +## Note about asset name + +For some labels (e.g. [whale](/labels/whale) or [whale by usd balance](/labels/whale-usd-balance)), the `asset_name` is included in the FQN. For instance, an address labeled as a whale within the EtherFi asset would be denoted as santiment/whale(ether-fi-ethfi):v1. + + +## Note about Key and Value + +The key field serves as a general identifier (e.g., centralized exchange, fund, personal wallet), while the value field provides a specific designation (e.g., Binance, DWF, Vitalik). Not all labels possess a specific name, but when applicable, they are often linked to an [owner label](/labels/owner). Also value field might be used as a some specification of the key [example](/labels/nft-trader-threshold). This structure allows for versatile interactions with the labels, enabling users to either aggregate data across all entities of a type or focus on a specific entity. + + +## Examples + +- `santiment/centralized_exchange:v1`: A centralized exchange label + +- `santiment/owner->binance:v1`: Binance label + +- `santiment/whale_usd_balance(ethereum):v1`: Ethereum whale by USD balance diff --git a/src/content/docs/resources/labels/lending-user/index.mdx b/src/content/docs/resources/labels/lending-user/index.mdx new file mode 100644 index 000000000..4db412c30 --- /dev/null +++ b/src/content/docs/resources/labels/lending-user/index.mdx @@ -0,0 +1,23 @@ +--- +title: Lending User +author: Vladimir +description: Lending User +datePublished: 2023-06-15 +dateModified: 2025-01-24 +--- + +## Description + +These addresses were engaged in lending activities, where they facilitated the process lending funds. + +## [Label fqn](/labels/label-fqn) + +`santiment/lending_user:v1` + +## Label Examples + +Lending user: [0xd4bb298f935cdfa7eb5e363d168f838bb65cdff4](https://etherscan.io/address/0xd4bb298f935cdfa7eb5e363d168f838bb65cdff4) + +## Available Blockchains + +- ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/lending/index.mdx b/src/content/docs/resources/labels/lending/index.mdx new file mode 100644 index 000000000..82a203e34 --- /dev/null +++ b/src/content/docs/resources/labels/lending/index.mdx @@ -0,0 +1,29 @@ +--- +title: Lending +author: Vladimir +description: Lending Labels +datePublished: 2023-04-18 +dateModified: 2025-01-24 +--- + +## Description + +Lending labels denotes a crypto lending platforms like aave, compound, etc and all related contracts. + +Decentralized finance (DeFi) lending projects enable individuals to lend and borrow digital assets without intermediaries. +These platforms offer transparency, potentially higher interest rates, but also come with risks such as smart contract vulnerabilities and market volatility. + +## [Label fqn](/labels/label-fqn) + +`santiment/lending:v1` + +## Label Examples + +Aave Lending Pool Provider [0x24a42fD28C976A61Df5D00D0599C34c4f90748c8](https://etherscan.io/address/0x24a42fD28C976A61Df5D00D0599C34c4f90748c8) + +Aave aWETH token [0x030ba81f1c18d280636f32af80b9aad02cf0854e](https://etherscan.io/address/0x030ba81f1c18d280636f32af80b9aad02cf0854e) + + +## Available Blockchains + +* ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/liquidity/index.mdx b/src/content/docs/resources/labels/liquidity/index.mdx new file mode 100644 index 000000000..35be3aa4b --- /dev/null +++ b/src/content/docs/resources/labels/liquidity/index.mdx @@ -0,0 +1,24 @@ +--- +title: Liquidity +author: Vladimir +description: Liquidity provider label +datePublished: 2023-03-23 +dateModified: 2025-01-24 +--- + +## Description + +Liquidity providers are entities that offer both buy and sell-side liquidity to cryptocurrency. + +## [Label fqn](/labels/label-fqn) + +`santiment/liquidity:v1` + +## Label Examples + +Liquidity provider: [0x00cd2388c86c960a646d640be44fc8f83b78cec9](https://etherscan.io/address/0x00cd2388c86c960a646d640be44fc8f83b78cec9) + +Liquidity provider: [0x0232ba609782cea145ec3663f52cf7aeb4ac773c](https://etherscan.io/address/0x0232ba609782cea145ec3663f52cf7aeb4ac773c) + +## Available Blockchains +- ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/migration-address/index.mdx b/src/content/docs/resources/labels/migration-address/index.mdx new file mode 100644 index 000000000..e4500ac00 --- /dev/null +++ b/src/content/docs/resources/labels/migration-address/index.mdx @@ -0,0 +1,24 @@ +--- +title: Migration Address +author: Vladimir +description: Migration Address +datePublished: 2023-06-15 +dateModified: 2025-01-24 +--- + +## Description +The migration address is utilized for transferring funds between wallets. +It is presumed that the migration address is owned by the same individual or entity as the addresses that are associated with it. + +## [Label fqn](/labels/label-fqn) + +`santiment/migration_address:v1` + +## Label Examples + +Migration address: [0x83ff69c6a7f7ffaebc3ec5d3db3e5dde2a003167](https://etherscan.io/address/0x83ff69c6a7f7ffaebc3ec5d3db3e5dde2a003167) + +Migration address: [0x8401a19095270f35351995c2ce9f927e47c36115](https://etherscan.io/address/0x8401a19095270f35351995c2ce9f927e47c36115) + +## Available Blockchains +- ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/miner/index.mdx b/src/content/docs/resources/labels/miner/index.mdx new file mode 100644 index 000000000..f0bc3cd35 --- /dev/null +++ b/src/content/docs/resources/labels/miner/index.mdx @@ -0,0 +1,27 @@ +--- +title: Miner +author: Alex +description: Miner label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +The label denotes the address mining blocks. Address should produce at least 1 block to be considered as miner. + +In ethereum network only PoW miners are considered. There are 8331 miners labels in ethereum blockchain and new labels are not added after the Merge (September 15, 2022). + +## [Label fqn](/labels/label-fqn) + +`santiment/miner:v1` + +## Label Examples + +[0x64b5627695dad86cc339cd1655ba49cc67957552](https://etherscan.io/address/0x64b5627695dad86cc339cd1655ba49cc67957552) + +[0x002e08000acbbae2155fab7ac01929564949070d](https://etherscan.io/address/0x002e08000acbbae2155fab7ac01929564949070d) + +## Available Blockchains + +* ethereum diff --git a/src/content/docs/resources/labels/multisig/index.mdx b/src/content/docs/resources/labels/multisig/index.mdx new file mode 100644 index 000000000..2624bdc56 --- /dev/null +++ b/src/content/docs/resources/labels/multisig/index.mdx @@ -0,0 +1,23 @@ +--- +title: MultiSig +author: Alex.g +description: MultiSig Label +datePublished: 2023-06-01 +dateModified: 2025-01-24 +--- + +## Description + +Multisig wallets are a type of cryptocurrency wallets for which at least two private keys are needed to sign a transaction. Very often a multisig is a smart contract that requires several addresses to initiate a transaction. + +## [Label fqn](/labels/label-fqn) + +`santiment/multisig:v1` + +## Label Examples + +Multisig wallet: [0xcef700a5e522a731dd48f6ba746f418b1b85f593](https://etherscan.io/address/0xcef700a5e522a731dd48f6ba746f418b1b85f593) + +## Available Blockchains + +* ethereum diff --git a/src/content/docs/resources/labels/nft-collection-name/index.mdx b/src/content/docs/resources/labels/nft-collection-name/index.mdx new file mode 100644 index 000000000..881065dc3 --- /dev/null +++ b/src/content/docs/resources/labels/nft-collection-name/index.mdx @@ -0,0 +1,26 @@ +--- +title: NFT collection name +author: Alex +description: NFT collection name label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +Name of the [NFT collection](/labels/nft-collection). + +## [Label fqn](/labels/label-fqn) + +`santiment/nft_collection_name->{your_value}:v1` + +- E.g. `santiment/nft_collection_name->cryptophunksv2:v1` + +## Label Examples + +CryptoPhunksV2 NFT collection [0xf07468ead8cf26c752c676e43c814fee9c8cf402](https://etherscan.io/token/0xf07468ead8cf26c752c676e43c814fee9c8cf402) + + +## Available Blockchains + +* ethereum diff --git a/src/content/docs/resources/labels/nft-collection-symbol/index.mdx b/src/content/docs/resources/labels/nft-collection-symbol/index.mdx new file mode 100644 index 000000000..88b84692b --- /dev/null +++ b/src/content/docs/resources/labels/nft-collection-symbol/index.mdx @@ -0,0 +1,26 @@ +--- +title: NFT collection symbol +author: Katsiaryna +description: NFT collection symbol label +datePublished: 2023-05-02 +dateModified: 2025-01-24 +--- + +## Description + +Symbol of the [NFT collection](/labels/nft-collection). + +## [Label fqn](/labels/label-fqn) + +`santiment/nft_collection_symbol->{your_value}:v1` + +- E.g. `santiment/nft_collection_symbol->phunks:v1` + + +## Label Examples + +CryptoPhunksV2 NFT collection has symbol PHUNK [0xf07468ead8cf26c752c676e43c814fee9c8cf402](https://etherscan.io/token/0xf07468ead8cf26c752c676e43c814fee9c8cf402) + +## Available Blockchains + +* ethereum diff --git a/src/content/docs/resources/labels/nft-collection/index.mdx b/src/content/docs/resources/labels/nft-collection/index.mdx new file mode 100644 index 000000000..f58fc9b0e --- /dev/null +++ b/src/content/docs/resources/labels/nft-collection/index.mdx @@ -0,0 +1,25 @@ +--- +title: NFT collection +author: Katsiaryna +description: NFT collection label +datePublished: 2023-03-23 +dateModified: 2025-01-24 +--- + +## Description + +Any smart contract which is an NFT collection contract should have the `nft-collection` label assigned to it. There are two main standards for NFT contracts: ERC721 and ERC1155. We make sure to assign a label for each standard. + +NFT collections are usually identified by their [nft collection name](/labels/nft-collection-name) and [nft collection symbol](/labels/nft-collection-symbol). If the collection has a name or/and symbol that's easily accessible, we create labels for those too. + +## [Label fqn](/labels/label-fqn) + +`santiment/nft_collection:v1` + +## Address Examples + +[0x580a29fa60b86aaff102743de5cba60bb5f9de75][https://etherscan.io/address/0x580a29fa60b86aaff102743de5cba60bb5f9de75] + +## Available Blockchains + +* ethereum diff --git a/src/content/docs/resources/labels/nft-influencer/index.mdx b/src/content/docs/resources/labels/nft-influencer/index.mdx new file mode 100644 index 000000000..b69452522 --- /dev/null +++ b/src/content/docs/resources/labels/nft-influencer/index.mdx @@ -0,0 +1,23 @@ +--- +title: NFT Influencer +author: Vladimir +description: NFT Influencer +datePublished: 2023-06-15 +dateModified: 2025-01-24 +--- + +## Description + +This label denotes an onchain address of some nft influencer. + +## [Label fqn](/labels/label-fqn) + +`santiment/nft_influencer:v1` + +## Label Examples + +NFT Influencer "BokkyPooBah": [0x000001f568875F378Bf6d170B790967FE429C81A](https://etherscan.io/address/0x000001f568875F378Bf6d170B790967FE429C81A) + +## Available Blockchains + +- ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/nft-marketplace/index.mdx b/src/content/docs/resources/labels/nft-marketplace/index.mdx new file mode 100644 index 000000000..89c4848dd --- /dev/null +++ b/src/content/docs/resources/labels/nft-marketplace/index.mdx @@ -0,0 +1,26 @@ +--- +title: NFT marketplace +author: Alex +description: label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +NFT marketplace is a platforms where users can buy, sell, and trade NFTs. + +By applying the nft_marketplace label to specific addresses, you can quickly identify which wallets are actively engaged in NFT marketplace activities. This label helps provide insights into the involvement of wallets in the dynamic and rapidly growing NFT market. + +## [Label fqn](/labels/label-fqn) + +`santiment/nft_marketplace:v1` + +## Label Examples + +Blur marketplace address: [0x39da41747a83aee658334415666f3ef92dd0d541](https://etherscan.io/address/0x39da41747a83aee658334415666f3ef92dd0d541) + + +## Available Blockchains + +* ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/nft-trader-threshold/index.mdx b/src/content/docs/resources/labels/nft-trader-threshold/index.mdx new file mode 100644 index 000000000..59227d973 --- /dev/null +++ b/src/content/docs/resources/labels/nft-trader-threshold/index.mdx @@ -0,0 +1,33 @@ +--- +title: NFT trader threshold +author: Alex +description: label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +The label is attached to the addresses that actively traded NFTs recently. During ordinary market this label duplicates [nft_trader](/labels/nft-trader) label. It differs during most active NFT market period and denotes to the most active part of the traders. + +While the NFT trader label is based on percentiles, the NFT trader threshold uses top-Nth value of trades count and volume among all NFT active addresses, with the N number recorded in the value field of the label. +The labels are calculated for two N-threshold values: 1000 and 5000. + + +## [Label fqn](/labels/label-fqn) + +`santiment/nft_trader_threshold->{your_value}:v1` + +Currently only 2 thresholds are supported: +- `santiment/nft_trader_threshold->1000:v1` +- `santiment/nft_trader_threshold->5000:v1` + + +## Label Examples + +The address was labeled as NFT trader with threshold 1000 on May, 3rd, 2023: +[0xb7b668c3dd82bbc8708d41146af74d415087969d](https://etherscan.io/address/0xb7b668c3dd82bbc8708d41146af74d415087969d) + +## Available Blockchains: + +* Ethereum diff --git a/src/content/docs/resources/labels/nft-trader/index.mdx b/src/content/docs/resources/labels/nft-trader/index.mdx new file mode 100644 index 000000000..d52e7e6f8 --- /dev/null +++ b/src/content/docs/resources/labels/nft-trader/index.mdx @@ -0,0 +1,28 @@ +--- +title: NFT trader +author: Alex +description: label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +The NFT trader label is assigned to a group of wallet addresses that have been **actively** involved in NFT trading in recent times. These labels are not permanent and can be attached or detached from addresses over time, depending on their NFT trading activity. + +To determine if an address qualifies as an NFT trader (i.e. if the address is active enough), we evaluate its NFT trades count and NFT trading volume against the 97.5 percentile of the NFT trades count and NFT trading volume of all addresses trading NFTs within a recent timeframe. This helps us identify the most active and significant NFT traders in the ecosystem. + +## [Label fqn](/labels/label-fqn) + +`santiment/nft_trader:v1` + + +## Label Examples + +The address was labeled as NFT trader on May, 2nd, 2023: +[0xb7b668c3dd82bbc8708d41146af74d415087969d](https://etherscan.io/address/0xb7b668c3dd82bbc8708d41146af74d415087969d) + + +## Available Blockchains + +* Ethereum diff --git a/src/content/docs/resources/labels/nft-user/index.mdx b/src/content/docs/resources/labels/nft-user/index.mdx new file mode 100644 index 000000000..83861cae7 --- /dev/null +++ b/src/content/docs/resources/labels/nft-user/index.mdx @@ -0,0 +1,23 @@ +--- +title: NFT user +author: Katsiaryna +description: label +datePublished: 2023-03-23 +dateModified: 2025-01-24 +--- + +## Description + +The label denotes an address that traded at least one NFT. + +## [Label fqn](/labels/label-fqn) + +`santiment/nft_user:v1` + +## Label Examples + +[0x708c9d44eafac41fa7217bd8390fc2b18613e739](https://etherscan.io/address/0x708c9d44eafac41fa7217bd8390fc2b18613e739) + +## Available Blockchains + +* Ethereum diff --git a/src/content/docs/resources/labels/nft/index.mdx b/src/content/docs/resources/labels/nft/index.mdx new file mode 100644 index 000000000..95e0ac587 --- /dev/null +++ b/src/content/docs/resources/labels/nft/index.mdx @@ -0,0 +1,26 @@ +--- +title: NFT +author: Alex +description: NFT label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +The NFT label is used to identify wallet addresses that are involved in any NFT (Non-Fungible Token) activities. By using the NFT label, you can quickly identify which wallets are involved in NFT activities and gain a better understanding of the NFT ecosystem. + +NFT group includes other labels such as [NFT User](/labels/nft-user), [NFT collection](/labels/nft-collection) and others. Visit this page to see the full child labels list. + +## [Label fqn](/labels/label-fqn) + +`santiment/nft:v1` + +## Address Examples + +[0x580a29fa60b86aaff102743de5cba60bb5f9de75][https://etherscan.io/address/0x580a29fa60b86aaff102743de5cba60bb5f9de75] + + +## Available Blockchains + +* ethereum diff --git a/src/content/docs/resources/labels/opensea-username/index.mdx b/src/content/docs/resources/labels/opensea-username/index.mdx new file mode 100644 index 000000000..c9aad1b76 --- /dev/null +++ b/src/content/docs/resources/labels/opensea-username/index.mdx @@ -0,0 +1,23 @@ +--- +title: OpenSea Username +author: Vladimir +description: OpenSea Username +datePublished: 2023-04-18 +dateModified: 2025-01-24 +--- + +## Description + +> label under maintaince + +This label provides valuable details about the connection between the user's profile on the OpenSea platform and addresses. + +## [Label fqn](/labels/label-fqn) + +`santiment/opensea_username->erwwer:v1` + +* E.g. `santiment/opensea_username->erwwer:v1` + +## Available Blockchains + +* ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/owner/index.mdx b/src/content/docs/resources/labels/owner/index.mdx new file mode 100644 index 000000000..0a945b8b2 --- /dev/null +++ b/src/content/docs/resources/labels/owner/index.mdx @@ -0,0 +1,30 @@ +--- +title: Owner +author: Alex +description: Owner label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +Owner is a standalone label which denotes the person or company which controls a given address. Note that owner label is not a nickname. Owner is a broader term rather than nickname which is an owner's attribute (e.g. Vitalik Buterin might have several nicknames: 'Vitaliy', 'ETH_daddy', 'Jogn Galt', etc). + +In most cases Owner label is connected with other labels (such as [centralized_exchange](/labels/centralized-exchange)). + +## [Label fqn](/labels/label-fqn) + +`santiment/owner->{your_value}:v1` + +- E.g. `santiment/owner->binance:v1` +- E.g. `santiment/owner->aave_v3:v1` + +## Label Examples + +Binance: [0x28c6c06298d514db089934071355e5743bf21d60](https://etherscan.io/address/0x28c6c06298d514db089934071355e5743bf21d60) + +Aave: [0x625aE63000f46200499120B906716420bd059240](https://etherscan.io/address/0x625aE63000f46200499120B906716420bd059240) + +## Available Blockchains + +Blockchain indifferent \ No newline at end of file diff --git a/src/content/docs/resources/labels/proxy/index.mdx b/src/content/docs/resources/labels/proxy/index.mdx new file mode 100644 index 000000000..52d232511 --- /dev/null +++ b/src/content/docs/resources/labels/proxy/index.mdx @@ -0,0 +1,27 @@ +--- +title: Proxy +author: Vladimir +description: Proxy label +datePublished: 2023-04-25 +dateModified: 2025-01-24 +--- + +## Description + +A proxy entity is a special type of entity that serves as an intermediary between other entities. + +For example: Instead of interacting directly with the target contract, all calls are directed through the proxy, which then delegates +the request to the intended target contract. This allows for a greater degree of control and flexibility over the +contract's behavior. + +## [Label fqn](/labels/label-fqn) + +`santiment/proxy:v1` + +## Label Examples + +MakerDAO DSProxy Contract [0x00002c65ba1e64d2fd8c6ffb7160fd6bde9e17dd] + +## Available Blockchains + +* ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/sanctioned/index.mdx b/src/content/docs/resources/labels/sanctioned/index.mdx new file mode 100644 index 000000000..a2636c394 --- /dev/null +++ b/src/content/docs/resources/labels/sanctioned/index.mdx @@ -0,0 +1,22 @@ +--- +title: Sanctioned Label +author: Vladimir +description: Sanctioned Label +datePublished: 2023-03-23 +dateModified: 2025-01-24 +--- + +## Description +Label used to mark addresses that were added into sanction list. For example - OFAC Sanction list. + +## [Label fqn](/labels/label-fqn) + +`santiment/sanctioned:v1` + +## Label Examples +Tornado cash [0x03893a7c7463ae47d46bc7f091665f1893656003](https://etherscan.io/address/0x03893a7c7463ae47d46bc7f091665f1893656003) +Sanctioned [0x67d40ee1a85bf4a4bb7ffae16de985e8427b6b45](https://etherscan.io/address/0x67d40ee1a85bf4a4bb7ffae16de985e8427b6b45) + +## Available Blockchains + +* ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/scam/index.mdx b/src/content/docs/resources/labels/scam/index.mdx new file mode 100644 index 000000000..6c5e9c3a2 --- /dev/null +++ b/src/content/docs/resources/labels/scam/index.mdx @@ -0,0 +1,15 @@ +--- +title: Scam +author: Vladimir +description: Scam label +datePublished: 2023-04-18 +dateModified: 2025-01-24 +--- + +## Description + +Label `scam` means that address has been linked to scam activity and this information has been publicly disclosed. + +## [Label fqn](/labels/label-fqn) + +`santiment/scam:v1` diff --git a/src/content/docs/resources/labels/staking/index.mdx b/src/content/docs/resources/labels/staking/index.mdx new file mode 100644 index 000000000..82a130c03 --- /dev/null +++ b/src/content/docs/resources/labels/staking/index.mdx @@ -0,0 +1,22 @@ +--- +title: Liquid staking +author: Vladimir +description: Liquid Staking Label +datePublished: 2023-04-18 +dateModified: 2025-01-24 +--- + +## Description + +DeFi liquid staking projects create tokenized versions of staked assets, allowing users to earn rewards while maintaining liquidity. +These projects provide increased flexibility and higher rewards compared to traditional staking. + + +## [Label fqn](/labels/label-fqn) + +`santiment/liquid_staking:v1` + + +## Available Blockchains + +* ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/team_wallet/index.mdx b/src/content/docs/resources/labels/team_wallet/index.mdx new file mode 100644 index 000000000..de627ac7d --- /dev/null +++ b/src/content/docs/resources/labels/team_wallet/index.mdx @@ -0,0 +1,21 @@ +--- +title: Team wallet +author: +description: Team wallet label +datePublished: 2023-03-23 +dateModified: 2025-01-24 +--- + +## Description + + +## [Label fqn](/labels/label-fqn) + +`santiment/team_wallet:v1` + +## Label Examples + + +## Available Blockchains + +* ethereum \ No newline at end of file diff --git a/src/content/docs/resources/labels/used-nft-marketplace/index.mdx b/src/content/docs/resources/labels/used-nft-marketplace/index.mdx new file mode 100644 index 000000000..97219e684 --- /dev/null +++ b/src/content/docs/resources/labels/used-nft-marketplace/index.mdx @@ -0,0 +1,32 @@ +--- +title: Used NFT marketplace +author: Alex +description: label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +The `used_nft_marketplace` label denotes the marketplaces that NFT user traded on. + +## [Label fqn](/labels/label-fqn) + +`santiment/used_nft_marketplace->{your_value}:v1` + +* E.g. `santiment/used_nft_marketplace->blur:v1` +* E.g. `santiment/used_nft_marketplace->superrare:v1` +* E.g. `santiment/used_nft_marketplace->cryptopunks:v1` +* E.g. `santiment/used_nft_marketplace->opensea:v1` +* E.g. `santiment/used_nft_marketplace->looksrare:v1` +* E.g. `santiment/used_nft_marketplace->rarible:v1` +* E.g. `santiment/used_nft_marketplace->foundation:v1` +* E.g. `santiment/used_nft_marketplace->x2y2:v1` + +## Label Examples + +[0x708c9d44eafac41fa7217bd8390fc2b18613e739](https://etherscan.io/address/0x708c9d44eafac41fa7217bd8390fc2b18613e739) + +## Available Blockchains + +* Ethereum diff --git a/src/docs/labels/whale-usd-balance/image.png b/src/content/docs/resources/labels/whale-usd-balance/image.png similarity index 100% rename from src/docs/labels/whale-usd-balance/image.png rename to src/content/docs/resources/labels/whale-usd-balance/image.png diff --git a/src/content/docs/resources/labels/whale-usd-balance/index.mdx b/src/content/docs/resources/labels/whale-usd-balance/index.mdx new file mode 100644 index 000000000..b9b7ce758 --- /dev/null +++ b/src/content/docs/resources/labels/whale-usd-balance/index.mdx @@ -0,0 +1,76 @@ +--- +title: Whale by USD Balance +author: Alex +description: Whale usd balance label +datePublished: 2024-02-14 +dateModified: 2025-01-24 +--- + +## Description + +We define an address as a whale if the address holds a specific amount of money in a coin. The minimum amount of money required depends on the coin's market capitalization. For example, if the coin's market capitalization is $100B, we label addresses holding a worth of $6.9M in this coin as whales. + +Notes: + +* For each erc20 asset whale labels are computed separately. + +* Whales are computed for coins with a minimum capitalization of $1M. + +* Thresholds and labels are recomputed daily. + + +## Rationale + +Despite the common intuition behind the definition of a whale being very simple - someone who owns a large amount of money - it can be difficult to distinguish between a whale and a non-whale address in practice. + +While there are many valid definitions of a whale, Santiment believes that a whale is an address that has the ability to influence the entire market with its stake. This implies an important consequence: the threshold between a whale and a non-whale is context-dependent, meaning it depends on the specific market. For example, imagine a low-cap coin with a total capitalization of $100k. An address holding $10k worth of that token would be considered quite large. On the other hand, $10k in ETH would be considered negligible. + +Given this, we can conclude that the line between a whale and a non-whale is not fixed. Furthermore, there is a logical connection with a coin's market capitalization. The higher the market capitalization, the larger the balance required to be classified as a whale. + + +## Methodology + +To mathematically define the relationship between market cap and whale threshold, we consulted an expert. Given the coin and its market cap, we determined the minimum sufficient balance for a whale. After analyzing the data, we reached the following conclusions: + +- The threshold increases as the market cap increases. +- The relationship between market cap and threshold is not linear. +- The function relating market cap and threshold appears to be logarithmic. + +Further analysis led us to establish a strict mathematical relationship between a coin's market capitalization and the minimum sufficient whale balance: + +![Minimal Whale Balance](image.png) + +Finally, we determine whether an address is considered a whale based on the amount of money they hold in a specific coin. The minimum amount required depends on the coin's market capitalization. + +## Threshold Examples + +Capitalization | Minimal Whale Balance +|-|-| +$1,000B|$16,6M +$500B|$14M +$100B|$6,9M +$50B|$4,8M +$10B|$2M +$5B|$1,3M +$1B|$500k +$500M|$329k +$100M|$124k +$50M|$81k +$10M|$30k +$1M|$7.3k + +## [Label fqn](/labels/label-fqn) + +`santiment/whale_usd_balance({asset_name}):v1` + +* E.g. `santiment/whale_usd_balance(ethereum):v1` + +## Label Examples + +Uniswap Whale Address (14.02.24): [0x47173b170c64d16393a52e6c480b3ad8c302ba1e](https://etherscan.io/address/0x47173b170c64d16393a52e6c480b3ad8c302ba1e) + +ETH Whale Address (14.02.24): [0xefb2e870b14d7e555a31b392541acf002dae6ae9](https://etherscan.io/address/0xefb2e870b14d7e555a31b392541acf002dae6ae9) + +## Available Blockchains + +* ethereum diff --git a/src/content/docs/resources/labels/whale/index.mdx b/src/content/docs/resources/labels/whale/index.mdx new file mode 100644 index 000000000..c1d5974f6 --- /dev/null +++ b/src/content/docs/resources/labels/whale/index.mdx @@ -0,0 +1,29 @@ +--- +title: Whale +author: Alex +description: Whale label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description + +Whale is an address holding a substensial amount of tokens. We sort all addresses by its balance and label top 100 addresses as whales every day. For each erc20 asset whale labels are computed separately. + +Note that the addresses labelled as whale yesterday might not be a whale any more tomorrow. + +## [Label fqn](/labels/label-fqn) + +`santiment/whale({asset_name}):v1` + +* E.g. `santiment/whale(ethereum):v1` + +## Label Examples + +[0x1bd3fc5ac794e7af8e834a8a4d25b08acd9266ce](https://etherscan.io/address/0x1bd3fc5ac794e7af8e834a8a4d25b08acd9266ce) + +[0xe92d1a43df510f82c66382592a047d288f85226f](https://etherscan.io/address/0xe92d1a43df510f82c66382592a047d288f85226f) + +## Available Blockchains + +* ethereum diff --git a/src/docs/labels/withdrawal/deposit-withdrawal.png b/src/content/docs/resources/labels/withdrawal/deposit-withdrawal.png similarity index 100% rename from src/docs/labels/withdrawal/deposit-withdrawal.png rename to src/content/docs/resources/labels/withdrawal/deposit-withdrawal.png diff --git a/src/content/docs/resources/labels/withdrawal/index.mdx b/src/content/docs/resources/labels/withdrawal/index.mdx new file mode 100644 index 000000000..955fd35f0 --- /dev/null +++ b/src/content/docs/resources/labels/withdrawal/index.mdx @@ -0,0 +1,27 @@ +--- +title: Withdrawal +author: Alex +description: label +datePublished: 2023-03-22 +dateModified: 2025-01-24 +--- + +## Description +A withdrawal address is an address that belongs to a user and is used by a user in order to withdraw funds from a third-party (e.g CEX). +The address is considered as a withdrawal address if it has received funds from a CEX (withdraw). + +The most common case is a centralized exchange (CEX) withdrawal. See the details in the image below. + +![deposit_address](deposit-withdrawal.png) + +## [Label fqn](/labels/label-fqn) + +`santiment/cex_withdrawal:v1` + +## Label Examples +Withdrawal address from Binance: [0xd026c38bb75bac49b1f4a97b861915c669e95a71](https://etherscan.io/address/0xd026c38bb75bac49b1f4a97b861915c669e95a71) + +Withdrawal address from Bitstamp: [0xef41cb1696df22f872d16ee009bc4b7e6a57bf7f](https://etherscan.io/address/0xef41cb1696df22f872d16ee009bc4b7e6a57bf7f) + +## Available Blockchains +* ethereum diff --git a/src/content/docs/resources/labels/withdrawn-from/index.mdx b/src/content/docs/resources/labels/withdrawn-from/index.mdx new file mode 100644 index 000000000..cf72d178d --- /dev/null +++ b/src/content/docs/resources/labels/withdrawn-from/index.mdx @@ -0,0 +1,27 @@ +--- +title: Withdrawn From +author: Vladimir +description: label +datePublished: 2024-04-08 +dateModified: 2025-01-24 +--- + +## Description +A`withdrawn_from` label is used to identify the entity involved in a withdrawal action. + +The most common case is a centralized exchange (CEX) withdrawal. See the details in the image below. + + +## [Label fqn](/labels/label-fqn) + +`santiment/withdrawn_from->{your_value}:v1` + +* E.g. `santiment/withdrawn_from->binance:v1` + +## Label Examples +Withdrawn from Binance: [0xd026c38bb75bac49b1f4a97b861915c669e95a71](https://etherscan.io/address/0xd026c38bb75bac49b1f4a97b861915c669e95a71) + +Withdrawn from Bitstamp: [0xef41cb1696df22f872d16ee009bc4b7e6a57bf7f](https://etherscan.io/address/0xef41cb1696df22f872d16ee009bc4b7e6a57bf7f) + +## Available Blockchains +* ethereum diff --git a/src/content/docs/resources/labels/yield/index.mdx b/src/content/docs/resources/labels/yield/index.mdx new file mode 100644 index 000000000..afc2afca1 --- /dev/null +++ b/src/content/docs/resources/labels/yield/index.mdx @@ -0,0 +1,23 @@ +--- +title: Yield Farming Label +author: Vladimir +description: Yield Farming Label +datePublished: 2023-06-22 +dateModified: 2025-01-24 +--- + +## Description +Label used to mark addresses that are used in Yield Farming activities + +## [Label fqn](/labels/label-fqn) + +`santiment/yield:v1` + +## Label Examples +YFV.finance: Link Pool: [0x196CF719251579cBc850dED0e47e972b3d7810Cd](https://etherscan.io/address/0x196cf719251579cbc850ded0e47e972b3d7810cd) + +Pylon.Finance: Solarite SNX Pool: [0x92a7492A1354dFFB9A9865B66e8334736eF49374](https://etherscan.io/address/0x92a7492a1354dffb9a9865b66e8334736ef49374) + +## Available Blockchains + +* ethereum \ No newline at end of file diff --git a/src/docs/metrics/active-addresses-24h/bitcoin-daa.png b/src/content/docs/resources/metrics/active-addresses-24h/bitcoin-daa.png similarity index 100% rename from src/docs/metrics/active-addresses-24h/bitcoin-daa.png rename to src/content/docs/resources/metrics/active-addresses-24h/bitcoin-daa.png diff --git a/src/content/docs/resources/metrics/active-addresses-24h/index.mdx b/src/content/docs/resources/metrics/active-addresses-24h/index.mdx new file mode 100644 index 000000000..8e34c92a2 --- /dev/null +++ b/src/content/docs/resources/metrics/active-addresses-24h/index.mdx @@ -0,0 +1,102 @@ +--- +title: Active Addresses 24h +author: Ivan +description: Number of unique addresses participating in transactions for the last 24 hour window +datePublished: 2022-04-12 +dateModified: 2025-04-30 +--- + + +## Definition + +The number of distinct addresses that participated in a transfer for the given +asset in the past 24 hours window. Each address is counted only once for the +window. Both the senders and the receivers are counted. + +This metric is similar to the Daily Active Addresses. The difference is that the +daily active addresses is computed on whole days only - it counts the active +addresses for every day (between 00:00:00 and 23:59:59). The active addresses +24h is computed every 5 minutes and counts the active addresses for +the past 24 hours. Example: The value of the metric at 17:30pm on March 22 +contains the active addresses in the interval [17:30pm March 21, 17:30pm March +22]. + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Non-negative number of addresses + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +## API + +Available under the `active_addresses_24h` name. + +```graphql explorer +{ + getMetric(metric: "active_addresses_24h") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +The full list of Active Addresses metrics is: + +
    + +Open Metrics List + +- active_addresses_1h +- active_addresses_24h +- active_addresses_24h_change_1d +- active_addresses_24h_change_30d +- active_addresses_24h_change_7d +- active_addresses_7d +- active_addresses_30d +- active_addresses_60d +- active_addresses_90d + +
    diff --git a/src/docs/metrics/active-deposits/daily-active-deposits-ethereum.png b/src/content/docs/resources/metrics/active-deposits/daily-active-deposits-ethereum.png similarity index 100% rename from src/docs/metrics/active-deposits/daily-active-deposits-ethereum.png rename to src/content/docs/resources/metrics/active-deposits/daily-active-deposits-ethereum.png diff --git a/src/content/docs/resources/metrics/active-deposits/index.mdx b/src/content/docs/resources/metrics/active-deposits/index.mdx new file mode 100644 index 000000000..260433c93 --- /dev/null +++ b/src/content/docs/resources/metrics/active-deposits/index.mdx @@ -0,0 +1,130 @@ +--- +title: Active Deposits +author: Santiment Team + +headline: "Crypto Active Addresses: Metric to Track Blockchain Activity" +description: "The active addresses metric is the number of unique addresses participating in transactions during one day. Learn more about how we calculate it." +datePublished: 2019-11-21 +dateModified: 2025-04-30 +--- + +## Definition + +### Active Deposits + +Shows the **number of unique deposit addresses** that have been active on a +particular day for a given asset. Refer to a [deposit address explanation here](/labels/deposit) + +![ethereum daily active deposits](daily-active-deposits-ethereum.png) + +`active_deposits` metric shows the number of **daily** active deposits. `active_deposits_5m` shows the amount of active deposits for a given **5 minutes** interval. + + +### Deposit Transactions + +Deposit transactions metric shows the total number of all **incoming and outcoming transactions** involving +deposit addresses on a particular day for `deposit_transactions` and for a particlar 5 minutes interval for `deposit_transactions_5m`. + +As such, this metric accounts for both user-to-exchange transactions: + +1. from a personal wallet to a deposit address, and +2. from a deposit address to the main exchange wallet. + +Deposit-related Transactions is often valuable when used in conjunction with +**Exchange Inflow** -- [another one of our +metrics](/metrics/exchange-funds-flow/) -- which shows the total amount of +coins moving to exchange wallets on a particular day. + +So, for example, an **increase in exchange inflow** but a **plateauing number of +deposit-related transactions** means that more coins are entering the exchanges, +although the number of transactions to the exchanges stayed the same. In other +words, **the average deposit size has increased.** + +For an exchange-specific data please refer to [that page](/metrics/labeled-exchange) + +--- + +## Access + +The metric is with [restricted access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Non-negative number of addresses + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily intervals:](/metrics/details/frequency#daily-frequency) + +* `active_deposits` +* `deposit_transactions` + +[Five-Minute Intervals:](/metrics/details/frequency#five-minute-frequency) + +* `active_deposits_5m` +* `deposit_transactions_5m` + + +--- + +## Latency + +Daily Active Deposits has [on-chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +[active_deposits]() + +[deposit_transactions]() + +[active_deposits_5m]() + +[deposit_transactions_5m]() + + +--- + +## SanAPI + +```graphql explorer +{ + getMetric(metric: "active_deposits") { + timeseriesDataJson( + slug: "maker" + from: "2019-05-09T11:25:04.894Z" + to: "2019-06-23T11:25:04.894Z" + interval: "1d" + ) + } +} +``` + +Deposit transactions are available under `deposit_transactions` and `deposit_transactions_5m` names. + + +```graphql explorer +{ + getMetric(metric: "deposit_transactions_5m") { + timeseriesDataJson( + slug: "ethereum" + from: "2024-01-01T00:00:00.000Z" + to: "2024-01-02T00:00:00.000Z" + interval: "1h") + } +} +``` + + + diff --git a/src/content/docs/resources/metrics/active-withdrawals/index.mdx b/src/content/docs/resources/metrics/active-withdrawals/index.mdx new file mode 100644 index 000000000..9d3e4ec62 --- /dev/null +++ b/src/content/docs/resources/metrics/active-withdrawals/index.mdx @@ -0,0 +1,111 @@ +--- +title: Active Withdrawals +author: Santiment Team + +headline: "Crypto Active Addresses: Metric to Track Blockchain Activity" +description: "The active addresses metric is the number of unique addresses participating in transactions during one day. Learn more about how we calculate it." +datePublished: 2024-04-03 +dateModified: 2025-04-30 +--- + +## Definition + +### Active Withdrawals + +Shows the **number of unique withdrawal addresses** that have been active on a +particular day for a given asset. Refer to a [withdrawal address explanation here](/labels/withdrawal) + +### Withdrawal Transactions + +Withdrawal transactions metric shows the total number of all **outgoing transactions** involving +withdrawal addresses on a particular day. Basically, this metric accounts for exchange-to-user transactions. + +For an exchange-specific data please refer to [that page](/metrics/labeled-exchange) + +--- + +## Access + +The metric is with [restricted access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Non-negative number of addresses + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily intervals:](/metrics/details/frequency#daily-frequency) + +* `active_withdrawals` +* `withdrawal_transactions` + +[Five-Minute Intervals:](/metrics/details/frequency#five-minute-frequency) + +* `active_withdrawals_5m` +* `withdrawal_transactions_5m` + +--- + +## Latency + +[On-chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +[active_withdrawals]() + +[withdrawal_transactions]() + +[active_withdrawals_5m]() + +[withdrawal_transactions_5m]() + +--- + +## SanAPI + +The metric is available under the `active_withdrawals` name for daily resolution and `active_withdrawals_5m` for intraday resolution. + +```graphql explorer +{ + getMetric(metric: "active_withdrawals") { + timeseriesDataJson( + slug: "ethereum" + from: "2023-05-09T11:25:04.894Z" + to: "2023-06-23T11:25:04.894Z" + interval: "1d" + ) + } +} +``` + + +Withdrawal transactions are available under `withdrawal_transactions` and `withdrawal_transactions_5m` names. + + +```graphql explorer +{ + getMetric(metric: "withdrawal_transactions_5m") { + timeseriesDataJson( + slug: "ethereum" + from: "2024-01-01T00:00:00.000Z" + to: "2024-01-02T00:00:00.000Z" + interval: "1h") + } +} +``` + + + diff --git a/src/content/docs/resources/metrics/age-consumed/age-consumed-technical.mdx b/src/content/docs/resources/metrics/age-consumed/age-consumed-technical.mdx new file mode 100644 index 000000000..2c05f2e20 --- /dev/null +++ b/src/content/docs/resources/metrics/age-consumed/age-consumed-technical.mdx @@ -0,0 +1,125 @@ +--- +title: Token Age Consumed - Technical Details +author: Ivan Ivanov, Tzanko Matev +datePublished: 2020-04-01 +dateModified: 2021-11-22 +--- + +We will describe here one statistic that we call the _token age consumed_. This +is a measurement that detects changes in the volume of the token circulation and +can show us when tokens that have been frozen for a long time come into +circulation. We have computed this measurement for all ERC20 tokens. In theory +it can be calculated for any cryptocurrency which has publicly readable +transactions (so not like #ZEC or #XMR) + +To understand the token age consumed, we need to rethink our idea of a token +account. At any given moment, an account has a value which is a single number. +But this number is a result of transactions coming in and going out of the +account. Some of those transactions happened a very long time ago, while others +happened only recently. + +Let's look at the following example. Assume that Alice and Bob have each one +account of SAN tokens. Both of them have 10000 tokens. Alice bought her tokens 4 +months ago and didn't move them. Bob, on the other hand, was buying and selling +large amounts of tokens the whole time. So we can imagine that Alice's tokens +were out of circulation for the entire four months, while Bob's tokens were in +circulation. In this scenario, it is not a significant event if Bob transfers +5000 of his tokens today. But it is much more critical if Alice transfers 5000 +tokens. The token age consumed is a measurement that will tell us if many people +suddenly start transferring tokens that have not moved for a long time. + +To understand how the token age consumed is calculated, imagine that the coins +in each account are ordered as a stack: Incoming transactions put money on top +of the stack, and outgoing transactions take money from the top. For every +portion of this stack, we can note the block number of the corresponding +incoming transaction. So for any given block number $t$ and any account $a$, we +can construct a stack $stack(a,t)$ that describes the account's history at that +block number. We have + +$$ +stack(a,t):= [(s_1, t_1), (s_2, t_2), \dots, (s_k, t_k)] +$$ + +Here $s_1,\dots, s_k$ are token amounts, and $t_1,\dots, t_k$ are block numbers. +Also, the sum $s_1+\cdots+s_k$ equals the current balance of the account. + +Assume that the current block number is $t$. There are several cases regarding +the account $a$: + +### No transactions + +In that case the contribution $tac(a,t)$ (token age consumed) of the account $a$ +towards the token age consumed at block $t$ is 0. + +### Incoming transaction + +In that case, we need to put the amount of the incoming transaction at the top of +our stack. If that amount was $s$, the new stack becomes + +$$ +stack(a, t+1) := [(s_1, t_1), \dots, (s_k, t_k), (s, t)] +$$ + +In that case the contribution $tac(a,t)$ of the account $a$ towards the token +age consumed at block $t$ is 0. + +### Outgoing transaction + +The outgoing transaction will _consume_ the elements at the top of the stack. If +the amount of the transaction was $s$, then all elements $(s_i, t_i)$ such that +$s_i + s_{i+1} + \cdots + s_k < s$ will be completely consumed. Let $m$ be the +smallest such index $i$. The element $(s_{m-1}, t_{m-1})$ might be partially +consumed if there was any amount left from the outgoing transaction. So the new +stack will become + +$$ +stack(a, t+1) := [(s_1, t_1), \dots, (s_{m-1} - (s- \sum_{i=m}^ks_i), t_{m-1})] +$$ + +In the case of an outgoing transaction, the account $a$ contributed to the token age +consumed at block $t$. Its contribution is: + +$$ +tac(a,t):= \sum_{i=m}^k s_i * (t-t_i) + (s-\sum_{i=m}^ks_i)*(t-t_{m-1}) +$$ + +which means all elements will be fully consumed, and their age is added +to the whole contribution, while the last consumed stack can be only partially +consumed. + +### Multiple transactions + +If there were multiple incoming and/or outgoing transactions happening at the +same block number $t$, we replace them in our calculations with a single +transaction. This transaction will be incoming if the total incoming amount is +greater than the total outgoing amount, and it will be outgoing. So we +can reduce this case to one of the cases we described above. + +After we have computed the token age consumed contribution at block $t$ for +every account, we can calculate the total token age consumed: + +$$ +tac(t) := \sum_{a} tac(a,t) +$$ + +### Example + +Imagine again that Alice and Bob are exchanging tokens. Initially, Alice had 5000 +tokens, which she obtained at block 0, and Bob doesn't have any tokens. + +First, Alice transfers 1000 tokens to Bob at block 5. Her transaction stack has a +single element $[(5000, 0)]$ and 1000 tokens are consumed from it, contributing +$1000*(5-0)=5000$ token age consumed for block 5. Now Alice transaction stack is +$[(4000, 0)]$ and Bob transaction stack is $[(1000,5)]$. + +Later Bob decides to move these tokens to an exchange and sell them, so at block +15 Bob transfers his tokens to an exchange wallet, which contributes +$1000*(15-5)=10000$ token age consumed to block 15. On the other hand Alice +transfers 2000 tokens to Bob at the same block 15, which makes the total token +age consumed for block 15 $10000 + 2000 * (15-0) = 10000 + 30000 = 40000$. The +transaction stacks of Alice is $[(2000, 0)]$, while the stack of Bob is $[(2000, +15)]$. + +At block 25, both Alice and Bob decide to transfer their tokens to an exchange, +contributing $2000 * (25 - 0) + 2000 * (25 - 15) = 2000 * 25 + 2000 * 10 = +70000$ to the total token age consumed for block 25. diff --git a/src/docs/metrics/age-consumed/bitcoin-age-consumed.png b/src/content/docs/resources/metrics/age-consumed/bitcoin-age-consumed.png similarity index 100% rename from src/docs/metrics/age-consumed/bitcoin-age-consumed.png rename to src/content/docs/resources/metrics/age-consumed/bitcoin-age-consumed.png diff --git a/src/docs/metrics/age-consumed/golem-age-consumed.png b/src/content/docs/resources/metrics/age-consumed/golem-age-consumed.png similarity index 100% rename from src/docs/metrics/age-consumed/golem-age-consumed.png rename to src/content/docs/resources/metrics/age-consumed/golem-age-consumed.png diff --git a/src/content/docs/resources/metrics/age-consumed/index.mdx b/src/content/docs/resources/metrics/age-consumed/index.mdx new file mode 100644 index 000000000..537e80ca9 --- /dev/null +++ b/src/content/docs/resources/metrics/age-consumed/index.mdx @@ -0,0 +1,109 @@ +--- +title: Token Age Consumed metric +author: Santiment Team +description: Amount of coins/tokens moved multipled by their age +datePublished: 2020-04-01 +dateModified: 2025-04-30 +--- + + +_For a more in-depth technical explanation of Age Consumed, please click_ +[_here_](/metrics/age-consumed/age-consumed-technical) + +--- + +## Definition + +Age Consumed shows the amount of tokens changing addresses on a certain date, +multiplied by the time since they last moved. + +Spikes on the graph signal a large amount of tokens moving after being idle for +an extended period of time. + +One potential use case for this metric is identifying when big market players +exit the project post ICO. + +Here's the Token Age Consumed graph for [Golem](https://golem.network/), an +ERC-20 project that lets you rent other people's computing power. +![golem-age-consumed](golem-age-consumed.png) + +We can easily spot several significant spikes over time: each could be a large +early investor selling their tokens, which commonly results in a parallel price +decline. + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Time passed × Token/Coin amount + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these assets]() + +--- + +## API + +Available under the `age_destroyed` and `age_consumed` names, one being an alias for the other: + +```graphql explorer +{ + getMetric(metric: "age_consumed") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +The full list of Age Consumed metrics is: + +
    + +Open Metrics List + +- age_consumed +- age_consumed_change_1d +- age_consumed_change_30d +- age_consumed_change_7d + +
    + diff --git a/src/content/docs/resources/metrics/amount-in-top-holders/index.mdx b/src/content/docs/resources/metrics/amount-in-top-holders/index.mdx new file mode 100644 index 000000000..fef52eb7a --- /dev/null +++ b/src/content/docs/resources/metrics/amount-in-top-holders/index.mdx @@ -0,0 +1,106 @@ +--- +title: Amount in Top Holders +author: Ivan +description: Number of unique coins/tokens held by top holders +datePublished: 2020-06-29 +dateModified: 2025-04-30 +--- + +## Definition + +Show the amount of coins/tokens help by the top holders. By default the top 10 +holders are taken. + +Metrics available: + +- `amount_in_top_holders` - All holders are taken into account. +- `amount_in_exchange_top_holders` - Only holders that are known exchange addresses are taken into account. +- `amount_in_non_exchange_top_holders` - Only holders that are not exchange addresses are taken into account. + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Token/Coin amount + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for: + +- `amount_in_top_holders` - [these assets]() +- `amount_in_exchange_top_holders` - [these assets]() +- `amount_in_non_exchange_top_holders` - [these assets]() + +--- + +## SanAPI + +The available metrics are: +- `amount_in_top_holders` +- `amount_in_exchange_top_holders` +- `amount_in_non_exchange_top_holders` + +```graphql explorer +{ + getMetric(metric: "amount_in_top_holders") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +```graphql explorer +{ + getMetric(metric: "amount_in_exchange_top_holders") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +```graphql explorer +{ + getMetric(metric: "amount_in_non_exchange_top_holders") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/annual-inflation-rate/index.mdx b/src/content/docs/resources/metrics/annual-inflation-rate/index.mdx new file mode 100644 index 000000000..3e810576a --- /dev/null +++ b/src/content/docs/resources/metrics/annual-inflation-rate/index.mdx @@ -0,0 +1,76 @@ +--- +title: Annual inflation rate +author: Filip +description: Annual inflation rate +datePublished: 2024-03-01 +dateModified: 2025-04-30 +--- + +## Description +The annual inflation rate of cryptocurrencies varies widely depending on the specific cryptocurrency. +Unlike traditional fiat currencies, which are often centrally controlled and have +predictable inflation rates, cryptocurrencies can have different mechanisms governing their supply. +Some cryptocurrencies, like Bitcoin, have a predetermined issuance schedule with a decreasing rate +of new coin creation over time, while others may have variable or dynamic supply mechanisms. +Additionally, factors such as network consensus rules, mining rewards, and tokenomics can influence +the inflation rate of cryptocurrencies. + + +Annual inflation rate metric: +* `annual_inflation_rate` - annual inflation rate + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Decimal percentage + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +### SanAPI + +Available under name: `annual_inflation_rate` + + +```graphql explorer +{ + getMetric(metric: "annual_inflation_rate"){ + timeseriesDataJson( + slug: "bitcoin" + from: "2024-01-01T00:00:00Z" + to: "2024-02-01T00:00:00Z" + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/binance-derivatives/busd-binance-funding-rate/index.mdx b/src/content/docs/resources/metrics/binance-derivatives/busd-binance-funding-rate/index.mdx new file mode 100644 index 000000000..6c8464eb5 --- /dev/null +++ b/src/content/docs/resources/metrics/binance-derivatives/busd-binance-funding-rate/index.mdx @@ -0,0 +1,72 @@ +--- +title: Binance Contract Funding Rate (BUSD) +author: Lyudmil +description: Amount of coin/tokens moved on-chain. +datePublished: 2021-08-24 +dateModified: 2025-04-30 +--- + +## Description + +Funding rates are periodic payments made to either long or short traders, calculated based on the difference between the perpetual contract prices and spot prices. When the market is bullish, the funding rate is positive and tends to rise over time. In these situations, traders who are long on a perpetual contract will pay a funding fee to traders on the opposing side. Conversely, the funding rate will be negative when the market is bearish, where traders who are short on a perpetual contract will pay a funding fee to long traders. + +More details on Binance [web-site](https://www.binance.com/en/support/faq/360033525031). + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Ratio + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Eight-Hour Intervals](/metrics/details/frequency#eight-hour-frequency) + +--- + +## Latency + +[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +### SanAPI + +Available under the `busd_binance_funding_rate` name. + +> Note: The metric is also accessible under the old name `busd_bnb_funding_rates`. +> Please start using the new name. + +```graphql explorer +{ + getMetric(metric: "busd_binance_funding_rate") { + timeseriesDataJson( + slug: "bitcoin" + from: "2021-04-01T00:00:00Z" + to: "2021-04-07T00:00:00Z" + interval: "8h" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/binance-derivatives/busd-binance-perpetual-open-interest-value/index.mdx b/src/content/docs/resources/metrics/binance-derivatives/busd-binance-perpetual-open-interest-value/index.mdx new file mode 100644 index 000000000..a36be1fde --- /dev/null +++ b/src/content/docs/resources/metrics/binance-derivatives/busd-binance-perpetual-open-interest-value/index.mdx @@ -0,0 +1,96 @@ +--- +title: Binance Perpetual Contracts Open Interest/Value (BUSD) +author: Lyudmil +description: The total number of Binance perpetual contracts in existence. +datePublished: 2022-02-08 +dateModified: 2025-04-30 +--- + +## Description + +Traders are always searching for information to get an edge in the market. The most valuable information is one that provides insights into what other traders are doing - Open Interest offers this information if you know how to interpret it. By understanding open interest and its impact on crypto prices, it can help you make better-informed trading decisions. + +More details on Binance [web-site](https://www.binance.com/en/blog/futures/what-information-does-open-interest-convey-421499824684900398). + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Dollars + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +### SanAPI - Open Interest + +Available under the `busd_binance_open_interest` name. + +> Note: The metric is also accessible under the old name `busd_bnb_open_interest`. +> Please start using the new name. + +```graphql explorer +{ + getMetric(metric: "busd_binance_open_interest") { + timeseriesDataJson( + slug: "bitcoin" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + + + +--- + +### SanAPI - Open Value + +Available under the `busd_binance_open_value` name. + +> Note: The metric is also accessible under the old name `busd_bnb_open_value`. +> Please start using the new name. + +```graphql explorer +{ + getMetric(metric: "busd_binance_open_value") { + timeseriesDataJson( + slug: "bitcoin" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/binance-derivatives/index.mdx b/src/content/docs/resources/metrics/binance-derivatives/index.mdx new file mode 100644 index 000000000..f5f68a683 --- /dev/null +++ b/src/content/docs/resources/metrics/binance-derivatives/index.mdx @@ -0,0 +1,14 @@ +--- +title: Binance Derivatives +author: Santiment Team +datePublished: 2022-02-09 +dateModified: 2024-03-27 +--- + +[Binance](https://www.binance.com/) is a cryptocurrency exchange which is the largest exchange in the world in terms of daily trading volume of cryptocurrencies. + +The Binance Derivative metrics available are: +- [Binance Perpetual Contract Funding Rate (USDT)](/metrics/binance-derivatives/usdt-binance-funding-rate) +- [Binance Perpetual Contract Funding Rate (BUSD)](/metrics/binance-derivatives/busd-binance-funding-rate) +- [Binance Perpetual Contracts Open Interest/Value (USDT)](/metrics/binance-derivatives/usdt-binance-perpetual-open-interest-value) +- [Binance Perpetual Contracts Open Interest/Value (BUSD)](/metrics/binance-derivatives/busd-binance-perpetual-open-interest-value) diff --git a/src/content/docs/resources/metrics/binance-derivatives/usdt-binance-funding-rate/index.mdx b/src/content/docs/resources/metrics/binance-derivatives/usdt-binance-funding-rate/index.mdx new file mode 100644 index 000000000..8c9ff1e4d --- /dev/null +++ b/src/content/docs/resources/metrics/binance-derivatives/usdt-binance-funding-rate/index.mdx @@ -0,0 +1,72 @@ +--- +title: Binance Contract Funding Rate (USDT) +author: Lyudmil +description: Amount of coin/tokens moved on-chain. +datePublished: 2021-08-24 +dateModified: 2025-04-30 +--- + +## Description + +Funding rates are periodic payments made to either long or short traders, calculated based on the difference between the perpetual contract prices and spot prices. When the market is bullish, the funding rate is positive and tends to rise over time. In these situations, traders who are long on a perpetual contract will pay a funding fee to traders on the opposing side. Conversely, the funding rate will be negative when the market is bearish, where traders who are short on a perpetual contract will pay a funding fee to long traders. + +More details on Binance [web-site](https://www.binance.com/en/support/faq/360033525031). + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Ratio + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Eight-Hour Intervals](/metrics/details/frequency#eight-hour-frequency) + +--- + +## Latency + +[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +### SanAPI + +Available under the `usdt_binance_funding_rate` name. + +> Note: The metric is also accessible under the old name `usdt_bnb_funding_rates`. +> Please start using the new name. + +```graphql explorer +{ + getMetric(metric: "usdt_binance_funding_rate") { + timeseriesDataJson( + slug: "bitcoin" + from: "2021-04-01T00:00:00Z" + to: "2021-04-07T00:00:00Z" + interval: "8h" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/binance-derivatives/usdt-binance-perpetual-open-interest-value/index.mdx b/src/content/docs/resources/metrics/binance-derivatives/usdt-binance-perpetual-open-interest-value/index.mdx new file mode 100644 index 000000000..7b32086c4 --- /dev/null +++ b/src/content/docs/resources/metrics/binance-derivatives/usdt-binance-perpetual-open-interest-value/index.mdx @@ -0,0 +1,96 @@ +--- +title: Binance Perpetual Contracts Open Interest/Value (USDT) +author: Lyudmil +description: The total number of Binance perpetual contracts in existence. +datePublished: 2022-02-08 +dateModified: 2025-04-30 +--- + +## Description + +Traders are always searching for information to get an edge in the market. The most valuable information is one that provides insights into what other traders are doing - Open Interest offers this information if you know how to interpret it. By understanding open interest and its impact on crypto prices, it can help you make better-informed trading decisions. + +More details on Binance [web-site](https://www.binance.com/en/blog/futures/what-information-does-open-interest-convey-421499824684900398). + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Dollars + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +### SanAPI - Open Interest + +Available under the `usdt_binance_open_interest` name. + +> Note: The metric is also accessible under the old name `usdt_bnb_open_interest`. +> Please start using the new name. + +```graphql explorer +{ + getMetric(metric: "usdt_binance_open_interest") { + timeseriesDataJson( + slug: "bitcoin" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + + + +--- + +### SanAPI - Open Value + +Available under the `usdt_binance_open_value` name. + +> Note: The metric is also accessible under the old name `usdt_bnb_open_value`. +> Please start using the new name. + +```graphql explorer +{ + getMetric(metric: "usdt_binance_open_value") { + timeseriesDataJson( + slug: "bitcoin" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/bitcoin-etf-volume/index.mdx b/src/content/docs/resources/metrics/bitcoin-etf-volume/index.mdx new file mode 100644 index 000000000..550570832 --- /dev/null +++ b/src/content/docs/resources/metrics/bitcoin-etf-volume/index.mdx @@ -0,0 +1,78 @@ +--- +title: Bitcoin ETF Volume +author: Filip +description: Bitcoin ETF Volume Metric +datePublished: 2024-04-01 +dateModified: 2025-04-30 +--- + +## Description + +The Bitcoin ETF Volume metric tracks the total volume in USD traded for a Bitcoin Exchange-Traded Fund +(ETF) within a specified period. This metric provides insight into the level of investor activity and +interest in trading Bitcoin through ETFs on traditional stock exchanges. Analyzing Bitcoin ETF volume +can help investors gauge market sentiment, liquidity, and the overall demand for Bitcoin exposure within +the traditional financial markets. + +> Note: Keep in mind that this metric is available during the working hours of the US stock exchange. + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Amount in USD + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +- arkb +- bitb +- btco +- fbtc +- gbtc +- hodl +- ibit + +--- + +### SanAPI + +Available under `etf_volume_usd_5m` name. + + +```graphql explorer +{ + getMetric(metric: "etf_volume_usd_5m"){ + timeseriesDataJson( + slug: "ibit" + from: "2024-04-01T00:00:00Z" + to: "2024-04-03T00:00:00Z" + interval: "5m") + } +} +``` diff --git a/src/content/docs/resources/metrics/bitfinex-derivatives/bitfinex-perpetual-funding-rate/index.mdx b/src/content/docs/resources/metrics/bitfinex-derivatives/bitfinex-perpetual-funding-rate/index.mdx new file mode 100644 index 000000000..43eac673a --- /dev/null +++ b/src/content/docs/resources/metrics/bitfinex-derivatives/bitfinex-perpetual-funding-rate/index.mdx @@ -0,0 +1,67 @@ +--- +title: Bitfinex Contract Funding Rate +author: Lyudmil +description: Amount of coin/tokens moved on-chain. +datePublished: 2022-02-08 +dateModified: 2025-04-30 +--- + +## Description + +Details about Bitfinex's funding rates [web-site](https://support.bitfinex.com/hc/en-us/articles/360024039494-How-are-the-Funding-interest-earnings-and-fees-calculated-at-Bitfinex). + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Ratio + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Hourly Intervals](/metrics/details/frequency#hourly-frequency) + +--- + +## Latency + +[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +### SanAPI + +Available under the `bitfinex_perpetual_funding_rate` name. + +```graphql explorer +{ + getMetric(metric: "bitfinex_perpetual_funding_rate") { + timeseriesDataJson( + slug: "bitcoin" + from: "2021-04-01T00:00:00Z" + to: "2021-04-07T00:00:00Z" + interval: "1h" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/bitfinex-derivatives/index.mdx b/src/content/docs/resources/metrics/bitfinex-derivatives/index.mdx new file mode 100644 index 000000000..1e8c7e75b --- /dev/null +++ b/src/content/docs/resources/metrics/bitfinex-derivatives/index.mdx @@ -0,0 +1,10 @@ +--- +title: Bitfinex Derivatives +author: Santiment Team +datePublished: 2022-02-09 +dateModified: 2024-03-27 +--- + +[Bitfinex](https://www.bitfinex.com/) is a digital asset trading platform offering state-of-the-art services for digital currency traders and global liquidity providers. + +- [Bitfinex Perpetual Contract Funding Rate](/metrics/bitfinex-derivatives/bitfinex-perpetual-funding-rate) diff --git a/src/content/docs/resources/metrics/bitmex-derivatives/index.mdx b/src/content/docs/resources/metrics/bitmex-derivatives/index.mdx new file mode 100644 index 000000000..aa2ff6e91 --- /dev/null +++ b/src/content/docs/resources/metrics/bitmex-derivatives/index.mdx @@ -0,0 +1,15 @@ +--- +title: BitMEX Derivatives +author: Santiment Team +datePublished: 2020-06-25 +dateModified: 2024-03-27 +--- + +[BitMEX](https://www.bitmex.com/) is a P2P crypto-products trading platform. +Metrics build on top of BitMEX trading contracts. + +- [BitMEX Perpetual Contract Funding Rate](/metrics/bitmex-derivatives/perpetual-contract-funding-rate) +- [BitMEX Perpetual Contract Price](/metrics/bitmex-derivatives/perpetual-contract-price) +- [BitMEX Price Index](/metrics/bitmex-derivatives/price-index) +- [BitMEX Perpetual Contract Basis](/metrics/bitmex-derivatives/perpetual-contract-basis) +- [BitMEX Perpetual Contracts Open Interest/Value](/metrics/bitmex-derivatives/perpetual-contracts-open-interest-value) diff --git a/src/content/docs/resources/metrics/bitmex-derivatives/perpetual-contract-basis/index.mdx b/src/content/docs/resources/metrics/bitmex-derivatives/perpetual-contract-basis/index.mdx new file mode 100644 index 000000000..2bc924ad8 --- /dev/null +++ b/src/content/docs/resources/metrics/bitmex-derivatives/perpetual-contract-basis/index.mdx @@ -0,0 +1,87 @@ +--- +title: BitMEX Perpetual Contract Basis +author: Anatoliy +description: Contract price - index price. +datePublished: 2020-06-03 +dateModified: 2025-04-30 +--- + +## Description + +Shows the difference between BitMEX [perpetual contract's price](/metrics/bitmex-derivatives/perpetual-contract-price) of + Project Ticker and BitMEX [index (spot) price](/metrics/bitmex-derivatives/price-index) for Project Ticker. + +Available as + absolute value or ratio. In the last case it is computed using the formula: `(contract's price - index + price)/index price` + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Dollars/Ratio + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +### SanAPI + +Basis absolute value is available under the `bitmex_perpetual_basis` name. + +```graphql explorer +{ + getMetric(metric: "bitmex_perpetual_basis") { + timeseriesDataJson( + slug: "bitcoin" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +And basis ratio - `bitmex_perpetual_basis_ratio`. + +```graphql explorer +{ + getMetric(metric: "bitmex_perpetual_basis_ratio") { + timeseriesDataJson( + slug: "bitcoin" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/bitmex-derivatives/perpetual-contract-funding-rate/index.mdx b/src/content/docs/resources/metrics/bitmex-derivatives/perpetual-contract-funding-rate/index.mdx new file mode 100644 index 000000000..5951b3750 --- /dev/null +++ b/src/content/docs/resources/metrics/bitmex-derivatives/perpetual-contract-funding-rate/index.mdx @@ -0,0 +1,92 @@ +--- +title: BitMEX Perpetual Contract Funding Rate +author: Anatoliy +description: Amount of coin/tokens moved on-chain. +datePublished: 2020-06-03 +dateModified: 2025-04-30 +--- + + +## Description + +The funding rate is a fee paid by one side of the perpetual contract to the other. When the funding rate is positive, Longs pay Shorts. When the funding rate is negative, Shorts pay Longs. + +More details on BitMEX [web-site](https://www.bitmex.com/app/perpetualContractsGuide#Mechanics-of-a-Perpetual-Contract-Market). + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Ratio + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +## Frequency + +[Eight-Hour Intervals](/metrics/details/frequency#eight-hour-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +### SanAPI + +Available under the `bitmex_perpetual_funding_rate` name. + +```graphql explorer +{ + getMetric(metric: "bitmex_perpetual_funding_rate") { + timeseriesDataJson( + slug: "bitcoin" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "8h" + ) + } +} +``` + +## Full list of metrics + +The full list of Bitmex Perpetual Funding Rate metrics is: + +
    + +Open Metrics List + +- bitmex_perpetual_funding_rate +- bitmex_perpetual_funding_rate_change_1d +- bitmex_perpetual_funding_rate_change_30d +- bitmex_perpetual_funding_rate_change_7d + +
    + diff --git a/src/content/docs/resources/metrics/bitmex-derivatives/perpetual-contract-price/index.mdx b/src/content/docs/resources/metrics/bitmex-derivatives/perpetual-contract-price/index.mdx new file mode 100644 index 000000000..44ba267d7 --- /dev/null +++ b/src/content/docs/resources/metrics/bitmex-derivatives/perpetual-contract-price/index.mdx @@ -0,0 +1,74 @@ +--- +title: BitMEX Perpetual Contract Price +author: Anatoliy +description: BitMEX Perpetual Contract Price +datePublished: 2020-06-03 +dateModified: 2025-04-30 +--- + +## Description +The BitMEX Perpetual Contract Price metric refers to the current trading price of perpetual +contracts offered on the BitMEX cryptocurrency exchange. Perpetual contracts are derivative +financial instruments that closely track the underlying asset's price without an expiry date, +allowing traders to speculate on price movements without actually owning the asset. The BitMEX +Perpetual Contract Price provides insight into market sentiment and liquidity for the corresponding +cryptocurrency pair on [BitMEX's](https://www.bitmex.com/) trading platform. + +BitMEX Perpetual Contract Price metric: +* `bitmex_perpetual_price` - BitMEX Perpetual Contract Price + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Amount in USD + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +### SanAPI + +Available under the `bitmex_perpetual_price` name. + +```graphql explorer +{ + getMetric(metric: "bitmex_perpetual_price") { + timeseriesDataJson( + slug: "bitcoin" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/bitmex-derivatives/perpetual-contracts-open-interest-value/index.mdx b/src/content/docs/resources/metrics/bitmex-derivatives/perpetual-contracts-open-interest-value/index.mdx new file mode 100644 index 000000000..18605920e --- /dev/null +++ b/src/content/docs/resources/metrics/bitmex-derivatives/perpetual-contracts-open-interest-value/index.mdx @@ -0,0 +1,93 @@ +--- +title: BitMEX Perpetual Contracts Open Interest/Value +author: Anatoliy +description: The total number of BitMEX perpetual contracts in existence. +datePublished: 2020-06-03 +dateModified: 2025-04-30 +--- + +## Description + +Open Interest shows the amount of open perpetual contracts currently on Bitmex's Project Ticker / USD trading + pairs. When open + interest reaches unusually high numbers, it can precede increased volatility in the coin's price. + +Open Value shows the value of the corresponding open interest in Satoshis (XBT/BTC). + +More details on BitMEX [web-site](https://www.bitmex.com/app/contract/XBTUSD) + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Dollars + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +### SanAPI - Open Interest + +Available under the `bitmex_perpetual_open_interest` name. + +```graphql explorer +{ + getMetric(metric: "bitmex_perpetual_open_interest") { + timeseriesDataJson( + slug: "bitcoin" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + + +--- + +### SanAPI - Open Value + +Available under the `bitmex_perpetual_open_value` name. + +```graphql explorer +{ + getMetric(metric: "bitmex_perpetual_open_value") { + timeseriesDataJson( + slug: "bitcoin" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/bitmex-derivatives/price-index/index.mdx b/src/content/docs/resources/metrics/bitmex-derivatives/price-index/index.mdx new file mode 100644 index 000000000..53e7cf92d --- /dev/null +++ b/src/content/docs/resources/metrics/bitmex-derivatives/price-index/index.mdx @@ -0,0 +1,69 @@ +--- +title: BitMEX Price Index +author: Anatoliy +description: Average asset price calculated using a number of data sources. +datePublished: 2020-06-03 +dateModified: 2025-04-30 +--- + +## Description + +BitMEX indices are composite, meaning that they are calculated using a number of data sources. BitMEX currently uses 9 constituents: Binance, Bitstamp, Bittrex, Coinbase, Gemini, Huobi, Itbit, Kraken, Poloniex. Aiming to be representative of the underlying asset’s market consensus price, each BitMEX index is calculated as a weighted average of the Last Price for each constituent exchange. + +More details on BitMEX [web-site](https://www.bitmex.com/app/indices). + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Dollars + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +### SanAPI + +Available under the `bitmex_composite_price_index` name. + +```graphql explorer +{ + getMetric(metric: "bitmex_composite_price_index") { + timeseriesDataJson( + slug: "bitcoin" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/btc-and-s-and-p-500-price-divergence/index.mdx b/src/content/docs/resources/metrics/btc-and-s-and-p-500-price-divergence/index.mdx new file mode 100644 index 000000000..83baab85b --- /dev/null +++ b/src/content/docs/resources/metrics/btc-and-s-and-p-500-price-divergence/index.mdx @@ -0,0 +1,75 @@ +--- +title: BTC and S&P 500 Price Divergence +author: Filip +description: BTC and S&P 500 Price Divergence Metric +datePublished: 2025-03-01 +dateModified: 2025-04-30 +--- + +## Description +The BTC vs. S&P 500 price divergence metric helps track how these two assets move +relative to each other. It measures the difference between their scaled prices, +showing whether Bitcoin is outperforming or lagging behind the stock market. When the +metric rises, it means Bitcoin is either dropping more than the S&P 500 or the S&P is +rallying harder than BTC. When it falls, the opposite is true—Bitcoin is holding up +better or even outpacing the stock market. This can be useful for spotting shifts in +risk appetite, market sentiment, or broader macro trends affecting both assets. + + +BTC and S&P 500 Price Divergence Metric: +* `btc_s_and_p_price_divergence` - Difference between the scaled prices of the S&P 500 and Bitcoin + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Divergence factor + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +Available for `bitcoin` + +--- + +### SanAPI + +Available under name: `btc_s_and_p_price_divergence` + + +```graphql explorer +{ + getMetric(metric: "btc_s_and_p_price_divergence"){ + timeseriesDataJson( + slug: "bitcoin" + from: "2025-01-01T00:00:00Z" + to: "2025-01-10T00:00:00Z" + interval: "1d") + } +} +``` diff --git a/src/docs/metrics/circulation/circulation-bitcoin.png b/src/content/docs/resources/metrics/circulation/circulation-bitcoin.png similarity index 100% rename from src/docs/metrics/circulation/circulation-bitcoin.png rename to src/content/docs/resources/metrics/circulation/circulation-bitcoin.png diff --git a/src/docs/metrics/circulation/circulation-line.png b/src/content/docs/resources/metrics/circulation/circulation-line.png similarity index 100% rename from src/docs/metrics/circulation/circulation-line.png rename to src/content/docs/resources/metrics/circulation/circulation-line.png diff --git a/src/docs/metrics/circulation/circulation-new.png b/src/content/docs/resources/metrics/circulation/circulation-new.png similarity index 100% rename from src/docs/metrics/circulation/circulation-new.png rename to src/content/docs/resources/metrics/circulation/circulation-new.png diff --git a/src/content/docs/resources/metrics/circulation/index.mdx b/src/content/docs/resources/metrics/circulation/index.mdx new file mode 100644 index 000000000..24ab3f307 --- /dev/null +++ b/src/content/docs/resources/metrics/circulation/index.mdx @@ -0,0 +1,152 @@ +--- +title: Circulation +author: Santiment Team +description: Number of unique coins/tokens being used during a time period +datePublished: 2020-04-01 +dateModified: 2025-04-30 +--- + + +## Definition + +Circulation shows number of unique coins/tokens being used during a time period. + +Examples: + +- `circulation_1d` - Shows how many unique coins/tokens were transacted during a + day. If one token/coin changes hands 5 times on a given day, it will be + counted once by the token circulation, but 5 times by the transaction volume. +- `circulation_1y` - Shows how many unique coins/tokens were transacted for the + past 1 year. + +There are also circulation metrics `circulation_usd_*` that represent the USD value of all +unique coins or tokens that were transacted within a single day. Unlike simple circulation +metrics that count the unique cryptocurrencies moved, `circulation_usd_*` metrics convert +the quantity of these coins or tokens into their equivalent value in USD. + +![circulation for bitcoin](circulation-bitcoin.png) + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Token/Coin amount + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Timebound + +[Timebound Metrics](/metrics/details/timebound) + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +> **Note:** `circulation` metric and all circulation metrics are +> available for the same set of assets. + +--- + +## SanAPI + +Available under the `circulation` and `circulation_` names. + +Gets the total amount of tokens that have been sent at least once during each +day for given time period. Projects are referred to by a unique identifier +(slug). This metric is calculated daily, so the interval should be selected +accordingly. + +```graphql explorer +{ + getMetric(metric: "circulation_1d") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +Without any suffixes like \_1d, the metric returns the number of coins/tokens +ever seen up until now, which is equal to the total supply at that datetime. + +```graphql explorer +{ + getMetric(metric: "circulation") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +The full list of Circulation metrics is: + +
    + +Open Metrics List + +- circulation +- circulation_10y +- circulation_180d +- circulation_1d +- circulation_2y +- circulation_30d +- circulation_365d +- circulation_3y +- circulation_5y +- circulation_60d +- circulation_7d +- circulation_90d +- circulation_change_1d +- circulation_change_30d +- circulation_change_7d +- circulation_180d_change_1d +- circulation_180d_change_30d +- circulation_180d_change_7d +- circulation_usd_180d +- circulation_usd_180d_change_1d +- circulation_usd_180d_change_30d +- circulation_usd_180d_change_7d + +
    diff --git a/src/docs/metrics/circulation/zilliqa-circulation.png b/src/content/docs/resources/metrics/circulation/zilliqa-circulation.png similarity index 100% rename from src/docs/metrics/circulation/zilliqa-circulation.png rename to src/content/docs/resources/metrics/circulation/zilliqa-circulation.png diff --git a/src/content/docs/resources/metrics/community-messages-count/index.mdx b/src/content/docs/resources/metrics/community-messages-count/index.mdx new file mode 100644 index 000000000..d9d9a9226 --- /dev/null +++ b/src/content/docs/resources/metrics/community-messages-count/index.mdx @@ -0,0 +1,91 @@ +--- +title: Community Messages Count +author: Vlad +description: Number of messages in a project's community chat server +# REF metrics-hub/metricshub/social_volume_unit.py +datePublished: 2020-04-14 +dateModified: 2025-10-24 +--- + + +## Definition + +Community Messages Count is build on top of the [Social Data](/metrics/details/social-data). + +Community Messages Count returns the number of messages written in the +asset's own community chat (telegram server) or subreddit (reddit). + +Currently `telegram` and `reddit` are supported. + +We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. + +Experimental metrics, might undergo changes if a future. + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Amount of documents that mention the given text pattern. + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Social Data Latency](/metrics/details/latency#social-data-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +> Note: `community_messages_count_telegram`, `community_messages_count_reddit` metric are available for the same set of assets. + +--- + +## SanAPI + +Available under the `community_messages_count_reddit` and `community_messages_count_telegram` names. + +```graphql explorer +{ + getMetric(metric: "community_messages_count_reddit") { + timeseriesDataJson( + selector: { slug: "solana" } + from: "2025-01-01T00:00:00Z" + to: "2025-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +The full list of Community Message Count metrics is: + +
    + +Open Metrics List + +- community_messages_count_telegram +- community_messages_count_reddit + +
    diff --git a/src/content/docs/resources/metrics/community-social-volume/index.mdx b/src/content/docs/resources/metrics/community-social-volume/index.mdx new file mode 100644 index 000000000..60a60263d --- /dev/null +++ b/src/content/docs/resources/metrics/community-social-volume/index.mdx @@ -0,0 +1,89 @@ +--- +title: Community Social Volume +author: Vlad +description: Number of messages in a project's community chat server +# REF metrics-hub/metricshub/social_volume_unit.py +datePublished: 2020-04-14 +dateModified: 2025-10-24 +--- + + +## Definition + +Community Social Volume is build on top of the [Social Data](/metrics/details/social-data). + +Community Social Volume returns social volume of the asses in the +asset's own community chat (telegram server) or subreddit (reddit). + +Currently `telegram` and `reddit` are supported. + +We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Amount of documents that mention the given text pattern. + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Social Data Latency](/metrics/details/latency#social-data-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +> Note: `community_social_volume_telegram`, `community_social_volume_reddit` metrics + +--- + +## SanAPI + +Available under the `community_social_volume_telegram` and `community_social_volume_reddit` names. + +```graphql explorer +{ + getMetric(metric: "community_social_volume_reddit") { + timeseriesDataJson( + selector: { slug: "solana" } + from: "2025-01-01T00:00:00Z" + to: "2025-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +The full list of Community Message Count metrics is: + +
    + +Open Metrics List + +- community_social_volume_telegram +- community_social_volume_reddit + +
    diff --git a/src/docs/metrics/contract-interacting-address-count/conract_interacting_address.png b/src/content/docs/resources/metrics/contract-interacting-address-count/conract_interacting_address.png similarity index 100% rename from src/docs/metrics/contract-interacting-address-count/conract_interacting_address.png rename to src/content/docs/resources/metrics/contract-interacting-address-count/conract_interacting_address.png diff --git a/src/content/docs/resources/metrics/contract-interacting-address-count/index.mdx b/src/content/docs/resources/metrics/contract-interacting-address-count/index.mdx new file mode 100644 index 000000000..35fc950af --- /dev/null +++ b/src/content/docs/resources/metrics/contract-interacting-address-count/index.mdx @@ -0,0 +1,40 @@ +--- +title: Interacting Address Count +author: Yury +description: Get interacting address count for a chain address / contract +datePublished: 2022-04-21 +dateModified: 2025-04-30 +--- + +## Definition + +Get interacting address count for a chain address / contract + +![Example of usage **interacting address count** on Sanbase](conract_interacting_address.png) + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## API + +Available under the `contract_interacting_addresses_count` name: + +```graphql explorer +{ + getMetric(metric: "contract_interacting_addresses_count") { + timeseriesDataJson( + selector: { + contractAddress: "0x857086e5e3dc7bbc98edb1639b4ffd96a667d75a" + } + from: "utc_now-90d" + to: "utc_now-60d" + interval: "1d" + ) + } +} +``` diff --git a/src/docs/metrics/contract-transactions-count/conract_interacting_address.png b/src/content/docs/resources/metrics/contract-transactions-count/conract_interacting_address.png similarity index 100% rename from src/docs/metrics/contract-transactions-count/conract_interacting_address.png rename to src/content/docs/resources/metrics/contract-transactions-count/conract_interacting_address.png diff --git a/src/content/docs/resources/metrics/contract-transactions-count/index.mdx b/src/content/docs/resources/metrics/contract-transactions-count/index.mdx new file mode 100644 index 000000000..03d3572eb --- /dev/null +++ b/src/content/docs/resources/metrics/contract-transactions-count/index.mdx @@ -0,0 +1,37 @@ +--- +title: Transactions Count +author: Yury +description: Get transactions count for a chain address / contract +datePublished: 2022-04-21 +dateModified: 2025-04-30 +--- + +## Definition + +Get transactions count for a chain address / contract + +![Example of usage **transactions count** on Sanbase](conract_interacting_address.png) + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## API + +Available under the `contract_transactions_count` name: + +```graphql explorer +{ + getMetric(metric: "contract_transactions_count") { + timeseriesDataJson( + selector: {contractAddress: "0x857086e5e3dc7bbc98edb1639b4ffd96a667d75a"} + from: "utc_now-90d" + to: "utc_now-60d", + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/crvusd-savings/index.mdx b/src/content/docs/resources/metrics/crvusd-savings/index.mdx new file mode 100644 index 000000000..49751eaf6 --- /dev/null +++ b/src/content/docs/resources/metrics/crvusd-savings/index.mdx @@ -0,0 +1,102 @@ +--- +title: CrvUSD Savings +author: Filip +description: CrvUSD Savings Metrics +datePublished: 2025-09-01 +dateModified: 2025-09-22 +--- + +## Description +CrvUSD Savings is a feature that allows users to deposit crvUSD and earn yield directly +on their stablecoin holdings. Savings returns are generated from lending markets and +protocol revenue, offering a low-effort way to put idle crvUSD to work. This provides +users with a safer, liquid option to grow their assets while supporting the Curve ecosystem. + + +CrvUSD Savings Metrics: +* `crvusd_savings_total_supplied` - Total supply of crvUSD in the savings contract +* `crvusd_savings_distributions` - Amount of crvUSD rewards distributed +* `crvusd_savings_apy` - Interest rate paid for depositing crvUSD + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +* `crvusd_savings_total_supplied` and `crvusd_savings_distributions`- Amount of crvUSD +* `crvusd_savings_apy` - Percentage + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for `crvusd` + +--- + +### SanAPI + +Total supplied metric: `crvusd_savings_total_supplied` + +```graphql explorer +{ + getMetric(metric: "crvusd_savings_total_supplied"){ + timeseriesDataJson( + slug: "crvusd" + from: "2025-09-01T00:00:00Z" + to: "2025-09-07T00:00:00Z" + interval: "1d") + } +} +``` + +Distributions metric: `crvusd_savings_distributions` + +```graphql explorer +{ + getMetric(metric: "crvusd_savings_distributions"){ + timeseriesDataJson( + slug: "crvusd" + from: "2025-09-01T00:00:00Z" + to: "2025-09-20T00:00:00Z" + interval: "1d") + } +} +``` + +Savings APY metric: `crvusd_savings_apy` + +```graphql explorer +{ + getMetric(metric: "crvusd_savings_apy"){ + timeseriesDataJson( + slug: "crvusd" + from: "2025-09-01T00:00:00Z" + to: "2025-09-20T00:00:00Z" + interval: "1d") + } +} +``` diff --git a/src/docs/metrics/daily-active-addresses/bitcoin-daa.png b/src/content/docs/resources/metrics/daily-active-addresses/bitcoin-daa.png similarity index 100% rename from src/docs/metrics/daily-active-addresses/bitcoin-daa.png rename to src/content/docs/resources/metrics/daily-active-addresses/bitcoin-daa.png diff --git a/src/content/docs/resources/metrics/daily-active-addresses/index.mdx b/src/content/docs/resources/metrics/daily-active-addresses/index.mdx new file mode 100644 index 000000000..dc7bf880b --- /dev/null +++ b/src/content/docs/resources/metrics/daily-active-addresses/index.mdx @@ -0,0 +1,80 @@ +--- +title: Daily Active Addresses +author: Santiment Team +description: Number of unique addresses participating in transactions during one day +# References +# +# Source code for metric computation: +# REF clickhouse-tables/daily_metrics/jobs/daily_active_addresses_job +# +# Sansheets reference +# REF google-spreadsheets-addon/ +# +# SanAPI reference +# +# REF sanbase2/lib/sanbase/clickhouse/metric +datePublished: 2019-11-21 +dateModified: 2025-04-30 +--- + +## Definition + +The number of distinct addresses that participated in a transfer for the given +asset in any given day. Each address is counted only once for the day, regardless of the amount of transfers it participates in. Both the +senders and the receivers of the asset are counted. + +![Daily Active Addresses for Bitcoin](bitcoin-daa.png) + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Non-negative number of addresses + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +## API + +Available under the `daily_active_addresses` name. + +```graphql explorer +{ + getMetric(metric: "daily_active_addresses") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/daily-active-deposits/index.mdx b/src/content/docs/resources/metrics/daily-active-deposits/index.mdx new file mode 100644 index 000000000..b6e31cdf8 --- /dev/null +++ b/src/content/docs/resources/metrics/daily-active-deposits/index.mdx @@ -0,0 +1,8 @@ +--- +title: Daily Active Deposits +author: Santiment Team +datePublished: 2019-11-21 +dateModified: 2024-04-03 +--- + +The article was moved to [Active Deposits](/metrics/active-deposits) page. \ No newline at end of file diff --git a/src/content/docs/resources/metrics/daily-aggregated-financial-metrics/index.mdx b/src/content/docs/resources/metrics/daily-aggregated-financial-metrics/index.mdx new file mode 100644 index 000000000..cb3386b37 --- /dev/null +++ b/src/content/docs/resources/metrics/daily-aggregated-financial-metrics/index.mdx @@ -0,0 +1,75 @@ +--- +title: Daily Aggregated Financial Metrics in USD +author: Ivan +description: Daily Aggregated OHLC Price, Trading Volume and Marketcap +datePublished: 2024-03-26 +dateModified: 2025-04-30 +--- + +## Definition + +The following metrics are computed by applying an aggregation of all the values of a metric +in a given day. + +- daily_avg_marketcap_usd +- daily_avg_price_usd +- daily_closing_marketcap_usd +- daily_closing_price_usd +- daily_high_price_usd +- daily_low_price_usd +- daily_opening_price_usd +- daily_trading_volume_usd + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Amount in USD + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[Daily Metrics Latency](/metrics/details/latency#daily-metrics-latency) + +--- + +## Available Assets + +Available Assets for [daily_avg_marketcap_usd](https://api.santiment.net/graphiql?query=%7B%0A%20%20getMetric(metric%3A%20%22daily_avg_marketcap_usd%22)%7B%0A%20%20%20%20metadata%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D) + +Use the same API call to check the available metrics for the other metrics. + +--- + +## SanAPI + +```graphql explorer +{ + getMetric(metric: "daily_closing_price_usd") { + timeseriesDataJson( + slug: "ethereum" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/decentralized-exchange-metrics/dex_list.mdx b/src/content/docs/resources/metrics/decentralized-exchange-metrics/dex_list.mdx new file mode 100644 index 000000000..fdb17645f --- /dev/null +++ b/src/content/docs/resources/metrics/decentralized-exchange-metrics/dex_list.mdx @@ -0,0 +1,36 @@ +--- +title: List of Available Decentralized Exchanges on Ethereum +author: Maksim Razhev, Serge Nedashkovsky, Filip +description: DEX Metrics +datePublished: 2023-11-09 +dateModified: 2025-10-28 +--- + +``` +balancer +bamboodefi +bancor_v3 +chickenswap +clipper +curve +defiplaza +defiswap +dodo +elk +empiredex +kwikswap +kyberswap +mooniswap +pancake_v3 +radioshack +saddle +shibaswap +standardtech +sumswap_v2 +sushi_v2 +synapse +uniswap_v2 +uniswap_v3 +uniswap_v4 +youswap +``` diff --git a/src/content/docs/resources/metrics/decentralized-exchange-metrics/index.mdx b/src/content/docs/resources/metrics/decentralized-exchange-metrics/index.mdx new file mode 100644 index 000000000..a9044b8ef --- /dev/null +++ b/src/content/docs/resources/metrics/decentralized-exchange-metrics/index.mdx @@ -0,0 +1,208 @@ +--- +title: Decentralized Exchange Metrics +author: Maksim Razhev, Serge Nedashkovsky, Filip +description: DEX Metrics +datePublished: 2020-12-24 +dateModified: 2025-04-30 +--- + +> DEX metrics have been migrated to a new framework, with new data starting from May 5, 2022. +> Data between February 9, 2017 and May 5, 2022, is sourced from the old +> framework ([Available DEXs for old framework](/metrics/decentralized-exchange-metrics/old_dex_list)). +> **Although older data remains accessible through the API, we do not recommend its use.** + +## Description + +Decentralized exchanges, or DEXs, revolutionize cryptocurrency trading by eliminating the need for +a central authority. Operating on blockchain technology, these exchanges empower users with direct +peer-to-peer transactions, enhancing security and control over funds. DEXs embody the principles of +transparency and trustlessness, offering users a more resilient and inclusive financial ecosystem. + +List of decentralized exchanges: [Available Decentralized Exchanges](/metrics/decentralized-exchange-metrics/dex_list). +Additionally, there is a label `unknown` for DEXs that haven't been labeled. + +Metrics are divided into four groups: + +#### Trade volume in USD segmented by DEX + +- `total_trade_volume_by_dex` - Total trading volume in USD +- `eth_based_trade_volume_by_dex` - Trading volume in USD involving ETH-based tokens[1](#eth-based-tokens) +- `stablecoin_trade_volume_by_dex` - Trading volume in USD involving Stablecoins[2](#usd-based-stablecoins) +- `other_trade_volume_by_dex` - The trading volume in USD involving tokens not falling into + any of the above categories + +#### Number of trades segmented by DEX + +- `total_trade_amount_by_dex` - Number of all trades +- `eth_based_trade_amount_by_dex` - Number of trades involving ETH-Based tokens[1](#eth-based-tokens) +- `stablecoin_trade_amount_by_dex` - Number of trades involving Stablecoins[2](#usd-based-stablecoins) +- `other_trade_amount_by_dex` - Number of trades involving tokens not falling into + any of the above categories + +#### Trade volume segmented by DEX and asset + +- `eth_trade_volume_by_token` - Trading volume in ETH between ERC20 token and ETH-Based tokens[1](#eth-based-tokens) +- `stablecoin_trade_volume_by_token` - Trading volume in USD between ERC20 token and Stablecoins[2](#usd-based-stablecoins) + +#### Token price in ETH segmented by DEX and asset + +- `token_eth_price_by_dex_5m` - Token price in ETH segmented by DEX for trades between given ERC20 token + and ETH-based tokens [1](#eth-based-tokens) + +--- + +### ETH Based Tokens + +ETH, WETH, ETH Kyber, ETHWrapped and Bancor ETH. + +### USD-based Stablecoins + +Tether, USD coin, DAI, Binance USD, TrueUSD and other stablecoins. + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +- `total_trade_volume_by_dex`, `eth_based_trade_volume_by_dex`, `stablecoin_trade_volume_by_dex`, + `other_trade_volume_by_dex` - Amount in USD +- `total_trade_amount_by_dex`, `eth_based_trade_amount_by_dex`, `stablecoin_trade_amount_by_dex`, + `other_trade_amount_by_dex` - Number of trades +- `eth_trade_volume_by_token` - Amount in ETH +- `stablecoin_trade_volume_by_token` - Amount in stablecoins +- `token_eth_price_by_dex_5m` - Amount in ETH + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +- `total_trade_volume_by_dex`, `eth_based_trade_volume_by_dex`, `stablecoin_trade_volume_by_dex`, + `other_trade_volume_by_dex`: multi-collateral-dai +- `total_trade_amount_by_dex`, `eth_based_trade_amount_by_dex`, `stablecoin_trade_amount_by_dex`, + `other_trade_amount_by_dex`: multi-collateral-dai +- `eth_trade_volume_by_token`, `stablecoin_trade_volume_by_token`, `token_eth_price_by_dex_5m`: [ERC20 assets]() + +> **Note:** `<>_trade_volume_by_dex` and `<>_trade_amount_by_dex` metrics are not asset-based. +> They are related to DEX data and `multi-collateral-dai` is placeholder for the data. + +--- + +### SanAPI + +Trade volume metrics: `total_trade_volume_by_dex`, `eth_based_trade_volume_by_dex`, +`stablecoin_trade_volume_by_dex` and `other_trade_volume_by_dex` + +```graphql explorer +{ + getMetric(metric: "total_trade_volume_by_dex") { + timeseriesDataJson( + selector: { + slug: "multi-collateral-dai" + owner: "bancor_v3" + label: "decentralized_exchange" + } + from: "2023-01-01T00:00:00Z" + to: "2023-01-07T00:00:00Z" + interval: "5m" + ) + } +} +``` + +Number of trades metrics: `total_trade_amount_by_dex`, `eth_based_trade_amount_by_dex`, +`stablecoin_trade_amount_by_dex` and `other_trade_amount_by_dex` + +```graphql explorer +{ + getMetric(metric: "total_trade_amount_by_dex") { + timeseriesDataJson( + selector: { + slug: "multi-collateral-dai" + owner: "sushi_v2" + label: "decentralized_exchange" + } + from: "2023-01-01T00:00:00Z" + to: "2023-01-07T00:00:00Z" + interval: "5m" + ) + } +} +``` + +Trade volume between ERC20 token and ETH-based tokens: `eth_trade_volume_by_token` + +```graphql explorer +{ + getMetric(metric: "eth_trade_volume_by_token") { + timeseriesDataJson( + selector: { + slug: "chainlink" + owner: "uniswap_v2" + label: "decentralized_exchange" + } + from: "2023-01-01T00:00:00Z" + to: "2023-01-07T00:00:00Z" + interval: "5m" + ) + } +} +``` + +Trade volume between ERC20 token and stablecoins: `stablecoin_trade_volume_by_token` + +```graphql explorer +{ + getMetric(metric: "stablecoin_trade_volume_by_token") { + timeseriesDataJson( + selector: { + slug: "wrapped-bitcoin" + owner: "uniswap_v3" + label: "decentralized_exchange" + } + from: "2023-01-01T00:00:00Z" + to: "2023-01-07T00:00:00Z" + interval: "5m" + ) + } +} +``` + +Token ETH Price by DEX: `token_eth_price_by_dex_5m` + +```graphql explorer +{ + getMetric(metric: "token_eth_price_by_dex_5m") { + timeseriesDataJson( + selector: { + slug: "usd-coin" + owner: "uniswap_v3" + label: "decentralized_exchange" + } + from: "2023-01-01T00:00:00Z" + to: "2023-01-07T00:00:00Z" + interval: "5m" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/decentralized-exchange-metrics/old_dex_list.mdx b/src/content/docs/resources/metrics/decentralized-exchange-metrics/old_dex_list.mdx new file mode 100644 index 000000000..4a1703f18 --- /dev/null +++ b/src/content/docs/resources/metrics/decentralized-exchange-metrics/old_dex_list.mdx @@ -0,0 +1,33 @@ +--- +title: List of Available Decentralized Exchanges (old framework) +author: Maksim Razhev, Serge Nedashkovsky, Filip +description: DEX Metrics +datePublished: 2023-11-09 +dateModified: 2023-11-09 +--- + +``` +0x_v1 +0x_v2 +0x_v3 +Airswap +Balancer +Bancor +Curve +DDEX +DEXTop +Etherdelta +Gnosis +IDEX +KyberNetwork +OasisDEX +Synthetix +TokenStore +Uniswap +UniswapV2 +dYdX +sushiswap +``` + +> Note: DEX metrics have been migrated to a new framework. + diff --git a/src/content/docs/resources/metrics/deprecated-metrics/deprecated-defi-metrics.mdx b/src/content/docs/resources/metrics/deprecated-metrics/deprecated-defi-metrics.mdx new file mode 100644 index 000000000..ab9b8a6a5 --- /dev/null +++ b/src/content/docs/resources/metrics/deprecated-metrics/deprecated-defi-metrics.mdx @@ -0,0 +1,101 @@ +--- +title: Deprecated DeFi +author: Serge Nedashkovsky, Maksim Razhev, Anatoliy +description: DeFi Metrics +datePublished: 2020-07-13 +dateModified: 2025-04-30 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + + + +Note: The underlying data for metrics is no longer supported. +**Although data remains accessible through the API, we do not recommend its use.** + + + +### Description + +Some of the DeFi-related metrics have their own pages: + +**MakerDAO Special Metrics**: +[MakerDAO metrics](/metrics/lending-and-borrowing-protocols/makerdao/) + +**Metrics related to DeFi protocols**: +[Flow and balance metrics](/metrics/labeled-balance) + +On this page the following metrics are defined: + +- `defi_total_value_locked_usd` - Shows total value locked in DeFi projects, available in USD . +- `defi_total_value_locked_eth` - Shows total value locked in DeFi projects, available in ETH. + +--- + +### Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +### Measuring Unit + +Amount of USD/ETH + +--- + +### Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +### Frequency + +[Hourly Intervals](/metrics/details/frequency#hourly-frequency) + +--- + +### Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +### Available Assets + +Available for `ethereum`. + +--- + +## SanAPI + +Amount of total locked ETH coins is available under the `defi_total_value_locked_eth` name. + +```graphql explorer +{ + getMetric(metric: "defi_total_value_locked_eth") { + timeseriesDataJson( + slug: "ethereum" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1h" + ) + } +} +``` + +Denominated in USD - `defi_total_value_locked_usd`. + +```graphql explorer +{ + getMetric(metric: "defi_total_value_locked_usd") { + timeseriesDataJson( + slug: "ethereum" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1h" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/deprecated-metrics/deprecated-makerdao-metrics.mdx b/src/content/docs/resources/metrics/deprecated-metrics/deprecated-makerdao-metrics.mdx new file mode 100644 index 000000000..abd9b0f53 --- /dev/null +++ b/src/content/docs/resources/metrics/deprecated-metrics/deprecated-makerdao-metrics.mdx @@ -0,0 +1,180 @@ +--- +title: Deprecated MakerDAO Metrics +author: Maksim Razhev, Serge Nedashkovsky, Filip +description: Deprecated MakerDAO Metrics +datePublished: 2021-01-28 +dateModified: 2025-04-30 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + + + +Note: MakerDAO metrics have been migrated to a new framework. +**Although older data remains accessible through the API, we do not recommend its use.** +The old metrics will stop being computed and they will be removed. + + + +## Description + +Metrics related to MakerDAO protocols. + +**Single-Collateral DAI**: + +- `scd_locked_token` - The volume of WETH locked in Single-Collateral DAI contract. +- `scd_collat_ratio` - Single-Collateral DAI Collateralization Ratio + +**Multi-Collateral DAI**: + +- `mcd_locked_token` - The volume of collateral locked in Multi-Collateral DAI contracts, + measured by a token[1] +- `mcd_liquidation` - Amount of liquidated tokens[2] +- `mcd_erc20_supply` - DAI ERC20 token total supply +- `mcd_supply` - The total amount of Multi-Collareral DAI tokens: DAI ERC20 Supply plus DAI in DSR +- `mcd_collat_ratio_weth` - These metrics show the collateralization ratio of MCD collateral tokens. + +> [1]: Please switch to the new metric `makerdao_total_supplied_usd`, +> [2]: Please switch to the new metric `makerdao_action_liquidations_usd` + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +The following metrics' unit is amount of coins: + +- `mcd_locked_token` +- `scd_locked_token` +- `mcd_erc20_supply` +- `mcd_supply` + +The rest: + +- MakerDAO contract parameter values + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +The following metrics have [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) + +- `mcd_supply` - [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) + +The rest of the metrics have [Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +Collateral assets of Single-Collateral DAI: + +- `weth` + +Collateral assets of Multi-Collateral DAI: + +- `weth` +- `basic-attention-token` +- `kyber-network` +- `0x` +- `yearn-finance` +- `wrapped-bitcoin` +- `chainlink` +- `loopring` +- `weth-b` +- `decentraland` +- `balancer` +- `compound` + +USD-based Stablecoin collaterals: + +- `tether` +- `paxos-standard-token` +- `usdc-b` +- `dai` +- `trueusd` +- `gemini-dollar` + +Assets available for metrics: + +- `scd_locked_token`, `mcd_collat_ratio_weth`, `scd_collat_ratio` - `weth` +- `daily_dai_collat_ratio_stablecoin` - USD-based stablecoin collaterals +- `daily_dai_collat_ratio_wbtc` - `wrapped-bitcoin` +- `mcd_erc20_supply`, `mcd_supply`, `msd_dsr` - `multi-collateral-dai` + +--- + +### SanAPI + +Token Locked in Multi-Collateral CDPs + +```graphql explorer +{ + getMetric(metric: "mcd_locked_token") { + timeseriesDataJson( + slug: "weth" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d") + } +} +``` + +DAI ERC20 token total supply: + +```graphql explorer +{ + getMetric(metric: "mcd_erc20_supply") { + timeseriesDataJson( + slug: "multi-collateral-dai" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d") + } +} +``` + +DAI Total supply: + +```graphql explorer +{ + getMetric(metric: "mcd_supply") { + timeseriesDataJson( + slug: "multi-collateral-dai" + from: "2020-04-02T00:00:00Z" + to: "2020-04-03T00:00:00Z" + interval: "5m") + } +} +``` + +SCD Collateral Ratio: + +```graphql explorer +{ + getMetric(metric: "scd_collat_ratio") { + timeseriesDataJson( + slug: "weth" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/deprecated-metrics/deprecated-social-metrics.mdx b/src/content/docs/resources/metrics/deprecated-metrics/deprecated-social-metrics.mdx new file mode 100644 index 000000000..7325459b6 --- /dev/null +++ b/src/content/docs/resources/metrics/deprecated-metrics/deprecated-social-metrics.mdx @@ -0,0 +1,44 @@ +--- +title: Deprecated Social Metrics +author: Ivan +datePublished: 2024-05-13 +dateModified: 2024-05-13 +--- + +## Overview + +The social metrics are computed for each media source - twitter, telegram, etc. +For some time the Twitter source was split into multiple sources - `twitter_nft`, +`twitter_news` and `twitter_crypto`. +There is also a combined `twitter` source, which includes data from all sub-sources. +The metrics for these sub-sources have not been computed since April 2023. +Since May 9 2024, the metrics for these sub-sources have been completely removed from the API. + +## Deprecated metrics + +- sentiment_volume_consumed_twitter_crypto +- sentiment_volume_consumed_twitter_news +- sentiment_volume_consumed_twitter_nft +- sentiment_balance_twitter_crypto +- sentiment_balance_twitter_news +- sentiment_balance_twitter_nft +- sentiment_negative_twitter_crypto +- sentiment_negative_twitter_news +- sentiment_negative_twitter_nft +- sentiment_positive_twitter_crypto +- sentiment_positive_twitter_news +- sentiment_positive_twitter_nft +- social_volume_newsapi_crypto +- social_volume_twitter_crypto +- social_volume_twitter_news +- social_volume_twitter_nft +- social_dominance_newsapi_crypto +- social_dominance_twitter_crypto_1h_moving_average +- social_dominance_twitter_crypto_24h_moving_average +- social_dominance_twitter_news_1h_moving_average +- social_dominance_twitter_news_24h_moving_average +- social_dominance_twitter_nft_1h_moving_average +- social_dominance_twitter_nft_24h_moving_average +- social_dominance_twitter_crypto +- social_dominance_twitter_news +- social_dominance_twitter_nft diff --git a/src/content/docs/resources/metrics/deprecated-metrics/deprecated-uniswap-metrics.mdx b/src/content/docs/resources/metrics/deprecated-metrics/deprecated-uniswap-metrics.mdx new file mode 100644 index 000000000..8455bd2b5 --- /dev/null +++ b/src/content/docs/resources/metrics/deprecated-metrics/deprecated-uniswap-metrics.mdx @@ -0,0 +1,93 @@ +--- +title: Deprecated Uniswap Airdrop Metrics +author: Filip +datePublished: 2024-04-01 +dateModified: 2025-04-30 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + + + +Note: The Airdrop occurred in September 2020, but there are no more claims. +**Although data remains accessible through the API, we do not recommend its use.** + + + +## Definition + +The Uniswap Airdrop Metrics provide insights into the distribution of tokens resulting from the Uniswap +protocol's decentralized exchange activity. This airdrop, which took place in September 2020, allocated +tokens to users based on their past interactions with the Uniswap platform. + +Uniswap Airdrop Metrics: + +- `uniswap_total_lp_claims_amount` - The amount of tokens claimed by both users and liquidity providers up to that point in time +- `uniswap_user_claims_count` - The amount of claims by users +- `uniswap_user_claims_amount` - The amount of tokens claimed given to users +- `uniswap_lp_claims_amount` - The amount of tokens claimed given to liquidity providers +- `uniswap_total_claims_percent` - The percentage of claimed tokens +- `uniswap_total_claims_amount` - The amount of tokens claimed by both users and liquidity providers up to that point in time +- `uniswap_top_claimers` - The biggest claimers sorted by amount they claimed in a given period +- `uniswap_claims_amount` - The amount of tokens claimed by both users and liquidity providers +- `uniswap_claims_count` - The amount of claims claimed by both users and liquidity providers +- `uniswap_total_user_claims_amount` - The amount of tokens claimed by users up to that point in time +- `uniswap_lp_claims_count` - The amount of claims by liquidity providers +- `uniswap_total_claims_count` - The total amount of claims by both users and liquidity providers up to that point in time +- `uniswap_total_user_claims_count` - The total amount of claims by users up to that point in time +- `uniswap_total_lp_claims_count` - The total amount of claims by liquidity providers up to that point in time + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Metrics that have `amount` in name represent the number of tokens. +Metrics that have `count` in name represent the number of claims. +Metrics that have `percent` in name represent the percentage. + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-minute frequency](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +`uniswap` + +--- + +## API + +```graphql explorer +{ + getMetric(metric: "uniswap_claims_amount") { + timeseriesDataJson( + slug: "uniswap" + from: "2020-09-15T00:00:00Z" + to: "2020-10-01T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/deprecated-metrics/index.mdx b/src/content/docs/resources/metrics/deprecated-metrics/index.mdx new file mode 100644 index 000000000..c61bcf65a --- /dev/null +++ b/src/content/docs/resources/metrics/deprecated-metrics/index.mdx @@ -0,0 +1,65 @@ +--- +title: Deprecated Metrics +author: Filip +datePublished: 2024-04-01 +dateModified: 2025-01-16 +--- + +import Notebox from '$components/markdown/Notebox.svelte' +import Resource from '$components/markdown/Resource.svelte' + +## Deprecated Metrics + + + +Deprecated metrics are ones that our system has designated as being out of date or obsolete. +These metrics are no longer actively supported or recommended for use in current analysis or +reporting. They represent historical data points that may not accurately reflect current trends +or insights. While the data for deprecated metrics still exists within our system, we do not +recommend using them due to their deprecated status. Relying on deprecated metrics can lead to inaccurate +analysis and decision-making, as they may no longer align with the most up-to-date information and +methodologies. It's crucial for users to be aware of the deprecation status of these metrics and to +transition to alternative, more relevant metrics for their analysis needs. + + + +## Why Do We Deprecate Metrics? + +Metrics become deprecated for various reasons, reflecting the dynamic nature of our systems and data +analysis practices. Here's why certain metrics may be marked as deprecated: + +1. **Adaptation to Changing Needs**: Over time, shifts in business priorities, market dynamics, or user + requirements may render certain metrics obsolete or redundant. Metrics that no longer serve a meaningful + purpose due to changes in events, processes, or stakeholder demands are deprecated to streamline analysis + efforts and maintain focus on metrics that drive actionable insights. + +2. **Improving Data Integrity**: Deprecating metrics helps maintain data integrity by discouraging the + use of outdated or unreliable indicators that may skew analyses or mislead decision-making. By phasing + out obsolete metrics, we uphold the quality and accuracy of our analytical outputs, ensuring that + stakeholders can confidently rely on the insights derived from our data. + +3. **Evolution of Data Sources**: As our data infrastructure advances, we often transition to new and improved + data sources that offer enhanced accuracy, granularity, or coverage. Metrics tied to outdated data sources + become deprecated as we migrate towards more reliable sources, ensuring that our analyses are based on + the most up-to-date and comprehensive information available. + +## Why Do We Keep Them? + +While deprecated metrics may no longer be actively supported, it's essential to stay informed about their +deprecation to ensure accurate and relevant analysis. By understanding why metrics are deprecated and +identifying suitable replacements, you can maintain the integrity and effectiveness of your data analysis +processes. + +## List Of Deprecated Metrics + + + +- [Deprecated MakerDAO Metrics](/metrics/deprecated-metrics/deprecated-makerdao-metrics) - + MakerDAO metrics have been migrated to a new framework +- [Deprecated Defi Metrics](/metrics/deprecated-metrics/deprecated-defi-metrics) - The underlying data for metrics is + no longer supported +- [Deprecated Uniswap Airdrop Metrics](/metrics/deprecated-metrics/deprecated-uniswap-metrics) - The Airdrop + occurred in September 2020, but there are no more claims +- [Deprecated Social Metrics](/metrics/deprecated-metrics/deprecated-social-metrics) - Some of the socual sources were combined into one. + + diff --git a/src/content/docs/resources/metrics/deribit-derivatives/deribit-perpetual-funding-rate/index.mdx b/src/content/docs/resources/metrics/deribit-derivatives/deribit-perpetual-funding-rate/index.mdx new file mode 100644 index 000000000..04b3e81f9 --- /dev/null +++ b/src/content/docs/resources/metrics/deribit-derivatives/deribit-perpetual-funding-rate/index.mdx @@ -0,0 +1,69 @@ +--- +title: Deribit Contract Funding Rate +author: Lyudmil +description: Amount of coin/tokens moved on-chain. +datePublished: 2022-02-08 +dateModified: 2025-04-30 +--- + +## Description + +The Deribit perpetual contract features a continuous measurement of the difference between the mark price of the contract and the Deribit BTC Index. The percentage difference between these two price levels is the basis for the 8-hourly funding rate that is applied to all outstanding perpetual contracts. + +More details on Deribit [web-site](https://www.deribit.com/kb/futures). + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Ratio + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Hourly Intervals](/metrics/details/frequency#hourly-frequency) + +--- + +## Latency + +[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +### SanAPI + +Available under the `deribit_perpetual_funding_rate` name. + +```graphql explorer +{ + getMetric(metric: "deribit_perpetual_funding_rate") { + timeseriesDataJson( + slug: "bitcoin" + from: "2021-04-01T00:00:00Z" + to: "2021-04-07T00:00:00Z" + interval: "1h" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/deribit-derivatives/index.mdx b/src/content/docs/resources/metrics/deribit-derivatives/index.mdx new file mode 100644 index 000000000..6dc249caa --- /dev/null +++ b/src/content/docs/resources/metrics/deribit-derivatives/index.mdx @@ -0,0 +1,10 @@ +--- +title: Deribit Derivatives +author: Santiment Team +datePublished: 2022-02-10 +dateModified: 2024-03-27 +--- + +[Deribit](https://www.deribit.com/) is a derivatives platform for traders of all backgrounds and trading styles. + +- [Deribit Perpetual Contract Funding Rate](/metrics/deribit-derivatives/deribit-perpetual-funding-rate) diff --git a/src/content/docs/resources/metrics/details/access.mdx b/src/content/docs/resources/metrics/details/access.mdx new file mode 100644 index 000000000..b60989ef0 --- /dev/null +++ b/src/content/docs/resources/metrics/details/access.mdx @@ -0,0 +1,45 @@ +--- +title: Access +author: Ivan +datePublished: 2020-04-09 +dateModified: 2021-05-26 +--- + +- [Free Access](#free-access) +- [Restricted Access](#restricted-access) + +## Free Access + +Metrics with free access have full historical and realtime data available +in the `Free` plan and all paid plans. + +## Restricted Access + +Metrics with restricted access have partial access to the metric data. +The restrictions depend both on the product used (Sanbase, SanAPI) and the +subscription plan used (Free, Basic, Pro, etc.). + +Some of the metrics that are available on Sanbase might not be available in the +Free and Basic SanAPI plans, but only in Pro and higher. + +## Detailed Access Restrictions per product/plan + +Detailed access restrictions per product and plan can be found here: + +- [SanAPI Free](https://api.santiment.net/graphiql?query=%7B%0A%20%20getAccessRestrictions(plan%3A%20FREE%2C%20product%3A%20SANAPI)%20%7B%0A%20%20%20%20name%0A%20%20%20%20type%0A%20%20%20%20isAccessible%0A%20%20%20%20isRestricted%0A%20%20%20%20restrictedFrom%0A%20%20%20%20restrictedTo%0A%20%20%7D%0A%7D%0A) +- [SanAPI Basic](https://api.santiment.net/graphiql?query=%7B%0A%20%20getAccessRestrictions(plan%3A%20BASIC%2C%20product%3A%20SANAPI)%20%7B%0A%20%20%20%20name%0A%20%20%20%20type%0A%20%20%20%20isAccessible%0A%20%20%20%20isRestricted%0A%20%20%20%20restrictedFrom%0A%20%20%20%20restrictedTo%0A%20%20%7D%0A%7D%0A) +- [SanAPI Pro](https://api.santiment.net/graphiql?query=%7B%0A%20%20getAccessRestrictions(plan%3A%20PRO%2C%20product%3A%20SANAPI)%20%7B%0A%20%20%20%20name%0A%20%20%20%20type%0A%20%20%20%20isAccessible%0A%20%20%20%20isRestricted%0A%20%20%20%20restrictedFrom%0A%20%20%20%20restrictedTo%0A%20%20%7D%0A%7D%0A) +- [Sanbase Free](https://api.santiment.net/graphiql?query=%7B%0A%20%20getAccessRestrictions(plan%3A%20FREE%2C%20product%3A%20SANBASE)%20%7B%0A%20%20%20%20name%0A%20%20%20%20type%0A%20%20%20%20isAccessible%0A%20%20%20%20isRestricted%0A%20%20%20%20restrictedFrom%0A%20%20%20%20restrictedTo%0A%20%20%7D%0A%7D%0A) +- [Sanbase Pro](https://api.santiment.net/graphiql?query=%7B%0A%20%20getAccessRestrictions(plan%3A%20PRO%2C%20product%3A%20SANBASE)%20%7B%0A%20%20%20%20name%0A%20%20%20%20type%0A%20%20%20%20isAccessible%0A%20%20%20%20isRestricted%0A%20%20%20%20restrictedFrom%0A%20%20%20%20restrictedTo%0A%20%20%7D%0A%7D%0A) +- [Sanbase Pro+](https://api.santiment.net/graphiql?query=%7B%0A%20%20getAccessRestrictions(plan%3A%20PRO%2C%20product%3A%20SANBASE)%20%7B%0A%20%20%20%20name%0A%20%20%20%20type%0A%20%20%20%20isAccessible%0A%20%20%20%20isRestricted%0A%20%20%20%20restrictedFrom%0A%20%20%20%20restrictedTo%0A%20%20%7D%0A%7D%0A) + +Description of the fields: + +- `type` - Either [query](/glossary/#query) or [metric](/glossary/#metric) +- `name` - The name of the query or metric. Check the [query](/glossary/#query) and [metric](/glossary/#metric) definition and examples in order to understand what the name represents exactly. +- `isAccessible` - Shows if the given metric/query is accessible for the provided product/plan. +- `isRestricted` - Shows if any time (historical or realtime) restrictions are applied. +- `restrictedFrom` - Shows the first date the given product/plan has access to for the specific metric/query. If it is `null` then no restrictions are applied. +- `restrictedTo` - Shows the last date the given product/plan has access to for the specific metric/query. If it is `null` then no restrictions are applied. + +> Note: The `isRestricted`, `restrictedFrom` and `restrictedTo` fields are meaningful only if `isAccessible` is `true`. diff --git a/src/content/docs/resources/metrics/details/change_metrics.mdx b/src/content/docs/resources/metrics/details/change_metrics.mdx new file mode 100644 index 000000000..94d968b31 --- /dev/null +++ b/src/content/docs/resources/metrics/details/change_metrics.mdx @@ -0,0 +1,95 @@ +--- +title: Change Metrics +author: Ivan +datePublished: 2022-04-12 +dateModified: 2025-04-30 +--- + +- [Definition](#definition) +- [Units](#units) +- [Examples](#examples) + - [price_usd_change_1d](#price_usd_change_1d) + - [circulation_180d_change_1d](#circulation_180d_change_1d) +- [API examples](#api-examples) + - [Get timeseries data of a change metric](#get-timeseries-data-of-a-change-metric) + - [Get aggregated value for multiple assets](#get-aggregated-value-for-multiple-assets) + metric](#get-timeseries-data-of-a-change-metric) + - [Get aggregated value for multiple + assets](#get-aggregated-value-for-multiple-assets) + +## Definition + +The metrics with the suffix `_change_` indicate the percent value +change at the given time compared to `interval` time ago. This allows the +percent changes to be fetched historically and to be plotted on charts. + +Change metrics' names are formed from the original metric name and a change +suffix. Available change intervals and their suffixes are: + +- `_change_1h` - 1 hour. Available only for USD price +- `_change_1d` - 1 day +- `_change_7d` - 7 days +- `_change_30d` - 30 days + +> Note: Change metrics are also available for some of the [Timebound +> Metrics](/metrics/details/timebound). In such cases, both suffixes are +> appended, and their order is important. In all cases, the order is timebound +> suffix, followed by change suffix. + +## Units + +The metric units are numbers where `0` corresponds to 0% change, `1` corresponds +to 100% change. Negative values indicate decrease. These values cannot be +aggregated using `SUM`. The default aggregation is `LAST`. +## Examples + +### price_usd_change_1d + +This metric represents the 24h price percent change. + +### circulation_180d_change_1d + +This metric represents the 24h percent change of the `circulation_180d` +[timebound metric](/metrics/details/timebound) + +## API examples + +### Get timeseries data of a change metric + +```graphql explorer +{ + getMetric(metric: "price_usd_change_1d") { + timeseriesDataJson( + slug: "bitcoin" + from: "utc_now-7d" + to: "utc_now" + interval: "1d" + ) + } +} +``` + +### Get aggregated value for multiple assets + +```graphql +{ + # The default aggregation is LAST. The last known value, but + # no older than 6 hours, is returned for every asset + allProjects(page: 1, pageSize: 20){ + slug + priceChange24h: aggregatedTimeseriesData( + metric: "price_usd_change_1d" + from: "utc_now-6h" + to: "utc_now") + tradingVolumeChange24h: aggregatedTimeseriesData( + metric: "volume_usd_change_1d" + from: "utc_now-6h" + to: "utc_now") + } +} +``` + + +[**Run in +Explorer**](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22price_usd_change_1d%22%29+%7B%0A++++timeseriesData%28%0A++++++slug%3A+%22bitcoin%22%0A++++++from%3A+%22utc_now-7d%22%0A++++++to%3A+%22utc_now%22%0A++++++interval%3A+%221d%22%0A++++%29+%7B%0A++++++datetime%0A++++++value%0A++++%7D%0A++%7D%0A%7D) + diff --git a/src/content/docs/resources/metrics/details/data-type.mdx b/src/content/docs/resources/metrics/details/data-type.mdx new file mode 100644 index 000000000..65c198c35 --- /dev/null +++ b/src/content/docs/resources/metrics/details/data-type.mdx @@ -0,0 +1,119 @@ +--- +title: Latency +author: Ivan +datePublished: 2020-04-10 +dateModified: 2020-04-10 +--- + +- [Timeseries Data](#timeseries-data) +- [Histogram Data](#histogram-data) + +## Timeseries Data + +Timeseries data is a sequence taken at successive equally spaced points in time +(every 5 minutes, every day, every year, etc.). + +The metric is represtented as a list of data points, where every point is +represented by a tuple containing a `datetime` an a `value`. + +### Example (timeseries data) + +The `daily_active_addresses` metric is represented as pairs of date `D` and a +number `N` with the following meaning: The count of the unique addresses `N` +that participated in at least one transaction, either as sender or receiver, +during the day `D`. + +The daily active addresses for bitcoin in the period April 01 - April 04 is represented +as the following list: + +```json +[ + { + "datetime": "2020-04-01T00:00:00Z", + "value": 808416 + }, + { + "datetime": "2020-04-02T00:00:00Z", + "value": 803826 + }, + { + "datetime": "2020-04-03T00:00:00Z", + "value": 754343 + }, + { + "datetime": "2020-04-04T00:00:00Z", + "value": 655906 + } +] +``` + +## Histogram Data + +A histogram is an approximate representation of the distribution of numerical or +categorical data. + +The metric is represented as a list of data points, where every point is represented +represented by a tuple containing a `range` an a `value`. + +### Example (histogram data) + +The `price_histogram` (or `spent_coins_cost`) shows at what price were acquired +the coins/tokens transacted on a given day `D`. The metric is represented as a +list of price ranges and values with the following meaning: Out of all +coins/tokens transacted on day `D`, `value` amount of them were acquired when +the price was in the range `range`. + +On April 07, the bitcoins that circulated during that day were 124k and the average +price for the day was \$7307. +Out of all of the 124k bitcoins, 13.8k of them were acquired when the price was +in the range $8692.08 - $10845.62, so they were last moved when the price was higher. +The same logic applies for all of the ranges. + +```json +[ + { + "range": [77.92, 2231.46], + "value": 141.62 + }, + { + "range": [2231.46, 4385], + "value": 109.3 + }, + { + "range": [4385, 6538.54], + "value": 8881.84 + }, + { + "range": [6538.54, 7307.7], + "value": 98208.83 + }, + { + "range": [7307.7, 8692.08], + "value": 2582.64 + }, + { + "range": [8692.08, 10845.62], + "value": 13804.97 + }, + { + "range": [10845.62, 12999.16], + "value": 130.33 + }, + { + "range": [12999.16, 15152.7], + "value": 10.58 + }, + { + "range": [15152.7, 17306.24], + "value": 331.73 + }, + { + "range": [17306.24, 19459.78], + "value": 34.45 + }, + { + "range": [19459.78, 21613.32], + "value": 0.12 + } +] +``` diff --git a/src/content/docs/resources/metrics/details/frequency.mdx b/src/content/docs/resources/metrics/details/frequency.mdx new file mode 100644 index 000000000..37dfcea1e --- /dev/null +++ b/src/content/docs/resources/metrics/details/frequency.mdx @@ -0,0 +1,55 @@ +--- +title: Frequency +author: Ivan +datePublished: 2020-04-02 +dateModified: 2024-06-26 +--- + +- [Five-minute frequency](#five-minute-frequency) +- [Hourly frequency](#hourly-frequency) +- [Eight-hour frequency](#eight-hour-frequency) +- [Daily frequency](#daily-frequency) + +## Five-minute frequency + +One value is computed for each 5-minute interval and each asset. The date and +time is taken according to the UTC timezone. + +Example: The value of the Transaction Volume metric for Bitcoin on June 10, 2019 +will have 288 distinct values for the intervals: + +- `2019-06-10 00:00:00 UTC` and `2019-06-10 00:04:59 UTC` +- `2019-06-10 00:05:00 UTC` and `2019-06-10 00:09:59 UTC` +- `2019-06-10 00:10:00 UTC` and `2019-06-10 00:14:59 UTC` +
    ...
    +- `2019-06-10 23:55:00 UTC` and `2019-06-10 23:59:59 UTC` + +If the data is needed at daily intervals, different metrics have different +default and proper aggregations that are applied to get this value. + +Examples: + +- Daily Transaction Volume is the `SUM` of all 5-minute interval transaction + volumes during the day. +- Daily Price in USD can be either `LAST` or `AVG` + +## Hourly frequency + +One value is computed for every hour of the day. + +Example: The emerging trends are being computed for every round hour in a day. + +## Eight-hour frequency + +One value is computed for every eight hours of the day. + +Example: The binance funding rate metrics are being computed once every eight hours in a day. + +## Daily frequency + +One value is computed for each day and each asset. The day is taken according to +the UTC timezone. + +Example: The value of the Daily Active Addresses metric for Bitcoin on June 10, +2019 will contain the number of distinct addresses for transfers that happened +between 2019-06-10 00:00:00 UTC and 2019-06-10 23:59:59 UTC. diff --git a/src/content/docs/resources/metrics/details/index.mdx b/src/content/docs/resources/metrics/details/index.mdx new file mode 100644 index 000000000..55853354e --- /dev/null +++ b/src/content/docs/resources/metrics/details/index.mdx @@ -0,0 +1,42 @@ +--- +title: Metrics Details +headline: 'Metrics Details: Reference Pages and Concepts' +description: 'Index of the detailed reference pages used across Santiment metrics (access, data types, frequencies, latency, timebound variants, and more).' +author: Santiment Team +datePublished: 2025-10-06 +dateModified: 2025-10-07 +--- + +import Resource from '$components/markdown/Resource.svelte' + +Use this page to discover the detailed reference docs that many metric pages link to. Each article explains a core concept or parameter used throughout the metrics documentation. + + + +- [Access](/metrics/details/access) +- [Finalized Metrics](/metrics/finalized) +- [Data Type](/metrics/details/data-type) +- [Frequency](/metrics/details/frequency) +- [Latency](/metrics/details/latency) + + + + + +- [Timebound](/metrics/details/timebound) +- [Interval Timebound](/metrics/details/interval_timebound) +- [Stack Coin Age Model](/metrics/details/stack-coin-age-model) + + + + + +- [Social Data](/metrics/details/social-data) + + + + + +- [Supply Distribution Parameters](/metrics/details/supply_distribution_parameters) + + diff --git a/src/content/docs/resources/metrics/details/interval_timebound.mdx b/src/content/docs/resources/metrics/details/interval_timebound.mdx new file mode 100644 index 000000000..d7a2c0237 --- /dev/null +++ b/src/content/docs/resources/metrics/details/interval_timebound.mdx @@ -0,0 +1,45 @@ +--- +title: Interval Timebound +author: Ante +datePublished: 2022-06-01 +dateModified: 2022-06-01 +--- + +- [Definition](#definition) + +## Definition + +Typically metrics are computed by taking into account all coins/tokens. + +For some metrics, it makes sense also to compute a derivation of them on the +subset of coins/tokens that have been moved at least once no longer than X +and no less than Y days/years ago. + +UTXO blockchains naturally define the age of a coin, but this is not true for +account-based blockchains. To define the age of a coin in account-based +blockchains we developed our own [Coin Age +Model](/metrics/details/stack-coin-age-model) + +Interval Timebound metrics names are formed from the original metric name plus a +interval timebound suffix. Available interval timebound suffixes are: + +- `0d_1d` - 0 to 1 day +- `1d_7d` - 1 to 7 days +- `7d_30d` - 7 to 30 days +- `30d_60d` - 1 to 2 months +- `60d_90d` - 2 to 3 months +- `90d_180d` - 3 to 6 months +- `180d_365d` - 6 months to 1 year +- `365d_2y` - 1 to 2 years +- `2y_3y` - 2 to 3 years +- `3y_5y` - 3 to 5 years +- `5y_10y` - 5 to 10 years +- `10y_20y` - 10 to 20 years + +Examples: + +- realized_cap_hodl_waves_3y_to_5y - The Realized Cap HODL Waves metric is + computed by considering only the coins/tokens that were active in the past + 5 years but not less than 3 years. +- spent_coins_age_band_60d_to_90d - The number of tokens transacted at least once + on a given day that are older than 60 days but not more than 90 days. diff --git a/src/content/docs/resources/metrics/details/latency.mdx b/src/content/docs/resources/metrics/details/latency.mdx new file mode 100644 index 000000000..899695e70 --- /dev/null +++ b/src/content/docs/resources/metrics/details/latency.mdx @@ -0,0 +1,70 @@ +--- +title: Latency +author: Vlad +datePublished: 2020-04-02 +dateModified: 2025-11-20 +--- + +- [On-Chain Latency](#on-chain-latency) +- [Funding Rates Latency](#funding-rates-latency) +- [Price Latency](#price-latency) +- [Development Activity Latency](#development-activity-latency) + +## On-Chain Latency + +In order to compute on-chain data, a number block confirmations are required +before fetching the data for a given block. Measured in time: + +- Bitcoin - Around 30 minutes +- Ethereum - Around 5 minutes +- Bitcoin Cash - Around 5 minutes +- Litecoin - Around 5 minutes +- Binance Chain - Around 5 minutes +- XRPL Chain - Around 5 minutes + +After the block is considered confirmed and its data is fetched, the data +processing can take anywhere from a few minutes to few hours. The upper limits +are: + +- For 5-minute interval metrics processing the data can take up to 20 minutes + most +- For daily metrics processing the data can take up to 2 hours + +## Social Data Latency + +Each one of the social data source: + +- Telegram +- Reddit +- Bitcointalk +- Twitter +- 4chan +- Youtube Videos + +is being processed separately and usually doesn't take longer than 1 minute. + +The emerging trends are computed once per hour so they become available a few +minutes after every round hour. + +The data for assets is usually computed and it takes 5-10 minutes to compute. + +Data for text terms is computed on-the-fly on the raw data and can be accessed as soon as the +text messages are stored in our database. + +## Funding Rates Latency + +The funding rates are updated every 15 minutes + +## Price Latency + +The prices are updated every 5 minutes + +## Development Activity Latency + +The development activity metrics are updated every 1 hour with max delays of 6 +hours + +## Daily Metrics Latency + +The daily metrics have one value per day. The value is finalized at least 1 hour +after the day is over, using the UTC timezone. diff --git a/src/content/docs/resources/metrics/details/social-data.mdx b/src/content/docs/resources/metrics/details/social-data.mdx new file mode 100644 index 000000000..063747cac --- /dev/null +++ b/src/content/docs/resources/metrics/details/social-data.mdx @@ -0,0 +1,136 @@ +--- +title: Social Data +author: Ivan Ivanov, Ivan Klimuk, Vladislav Volynets +datePublished: 2020-04-09 +dateModified: 2024-06-26 +--- + +## Definition + +By **Social data**, we consider a set of crypto-related discussions from the +internet that we collect and store in the form of text documents. It includes +chat conversations, forum posts and comments, tweets, and other pieces of text +(usually pretty short). In addition to the text itself, we also store some +metadata that depends on the data source: user_id, hashtags, chat_title, etc. +The **Social data** serves as a base layer for various statistics and metrics +that we build on top of it. + +## How the data is collected +We have a custom data scraper for each of the data sources we track. The +scrapers collect all the new incoming messages/posts/comments in real-time. We +also have a historical scraper to fetch historical text data from the past for +almost all sources. We store the data in a NoSQL database, which enables us to +run full-text search queries on top of it very fast. + +## Available Assets + +For each data source, we have a curated list of accounts/sub-sources from where +we scrape the data. We collect all the available text documents and don't +separate the incoming data by assets, i.e., the metrics we build on top of the +social data are theoretically available for **any asset** (although in fact, for +projects with a small market capitalization, the level of conversation around +them is usually very low). + +## Available data sources + +### Telegram + +We track a curated list with over 400 crypto-related Telegram chats. For each +of them, we have the entire history of the chat. + +In the metric name this source is available as `telegram`. Example: `social_volume_telegram`. + +**Latency**. We collect the messages in real-time (1-2s delay max.) + +**History**. Each chat has its complete historical data; the oldest discussion starts +at `2016-03-29`. + +--- + +### Twitter + +We track a curated list with over 4000 crypto-related and NFT-related Twitter accounts. For +each of them, we collect their tweets, their retweets, and all the replies to +their tweets. + +In the metric name this source is typed as `twitter`. Example: `social_volume_twitter`. + +**Latency**: We collect all the tweets in real-time. + +**History**: The historical data starts at `2018-02-13`. + +--- + +### Reddit + +We track a curated list with over 350 crypto-related subreddits. For each of +them we collect the posts themselves, as well as all the comments to these +posts. + +In the metric name this source is typed as `reddit`. Example: `social_volume_reddit`. + +**Latency**: All the posts and comments are collected in real-time (1-2s delay +max.) + +**History**: The historical data starts at `2016-01-01`. + +--- + +### Bitcointalk + +We collect all the new public posts from +[bitcointalk.org](https://bitcointalk.org). We also have the full historical +data for the whole forum. + +In the metric name this source is typed as `bitcointalk`. Example: `social_volume_bitcointalk`. + +**Latency**: The scraper goes through all the new messages once per 10 seconds. + +**History**: we have collected the entire forum history, starting from +`2009-11-22`. + +--- + +### Youtube Videos + +We collect the transcribed text from youtube videos from a manually curated list of channels. + +In the metric name this source is typed as `youtube_videos`. Example: `social_volume_youtube_videos` + +**Latency**: The scraper goes through all the new videos once per day. + +**History**: The historical data starts at `2021-06-02` + +--- + +### 4chan + +We collect posts from [4chan.org/biz](https://boards.4chan.org/biz/) + +In the metric name this source is typed as `4chan`. Example: +`social_volume_4chan` + +**Latency**: The scraper goes though all the new posts once per 5 minute. + +**History**: The historical data starts at `2023-02-05` + + +### Farcaster + +We collect posts from [Farcaster](https://www.farcaster.xyz/) + +In the metrics' names this source is typed as `farcaster`. Example: +`social_volume_farcaster` + +**Latency**: The scraper goes though all the new posts once per 5 minute. + +**History**: The historical data starts at `2024-04-01` + +--- + +### Total + +A combination of all available sources. + +In the metric name this source is typed as `total`. Example: `social_volume_total`. + diff --git a/src/docs/metrics/details/stack-coin-age-model/bitcoin-utxo-model.png b/src/content/docs/resources/metrics/details/stack-coin-age-model/bitcoin-utxo-model.png similarity index 100% rename from src/docs/metrics/details/stack-coin-age-model/bitcoin-utxo-model.png rename to src/content/docs/resources/metrics/details/stack-coin-age-model/bitcoin-utxo-model.png diff --git a/src/docs/metrics/details/stack-coin-age-model/ethereum-realized-cap.png b/src/content/docs/resources/metrics/details/stack-coin-age-model/ethereum-realized-cap.png similarity index 100% rename from src/docs/metrics/details/stack-coin-age-model/ethereum-realized-cap.png rename to src/content/docs/resources/metrics/details/stack-coin-age-model/ethereum-realized-cap.png diff --git a/src/content/docs/resources/metrics/details/stack-coin-age-model/index.mdx b/src/content/docs/resources/metrics/details/stack-coin-age-model/index.mdx new file mode 100644 index 000000000..12e80e913 --- /dev/null +++ b/src/content/docs/resources/metrics/details/stack-coin-age-model/index.mdx @@ -0,0 +1,261 @@ +--- +title: Stack Coin Age model +author: Santiment Team +description: Introducing the Stack Coin Age model. Extending metrics to Accound-based blockchains. +datePublished: 2020-04-02 +dateModified: 2022-12-14 +--- + + +- [Overview](#overview) +- [Introduction](#introduction) +- [Bitcoin UTXOs and coin age](#bitcoin-utxos-and-coin-age) +- [Account-based blockchains](#account-based-blockchains) +- [The stack coin age model](#the-stack-coin-age-model) +- [Acknowledgments](#acknowledgments) +- [References](#references) + +## Overview + +## Introduction + +Blockchain data gives us a unique opportunity to perform novel economic +research. There have been several metrics developed for Bitcoin that exploit the +availability of onchain data and show us a picture of the Bitcoin economy which +is impossible to get in the fiat world. + +These include: +- Bitcoin-days destroyed; +- Аge distribution (also known as HODL waves); +- Realized capitalization. + +Those metrics are Bitcoin-specific, because they rely on the UTXO model and its +natural way of defining the _age_ of a given coin. + +At Santiment we have managed to **extend these metrics to account-based +blockchains** like Ethereum. To achieve that, we have developed an alternative +notion of _age_ which can be applied to virtually any blockchain. As an example, +here's the **coin age distribution** for our own SAN token: + +![SAN Age Distribution](santiment-age-distribution.png) + +and here is the **realized cap for Ethereum**: + +![ETH realized cap (aka realized value)](ethereum-realized-cap.png) + +In this article we want to describe how exactly we generalize the +above-mentioned metrics. They are all based on the notion of **coin age**, which +measures how long a given coin has stayed in a given wallet. + +Bitcoin and other UTXO-based blockchains give us a natural way of defining coin +age. While this definition is natural, it is based on technical details and is +not really related to any **economic properties** of the blockchain. + +We are going to propose a different coin age model, which we call _stack-based +coin age_. Our custom model actually has financial justifications, and can +easily be applied to any blockchain. + +This article covers a technical subject. We've written several articles (and +will publish many more in the future) explaining what Santiment metrics actually +tell us about different types of behavior of market participants. + +## Bitcoin UTXOs and coin age + +The Bitcoin blockchain uses the so-called **UTXO model** for keeping track of +coins. UTXO stands for "Unspent Transaction Output". + +Each Bitcoin address holds of a bunch of _outputs_; each output contains a +certain amount of coins. A Bitcoin transaction consists of a list of old outputs +that are going to be destroyed or _spent_, and a list of new outputs that are +going to be created. The total amount of coins in the spent outputs must be +greater or equal to the total amount of coins in the new outputs. The difference +between the amounts is sent to the miner that creates the block. + +In a way, the UTXO model resembles paper money. You can think of your Bitcoin +address as a wallet and of the unspent outputs as the coins and notes in the +wallet. There is one small difference $-$ normal coins do not get destroyed in +transactions. + +But imagine the following fantastical scenario. You have a \$5 note in your +wallet and you want to buy bread for \$1. When you give your note to the cashier, +it gets incinerated and two brand new notes appear out of thin air. One \$1 note +goes to the cashier and another \$3.90 note is put back to your wallet. 10 cents +go to a magical fairy that just performed this operation. This is, in essence, +how the Bitcoin UTXO model works. + +![bitcoin-utxo-model](bitcoin-utxo-model.png) You can assign an _age_ to each +note or coin in your wallet which would simply tell you how long it stayed +there. Let's say that the \$5 note in our example was taken from an ATM machine +on January 1st and you used it to buy bread on February 1st. At the time of +purchase, then, the age of this particular \$5 note would be 31 days. When you +spend the note you "destroy" \$31\*5=155\$ dollar-days. + +In the UTXO model, similarly, we can associate an _age_ to each output using the +time when the output was created. More importantly, we get a canonical way to +associate an age to _each satoshi_, because each satoshi currently in existence +belongs to a given unspent output. + +This notion of coin age is what allows us to define the metrics that we +described above. To compute _Bitcoin-days destroyed_, we take all Bitcoins spent +at any given time and multiply each by its age to arrive at the total. The _age +distribution_ metrics show us how many Bitcoins have a given age at a given +point in time. The _realized capitalization_ gives us the total cost of +acquisition; in other words, for each existing satoshi we take its dollar price +at the time when it was created and sum those together. + +Bitcoin transactions explained You can assign an age to each note or coin in +your wallet which would simply tell you how long it stayed there. Let’s say that +the \$5 note in our example was taken from an ATM machine on January 1st and you +used it to buy bread on February 1st. At the time of purchase, then, the age of +this particular \$5 note would be 31 days. When you spend the note you “destroy” +31 ∗ 5 = 155 dollar-days. + +In the UTXO model, similarly, we can associate an age to each output using the +time when the output was created. More importantly, we get a canonical way to +associate an age to each satoshi, because each satoshi currently in existence +belongs to a given unspent output. + +This notion of coin age is what allows us to define the metrics that we +described above. To compute Bitcoin-days destroyed, we take all Bitcoins spent +at any given time and multiply each by its age to arrive at the total. The age +distribution metrics show us how many Bitcoins have a given age at a given point +in time. The realized capitalization gives us the total cost of acquisition; in +other words, for each existing satoshi we take its dollar price at the time when +it was created and sum those together. + +## Account-based blockchains + +If we want to develop similar metrics for Ethereum and other blockchains, we +first have to figure out how to define _coin age_ for them. Unlike Bitcoin, +however, Ethereum uses an _account model_. What this means is that, instead of +many outputs, to each address we associate just a single number, which +represents its balance. When we move coins between addresses, those balances get +updated. + +The account model is very similar to the way a traditional bank account works. +Imagine again that you go to buy bread for \$1, except this time you are using +your debit card. + +Let's say that your bank account has \$100, and the baker's bank account has +$200. You give your debit card to the cashier, they swipe it and give it back. +As the card gets swiped, your account balance changes to \$98.90 and the baker's +account balance changes to \$201. Again, 10 cents are paid as a transaction fee. + +Here's the question $-$ what is the age of the money currently sitting in your +bank account? Let's say that you received one transfer of \$50 on December 1st +and another transfer of \$50 on January 1st. When you spent one dollar for bread +(again on February 1st) which dollar did you spend? Did you take one of the +dollars that you received in December, or one of the dollars you got in January? +Or maybe you took 50 cents from December and 50 cents from January? In each of +these scenarios, the age of the spent dollar, as well as the age of the +remaining money in your account, would be different. + +We can see that for account-based assets, there is no canonical way to associate +coin age. + +Let's think again about the Bitcoin coin age. We showed how we associate age to +coins using unspent outputs and how we use that data to define various metrics. +It turns out that those metrics can give us valuable information about the +overall Bitcoin economy. But the coin age model that we used to derive those +metrics has no intrinsic economic meaning! When studying the fiat economy, it doesn't +really matter which note we choose to pay for bread, if we have several notes in our wallet. + +Similarly, when you make a Bitcoin transaction you $-$ or rather your Bitcoin +wallet software $-$ choose which unspent outputs to use to make that transaction. +Your choice affects the coin ages, yes, but from an economic point of view -- +your choice is entirely irrelevant. + +_We have managed to derive valuable metrics of Bitcoin's economy from a notion +of coin age, which, economically speaking, is essentially arbitrary. Any other +reasonable way to assign coin age which works for all assets would be at least +as valid. Hence we can expect that metrics derived from alternative coin age +models will expose the same information about the assets' economy._ + +## The stack coin age model + +So let's invent a better model. Let's go back to the buying bread example and +decide to abide by the following rule $-$ when I pay in cash I always **choose +the most recent coins** and notes that I have in my wallet to pay the cashier. + +I can easily follow this rule with notes and coins, but I can also pretend to +follow it when I pay with a debit card. If I have received \$50 on December 1st +and another \$50 on January 1st, I will pretend that when I buy bread on February +1st, I use the \$1 coming from the most recent transfer. + +This allows me to assign ages again. Before I bought the bread, I had \$50 whose +age was 2 months and \$50 whose age was 1 month. In my transaction I spent \$1.1 +(one dollar to the cashier and a 10p fee) whose age was one month (which +destroyed \$31*1.1=34.1 dollar-days). After that I am left with \$50 with an age +of 2 months and \$48.9 with an age of 1 month. + +By making this choice, we imagine that our account is like a _stack_ $-$ when money +comes in, it is put on the top, and when it goes out, it is taken from the top. + +![Stack coin age model](stack-coin-age-model.png) The stack model can be applied +to all blockchains $-$ both UTXO and account-based. And unlike the canonical coin +age model for UTXO-based blockchains, it actually has some economic meaning. + +In economics, money supply is split into different types: M0, M1, M2, M3 and M4, +according to their liquidity. M0 are all coins and notes in circulation, M1 +includes assets that are easily convertible to coins and notes, M2 includes +short-term deposits and M3 includes longer-term deposits. + +We don't yet have Bitcoin or Ethereum deposits but we still have coins that are +more liquid and others that are less liquid. We can have a single address that +holds large quantities of ETH, but the transactions that it is a part of are all +for relatively small amounts. This scenario is very common for exchange wallets. +It would be good to be able to split the money in such addresses in more liquid +and less liquid segments. The stack coin age model allows us to do just that. + +Let's see how our model compares to Bitcoin's canonical model. One simple way to +compare the two is to compute a metric using both models and contrast the +resulting values. Here is the comparison between our own stack-based realized +cap and the original metric: + +![utxo vs. stack-based realized cap](utxo-vs-stacks.svg) + +You can see that the values of the two metrics are almost the same. + +The reason for this uncanny similarity is actually quite simple $-$ most Bitcoin +addresses are used only for a single output. More precisely at the time of +writing there are around 473 million different addresses in the Bitcoin +blockchain, and of those about 411 million (or about _87%_) are used for only +two transactions $-$ one incoming and one outgoing. For these addresses any two +reasonable coin age models would produce the same ages. + +There are however some areas of the chart where the stack-based realized cap is +slightly lower than the utxo-based metric. We do not yet understand the +significance of the difference between the two different realized cap measures +and why the stack-based metric is always lower than the UTXO-based one. + +## Acknowledgments + +The stack coin age model was first developed at the end of 2017 by Michail +Lopatchouk from [IBA](https://ibagroupit.com/en/). Maksim, Santiment's founder +and CEO, had asked him if it is possible to develop an Ethereum and ERC20 +equivalent to the _Bitcoin-days destroyed_ metric. Milan, Tzanko and Valentin +from [Santiment](https://santiment.net) optimized the calculations and used the +model to create Ethereum equivalents for _age distribution_ and _realized +cap_. + +## References + +Akiron. “Bitcoin Days Destroyed.” +[bitcoin days destroyed](https://en.bitcoin.it/wiki/Bitcoin_Days_Destroyed). + +Bansal, Dhruv. “Bitcoin Data Science (Pt. 1): HODL Waves.” +[hodl waves](https://unchained.com/blog/tag/hodl-waves/). + +Carter, Nic. “Bitcoin Honeybadger 2018 Bitcoin Conference, Riga, Day 2.” +[bitcoin honeybadged 2018](https://www.youtube.com/watch?v=D2WXxgZ8h-0&t=78m8s). + +Carter, Nic, Antoine Le Calvez, and Coinmetrics team. 2018. “Introducing +Realized Capitalization.” 2018. +[introducing realized capitalization](https://coinmetrics.io/realized-capitalization/). + +Coinmetrics. “Data Downloads - Coin Metrics.” +[coinmetrics](https://coinmetrics.io/community-network-data/). + +/u/jratcliff63367. “An Area Chart Showing the Distribution of Bitcoins Based on +Age of Last Use Throughout History.” +[bitcoin age distribution](https://www.reddit.com/r/Bitcoin/comments/2n205b/an_area_chart_showing_the_distribution_of/). diff --git a/src/docs/metrics/details/stack-coin-age-model/santiment-age-distribution.png b/src/content/docs/resources/metrics/details/stack-coin-age-model/santiment-age-distribution.png similarity index 100% rename from src/docs/metrics/details/stack-coin-age-model/santiment-age-distribution.png rename to src/content/docs/resources/metrics/details/stack-coin-age-model/santiment-age-distribution.png diff --git a/src/docs/metrics/details/stack-coin-age-model/stack-coin-age-model.png b/src/content/docs/resources/metrics/details/stack-coin-age-model/stack-coin-age-model.png similarity index 100% rename from src/docs/metrics/details/stack-coin-age-model/stack-coin-age-model.png rename to src/content/docs/resources/metrics/details/stack-coin-age-model/stack-coin-age-model.png diff --git a/src/docs/metrics/details/stack-coin-age-model/utxo-vs-stacks.svg b/src/content/docs/resources/metrics/details/stack-coin-age-model/utxo-vs-stacks.svg similarity index 100% rename from src/docs/metrics/details/stack-coin-age-model/utxo-vs-stacks.svg rename to src/content/docs/resources/metrics/details/stack-coin-age-model/utxo-vs-stacks.svg diff --git a/src/content/docs/resources/metrics/details/supply_distribution_parameters.mdx b/src/content/docs/resources/metrics/details/supply_distribution_parameters.mdx new file mode 100644 index 000000000..78bffe0cd --- /dev/null +++ b/src/content/docs/resources/metrics/details/supply_distribution_parameters.mdx @@ -0,0 +1,62 @@ +--- +title: Supply Distribution Parameters +author: Filip +datePublished: 2024-04-01 +dateModified: 2024-04-08 +--- + +- [Available intervals](#available-intervals) +- [Available thresholds](#available-thresholds) +- [Available labels](#available-labels) +- [Available negative labels](#available-negative-labels) + +## Available intervals + +The available intervals for the supply distribution metrics offer a spectrum of balance ranges. +An interval is defined by two values: the first representing the lowest balance and the second +representing the highest balance within that range. + +* `0_to_0.001` +* `0.001_to_0.01` +* `0.01_to_0.1` +* `0.1_to_1` +* `1_to_10` +* `10_to_100` +* `100_to_1k` +* `1k_to_10k` +* `10k_to_100k` +* `100k_to_1M` +* `1M_to_10M` +* `10M_to_100M` +* `100M_to_1B` +* `1B_to_inf` +* `total` - interval from 0 to inf + +## Available thresholds + +The available thresholds for the supply distribution metrics provide a range of balance thresholds, +with each threshold representing the minimum balance required for an address to be included in the +calculation. + +* `1` +* `10` +* `100` +* `1k` +* `10k` +* `100k` +* `1M` + +## Available labels + +* `exchange` +* `infrastructure` +* `miner` +* `whale` +* `all` + +## Available negative labels + +* `nonExchange` +* `nonInfrastructure` +* `nonMiner` +* `nonWhale` diff --git a/src/content/docs/resources/metrics/details/timebound.mdx b/src/content/docs/resources/metrics/details/timebound.mdx new file mode 100644 index 000000000..e600b4498 --- /dev/null +++ b/src/content/docs/resources/metrics/details/timebound.mdx @@ -0,0 +1,80 @@ +--- +title: Timebound +author: Ivan +datePublished: 2020-04-02 +dateModified: 2022-08-01 +--- + +- [Definition](#definition) +- [Examples](#examples) + - [circulation_1d](#circulation_1d) + +## Definition + +Typically metrics are computed by taking into account all coins/tokens. + +For some metrics, it makes sense also to compute a derivation of them on the +subset of coins/tokens that have been moved at least once no longer than X +days/years ago. + +UTXO blockchains naturally define the age of a coin, but this is not true for +account-based blockchains. To define the age of a coin in account-based +blockchains we developed our own [Coin Age +Model](/metrics/details/stack-coin-age-model) + +Timebound metrics names are formed from the original metric name plus a +timebound suffix. Available timebound suffixes are: + +- `_1d` - 1 day +- `_7d` - 7 days +- `_30d` - 30 days +- `_60d` - 60 days +- `_90d` - 90 days +- `_180d` - 180 days +- `_365d` - 365 days +- `_2y` - 2 years +- `_3y` - 3 years +- `_5y` - 5 years +- `_10y` - 10 years + +> Note: There are metrics that support only part of the timebounds. For example, the +> mean_coin_age has only `_90d`, `_180d`, `_365d`, `_2y`, `_3y` and `_5y`. + +Examples: + +- mvrv_usd_30d - The MVRV metric is computed by considering only the + coins/tokens that were active in the past 30 days. +- circulation_3y - The number of tokens transacted at least once in the past 3 + years. If a coin/token is considered dead/lost (sent to graveyard address, the + owner lost private key, etc.), such circulation can approximate total supply + minus lost/dead coins. + +## Examples + +### circulation_1d + +The `circulation_1d` metric counts the number of coins/tokens that participated +in on-chain transactions in the past 24 hours. + +On one particular day, Alice sends 20 ETH to Bob, Bob sends 10 ETH to Charlie +and Charlie sends 5 ETH to Dean. + +```bash +Alice -- 20 ETH --> Bob + | + 10 ETH + | + v +Dean <-- 5 ETH -- Charlie +``` + +In this scenario the transaction volume is 20 + 10 + 5 = 35 ETH, but the ETH in +circulation is 20 ETH. + +This difference can be explained as having twenty \$1 bills. Alice sends all of +them to Bob, Bob sends 10 of the received bills to Charlie, and Charlie sends 5 +of them to Dean. There are 20 dollars in circulation total in this case. + +One of the most valuable properties of circulation is that it is immune to +mixers and gives a much better view of the actual amount of tokens that are +being transacted on-chain. diff --git a/src/docs/metrics/development-activity/bitcoin-dev-activity.png b/src/content/docs/resources/metrics/development-activity/bitcoin-dev-activity.png similarity index 100% rename from src/docs/metrics/development-activity/bitcoin-dev-activity.png rename to src/content/docs/resources/metrics/development-activity/bitcoin-dev-activity.png diff --git a/src/docs/metrics/development-activity/bitcoin-sv-dev-activity.png b/src/content/docs/resources/metrics/development-activity/bitcoin-sv-dev-activity.png similarity index 100% rename from src/docs/metrics/development-activity/bitcoin-sv-dev-activity.png rename to src/content/docs/resources/metrics/development-activity/bitcoin-sv-dev-activity.png diff --git a/src/docs/metrics/development-activity/dev-activity-backtest.png b/src/content/docs/resources/metrics/development-activity/dev-activity-backtest.png similarity index 100% rename from src/docs/metrics/development-activity/dev-activity-backtest.png rename to src/content/docs/resources/metrics/development-activity/dev-activity-backtest.png diff --git a/src/content/docs/resources/metrics/development-activity/development-activity-contributors-count/index.mdx b/src/content/docs/resources/metrics/development-activity/development-activity-contributors-count/index.mdx new file mode 100644 index 000000000..11dc8034a --- /dev/null +++ b/src/content/docs/resources/metrics/development-activity/development-activity-contributors-count/index.mdx @@ -0,0 +1,151 @@ +--- +title: Development Activity Contributors Count +author: Santiment Team +description: Development activity contributors count in public Github repositories +datePublished: 2022-04-18 +dateModified: 2025-04-30 +--- + +## Definition + +The Development Activity Contributors Count metrics show the unique number of +people (represented as Github accounts) that have contributed to a public +Github repository in an organization that is followed. Only those events that +constitute 'pure' development work are taken into consideration. + +There are 3 development activity contributors count metrics available: +- `dev_activity_contributors_count` - Computed on-the-fly using the Github + data. Because of this the metric can compute data for any asset or just any + random Github organization that has public repositories like Google, + Facebook, or any other organization. +- `dev_activity_contributors_count_7d` - Precomputed metric for each asset. + Each data point shows the number of unique contributors for the past 7 days. +- `ecosystem_dev_activity_contributors_count_7d` - Precomputed for each + ecosystem. Each data point shows the number of unique contributors for the past 7 days. + +> Note: The precomputed metrics `dev_activity_contributors_count_7d` and +> `ecosystem_dev_activty_contributors_count_7d` cannot be aggregated using the +> `SUM` aggregation, i.e. you cannot obtain the number of monthly contributors +> by taking the sum of 4 weekly values. This is because the same contributors +> may or may not make up the separate values, so the `SUM` operation can count +> some contributors multiple times. To achieve monthly contributors, use the +> `dev_activity_contributors_count` metric with `interval: "30d"` + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Number of github accounts + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +- `dev_activity_contributors_count` - [Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) +- `dev_activity_contributors_count_7d` - [Daily Intervals](/metrics/details/frequency#daily-frequency) +- `ecosystem_dev_activty_contributors_count_7d` - [Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[Development Activity Data Latency](/metrics/details/latency#development-activity-latency) + +--- + +## Available Assets + +- `dev_activity_contributors_count` $-$ [available assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric:%20%22dev_activity_contributors_count%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) +- `dev_activity_contributors_count_7d` $-$ [available assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22dev_activity_contributors_count_7d%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) +- `ecosystem_dev_activity_contributors_count_7d` $-$ [available ecosystems](https://api.santiment.net/graphiql?query=%7B%0A%20%20getEcosystems%20%7B%0A%20%20%20%20name%0A%20%20%7D%0A%7D%0A) + +--- + +## SanAPI + +Fetch hourly `dev_activity_contributors_count` for an asset: + +```graphql explorer +{ + getMetric(metric: "dev_activity_contributors_count") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-03-01T00:00:00Z" + interval: "1h" + ) + } +} +``` + +--- + +Fetch monthly `dev_activity_contributors_count` for an asset: + +```graphql explorer +{ + getMetric(metric: "dev_activity_contributors_count") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-03-01T00:00:00Z" + interval: "30d" + ) + } +} +``` + +--- + +Fetch the precomputed weekly `dev_activity_contributors_count_7d` for an asset: + +```graphql explorer +{ + getMetric(metric: "dev_activity_contributors_count_7d") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-03-01T00:00:00Z" + interval: "7d" + ) + } +} +``` + +--- + +Because `dev_activity_contributors_count_7d` is precomputed, you can also fetch +an aggregated value for many assets at the same time: + +```graphql +{ + allProjects( + selector: { + baseProjects: {slugs: ["bitcoin", "ethereum", "santiment", "maker"]} + }) { + slug + contributors: aggregatedTimeseriesData( + metric: "dev_activity_contributors_count_7d" + from: "utc_now-1d" + to: "utc_now" + aggregation: LAST + ) + } +} +``` + +**[Run in Explorer](https://api.santiment.net/graphiql?query=%7B%0A%20%20allProjects(%0A%20%20%20%20selector%3A%20%7B%0A%20%20%20%20%20%20baseProjects%3A%20%7Bslugs%3A%20%5B%22bitcoin%22%2C%20%22ethereum%22%2C%20%22santiment%22%2C%20%22maker%22%5D%7D%0A%20%20%20%20%7D)%20%7B%0A%20%20%20%20%20%20slug%0A%20%20%20%20%20%20contributors%3A%20aggregatedTimeseriesData(%0A%20%20%20%20%20%20%20%20metric%3A%20%22dev_activity_contributors_count_7d%22%0A%20%20%20%20%20%20%20%20from%3A%20%22utc_now-1d%22%0A%20%20%20%20%20%20%20%20to%3A%20%22utc_now%22%0A%20%20%20%20%20%20%20%20aggregation%3A%20LAST%0A%20%20%20%20%20%20)%0A%20%20%7D%0A%7D%0A)** + +--- diff --git a/src/content/docs/resources/metrics/development-activity/development-activity/index.mdx b/src/content/docs/resources/metrics/development-activity/development-activity/index.mdx new file mode 100644 index 000000000..fe1db71c5 --- /dev/null +++ b/src/content/docs/resources/metrics/development-activity/development-activity/index.mdx @@ -0,0 +1,180 @@ +--- +title: Development Activity Metric +author: Santiment Team +description: The development activity metrics provide data and insight about the amount of work done in Github public repositories. +datePublished: 2023-06-02 +dateModified: 2025-09-18 +--- + + +## Definition + +Development Activity metric shows the 'pure' development activity. It excludes events that are not related to development like: + +- Comments on issues; +- Issues created and closed; +- Creating of forks; +- Comments on commits; +- People following an issue; +- Downloading releases; +- Watching a repository; +- Project management events; +- Other. + +This allows for better comparison between projects that use GitHub for issue tracking and +projects that use an external tool (like Notion) for issue tracking. If such events are not +excluded then some projects have inflated activity just by discussing +what they are going to build without actually building it. Inactive projects +might have non-zero activity caused by people creating issues and asking the +team to fix something, without any actual work being done. + +There are 3 development activity metrics available: + +- `dev_activity` - Computed on-the-fly using the Github data. Because of this + the metric can compute data for any asset or just any random Github + organization that has public repositories like Google, Facebook, or any other + organization. +- `dev_activity_1d` - Precomputed daily metric for each asset that is available + on Santiment. This allows the metric to be aggregated when the value is + needed for all assets at once. +- `ecosystem_dev_activity` - Precomputed for each ecosystem. An ecosystem dev + activity is defined as the sum of the dev activities of all assets that + belong to it. For example the `ethereum` ecosystem contains all the projects + that build on the Ethereum blockchain or contribute to the blockchain in any + other way. + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +## Frequency + +- `dev_activity` - [Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) +- `dev_activity_1d` - [Daily Intervals](/metrics/details/frequency#daily-frequency) +- `ecosystem_dev_activity` - [Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[Development Activity Data Latency](/metrics/details/latency#development-activity-latency) + +--- + +## Available Assets + +- `dev_activity` $-$ [available assets]() +- `dev_activity_1d` $-$ [available assets]() +- `ecosystem_dev_activity` $-$ [available ecosystems](https://api.santiment.net/graphiql?query=%7B%0A%20%20getEcosystems%20%7B%0A%20%20%20%20name%0A%20%20%7D%0A%7D%0A) + +--- + +## SanAPI + +Fetch the dev activity for an asset: + +```graphql explorer +{ + getMetric(metric: "dev_activity") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-13T00:00:00Z" + to: "2020-01-18T00:00:00Z" + interval: "1d" + ) + } +} +``` + +--- + +Fetch the `dev_activity` for an arbitrary organization. You need to provide only the organization name +to the parameter, not the whole URL. Github links look like this: `https://github.com//`. + +```graphql explorer +{ + getMetric(metric: "dev_activity") { + timeseriesDataJson( + selector: {organization: "google"} + from: "2020-01-13T00:00:00Z" + to: "2020-01-18T00:00:00Z" + interval: "1d" + ) + } +} +``` + +--- + +Fetch the `ecosystem_dev_activity`, combining the dev activities of all assets +that contribute to that ecosystem: + +```graphql explorer +{ + getEcosystems(ecosystems: ["Ethereum"]) { + timeseriesData( + metric: "ecosystem_dev_activity" + from: "2024-03-01T00:00:00Z" + to: "2024-03-10T00:00:00Z" + interval: "1d" + ) + { + datetime + value + } + } +} +``` + +--- + +To check what assets are part of the ecosystem and what are their github links: + +```graphql +{ + getEcosystems(ecosystems: ["Ethereum"]) { + name + projects { + slug + githubLinks + } + } +} +``` + +**[Run in Explorer]()** + +--- + +## Full list of metrics + +The full list of Dev Activity metrics is: + +
    + +Open Metrics List + +- 30d_moving_avg_dev_activity_change_1d +- dev_activity +- dev_activity_1d +- dev_activity_change_1d +- ecosystem_dev_activity + +
    + diff --git a/src/content/docs/resources/metrics/development-activity/github-activity-contributors-count/index.mdx b/src/content/docs/resources/metrics/development-activity/github-activity-contributors-count/index.mdx new file mode 100644 index 000000000..ac1596706 --- /dev/null +++ b/src/content/docs/resources/metrics/development-activity/github-activity-contributors-count/index.mdx @@ -0,0 +1,153 @@ +--- +title: Github Activity Contributors Count +author: Santiment Team +description: Github Activity Contributors count in public Github repositories +datePublished: 2022-04-18 +dateModified: 2025-04-30 +--- + +## Definition + +The Github Activity Contributors Count metrics show the unique number of +people (represented as Github accounts) that have contributed to a public +Github repository in an organization that is followed. + +There are 3 development activity contributors count metrics available: +- `github_activity_contributors_count` - Computed on-the-fly using the Github + data. Because of this the metric can compute data for any asset or just any + random Github organization that has public repositories like Google, + Facebook, or any other organization. +- `github_activity_contributors_count_7d` - Precomputed weekly metric for each + asset that is available on Santiment. This allows the metric to be aggregated + when the value is needed for all assets at once. +- `ecosystem_github_activity_contributors_count_7d` - Precomputed for each + ecosystem. The metric is defined as the total count of unique contributors + that contributed to the github organization of at least one of assets that + belong to it. + +> Note: The precomputed metrics `github_activity_contributors_count_7d` and +> `ecosystem_github_activty_contributors_count_7d` cannot be aggregated using the +> `SUM` aggregation, i.e. you cannot obtain the number of monthly contributors +> by taking the sum of 4 weekly values. This is because the same contributors +> may or may not make up the separate values, so the `SUM` operation can count +> some contributors multiple times. To achieve monthly contributors, use the +> `github_activity_contributors_count` metric with `interval: "30d"` + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Number of github accounts + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +- `github_activity_contributors_count` - [Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) +- `github_activity_contributors_count_7d` - [Daily Intervals](/metrics/details/frequency#daily-frequency) +- `ecosystem_github_activity_contributors_count_7d` - [Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[Development Activity Data Latency](/metrics/details/latency#development-activity-latency) + +--- + +## Available Assets + +- `github_activity_contributors_count` $-$ [available assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric:%20%22github_activity_contributors_count%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) +- `github_activity_contributors_count_7d` $-$ [available assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22github_activity_contributors_count_7d%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) +- `ecosystem_github_activity_contributors_count_7d` $-$ [available ecosystems](https://api.santiment.net/graphiql?query=%7B%0A%20%20getEcosystems%20%7B%0A%20%20%20%20name%0A%20%20%7D%0A%7D%0A) + +--- + +## SanAPI + +Fetch hourly `github_activity_contributors_count` for an asset: + +```graphql explorer +{ + getMetric(metric: "github_activity_contributors_count") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-03-01T00:00:00Z" + interval: "1h" + ) + } +} +``` + +--- + +Fetch monthly `github_activity_contributors_count` for an asset: + +```graphql explorer +{ + getMetric(metric: "github_activity_contributors_count") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-03-01T00:00:00Z" + interval: "30d" + ) + } +} +``` + +--- + +Fetch the precomputed weekly `github_activity_contributors_count_7d` for an asset: + +```graphql explorer +{ + getMetric(metric: "github_activity_contributors_count_7d") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-03-01T00:00:00Z" + interval: "7d" + ) + } +} +``` + +--- + +Because `github_activity_contributors_count_7d` is precomputed, you can also fetch +an aggregated value for many assets at the same time: + +```graphql +{ + allProjects( + selector: { + baseProjects: {slugs: ["bitcoin", "ethereum", "santiment", "maker"]} + }) { + slug + contributors: aggregatedTimeseriesData( + metric: "github_activity_contributors_count_7d" + from: "utc_now-1d" + to: "utc_now" + aggregation: LAST + ) + } +} +``` + +**[Run in Explorer](https://api.santiment.net/graphiql?query=%7B%0A%20%20allProjects(%0A%20%20%20%20selector%3A%20%7B%0A%20%20%20%20%20%20baseProjects%3A%20%7Bslugs%3A%20%5B%22bitcoin%22%2C%20%22ethereum%22%2C%20%22santiment%22%2C%20%22maker%22%5D%7D%0A%20%20%20%20%7D)%20%7B%0A%20%20%20%20%20%20slug%0A%20%20%20%20%20%20contributors%3A%20aggregatedTimeseriesData(%0A%20%20%20%20%20%20%20%20metric%3A%20%22github_activity_contributors_count_7d%22%0A%20%20%20%20%20%20%20%20from%3A%20%22utc_now-1d%22%0A%20%20%20%20%20%20%20%20to%3A%20%22utc_now%22%0A%20%20%20%20%20%20%20%20aggregation%3A%20LAST%0A%20%20%20%20%20%20)%0A%20%20%7D%0A%7D%0A)** + +--- diff --git a/src/content/docs/resources/metrics/development-activity/github-activity/index.mdx b/src/content/docs/resources/metrics/development-activity/github-activity/index.mdx new file mode 100644 index 000000000..a3cd1a60e --- /dev/null +++ b/src/content/docs/resources/metrics/development-activity/github-activity/index.mdx @@ -0,0 +1,166 @@ +--- +title: Github Activity +author: Santiment Team +datePublished: 2023-06-01 +dateModified: 2025-04-30 +--- + + +## Definition + +Unlike [Development Activity](metrics/development-activity/development-activity) which excludes some of the events, the GitHub Activity metric uses all events to compute the metric. + +There are 3 github activity metrics available: + +- `github_activity` - Computed on-the-fly using the Github data. Because of this the metric can compute data for any + asset or any random Github organization that has public repositories like Google, Facebook, or any other organization. +- `github_activity_1d` - Precomputed daily metric for each asset that is available on Santiment. This allows the metric + to be aggregated when the value is needed for all assets at once. +- `ecosystem_github_activity` - Precomputed for each ecosystem. An ecosystem github activity is defined as + the sum of the github activities of all assets that belong to it. For example the `ethereum` ecosystem + contains all the projects that build on the Ethereum blockchain or contribute to the blockchain in any other way. + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +## Frequency + +- `github_activity` - [Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) +- `github_activity_1d` - [Daily Intervals](/metrics/details/frequency#daily-frequency) +- `ecosystem_github_activity` - [Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[Development Activity Data Latency](/metrics/details/latency#development-activity-latency) + +--- + +## Available Assets + +- `github_activity` $-$ [available assets]() +- `github_activity_1d` $-$ [available assets]() +- `ecosystem_github_activity` $-$ [available ecosystems](https://api.santiment.net/graphiql?query=%7B%0A%20%20getEcosystems%20%7B%0A%20%20%20%20name%0A%20%20%7D%0A%7D%0A) + +--- + +## SanAPI + +Fetch the dev activity for an asset: + +```graphql explorer +{ + getMetric(metric: "github_activity") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-13T00:00:00Z" + to: "2020-01-18T00:00:00Z" + interval: "1d" + ) + } +} +``` + +--- + +Fetch the `github_activity` for an arbitrary organization. You need to provide only the organization name +to the parameter, not the whole URL. Github links look like this: `https://github.com//`. + +```graphql explorer +{ + getMetric(metric: "github_activity") { + timeseriesDataJson( + selector: {organization: "google"} + from: "2020-01-13T00:00:00Z" + to: "2020-01-18T00:00:00Z" + interval: "1d" + ) + } +} +``` + +--- + +Fetch the `ecosystem_github_activity`, combining the dev activities of all assets +that contribute to that ecosystem: + +```graphql explorer +{ + getEcosystems(ecosystems: ["ethereum"]) { + timeseriesDataJson( + metric: "ecosystem_github_activity" + from: "2024-03-01T00:00:00Z" + to: "2024-03-10T00:00:00Z" + interval: "1d") + } +} +``` + +--- + +To check what assets are part of the ecosystem and what are their github links: + +```graphql +{ + getEcosystems(ecosystems: ["ethereum"]) { + name + projects { + slug + githubLinks + } + } +} +``` + +**[Run in Explorer]()** + +--- + +GitHub Activity Change for Ethereum Repository Over 7 Days + +```graphql explorer +{ + getMetric(metric: "github_activity_change_30d") { + timeseriesDataJson( + selector: {slug: "ethereum"} + from: "2024-01-01T00:00:00Z" + to: "2024-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +--- + +## Full list of metrics + +The full list of GitHub Activity metrics is: + +
    + +Open Metrics List + +- ecosystem_github_activity +- github_activity_change_30d + +
    + diff --git a/src/docs/metrics/development-activity/github-status-bar.png b/src/content/docs/resources/metrics/development-activity/github-status-bar.png similarity index 100% rename from src/docs/metrics/development-activity/github-status-bar.png rename to src/content/docs/resources/metrics/development-activity/github-status-bar.png diff --git a/src/content/docs/resources/metrics/development-activity/index.mdx b/src/content/docs/resources/metrics/development-activity/index.mdx new file mode 100644 index 000000000..2521780fd --- /dev/null +++ b/src/content/docs/resources/metrics/development-activity/index.mdx @@ -0,0 +1,136 @@ +--- +title: Development Activity Metrics +author: Santiment Team +datePublished: 2020-03-31 +dateModified: 2025-10-28 +--- + +## Metrics + +The development-related data allows the definition of different metrics. +These metrics include: +- [Development Activity](/metrics/development-activity/development-activity/) - + Ignore the non-development related events. Excluding this allows values of + projects who use Github for issue tracking and projects who do not use Github + for issue tracking to be faily compared +- [Development Activity Contributors Count](/metrics/development-activity/development-activity-contributors-count/) + - Track the number of unique development activity contributors. +- [Github Activity](/metrics/development-activity/github-activity/) - Count all + events for a project. +- [Github Activity Contributors Count](/metrics/development-activity/github-activity-contributors-count) - + Track the number of unique github activity contributors. + +--- + +## Why Development Activity matters? + +The development activity of a project that Santiment tracks is done in the +project's public GitHub repositories. The work done in private repositories +cannot be tracked. In crypto, a lot of the work is done in public repositories, +so this metric is available for many projects. + +A developer's time is an expensive resource, so high development activity +implies that: + +- The project is serious about its business proposition; +- The project will likely ship new features in the future and address existing issues; +- It's less likely that the project is just an exit scam. + +Simply put, development-related metrics can be used to gauge a project's commitment to +creating a working product, and continuously polishing and upgrading its +features. + +> **Note:** Only development work done in public github repositories can be tracked. +> Work done in private/unknown repositories or public repositories outside +> GitHub won't be counted. In Github, switching a repository from private to public does +> not emit events for past actions, so the development activity will track only the work +> done after making the repository public. + +--- + +## How is development activity tracked? + +Development-related metrics are using the events emitted by Github. The metrics +**do not** use the number of commits in a repository. + +When developers work they encapsulate their code changes in commits. When a +repository page [like this](https://github.com/santiment/sanbase2) is opened in +github one of the first things shown is the number of commits. + +![github-status-bar](./github-status-bar.png) + +One naturally would think that counting commits is an accurate approximation of +development activity. A lot of the data aggregators track the number of Github +commits, an unfortunate solution that returns skewed data. + +### Why is counting commits not optimal? + +There are a lot of projects that fork (copy everything up until this moment) +other blockchains' source code and make small changes on top of it, without the +intent of proposing these changes back to the original repository. The process +of forking inherits all commits, but this is other people's work -- this is +not work done by the team that makes the fork. + +#### Example +For example, if a person forks the [Bitcoin Github +repository](https://github.com/bitcoin/bitcoin) they will inherit all 40,000+ +commits, while performing just one action of forking. + +### How Santiment measures development activity? + +At Santiment, we implemented a more reliable approach $-$ tracking the number of +[Github events](https://docs.github.com/en/rest/using-the-rest-api/github-event-types?apiVersion=2022-11-28) +that the project generates. Pushing a commit generates an event, +but there are also many other activities that generate an event: + +- Creating an Issue +- Creating a Pull Request +- Commenting an issue/Pull Request +- Forking/starring/watching a repository +- many others. + +More importantly, when a project is forked, it does not inherit any of the +already emitted events. Our custom method dramatically improves both accuracy +and serviceability of Github data. The reason is that the process of forking a +repository generates just a single `ForkEvent` instead creating an event for +every commit that gets inherited. + +At the time of writing this the [bitcoin](https://github.com/bitcoin/bitcoin) +repository has around 40k commits and [Bitoin +SV](https://github.com/bitcoin-sv/bitcoin-sv) repository has around 18.9k +commits. Let's take a look at the events counting approach: + +Bitcoin: ![bitcoin-dev-activity](./bitcoin-dev-activity.png) + +Bitcoin SV: ![bitcoin-sv-dev-activity](./bitcoin-sv-dev-activity.png) + +We observe that Bitcoin has a high development activity all the time. +Meanwhile, Bitcoin SV has 0 dev activity most of the time. + +If you want to learn more about the difference - and the benefits of our bespoke +approach - I highly suggest [this +piece](https://medium.com/santiment/tracking-github-activity-of-crypto-projects-introducing-a-better-approach-9fb1af3f1c32) +by Valentin, our ex-CTO. + +--- + +## As a Trading Strategy + +While not common, Development-related metrics can also be used as a novel +trading strategy. Some time ago, we tested a portfolio of only the top ERC20 +projects by development activity, refreshed each month. + +We backtested the strategy from August 2017 to October 2018. [The portfolio +1](https://santiment.net/blog/github-activity-portfolio/) turned a profit, but +didn't beat hodling BTC overall. +![dev-activity-backtest](./dev-activity-backtest.png) + +However, our portfolio was also more volatile than hodling over time, +registering significantly larger tops in January and May of 2018. If you were to +sell at one of those intersections instead, our Github portfolio would in fact +be the winner. + +As a custom metric, dev activity can help you understand a project's dedication +to its product, and in turn - its end users. + +--- diff --git a/src/content/docs/resources/metrics/difficulty/index.mdx b/src/content/docs/resources/metrics/difficulty/index.mdx new file mode 100644 index 000000000..b5d1d1b30 --- /dev/null +++ b/src/content/docs/resources/metrics/difficulty/index.mdx @@ -0,0 +1,73 @@ +--- +title: Difficulty +author: Filip +description: Difficulty Metric +datePublished: 2025-11-01 +dateModified: 2025-11-26 +--- + +## Description +The difficulty metric in the PoW network measures how hard it is for miners to find a +valid hash for a new block. In bitcoin network it automatically adjusts roughly every +two weeks to maintain an average block time of 10 minutes, ensuring network stability +despite changes in total mining power. As more miners join the network, the difficulty +increases, making mining more challenging, while a drop in mining power lowers it. + +Difficulty Metric: +* `avg_difficulty` - The average Bitcoin network difficulty over a 24-hour period + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Scaling factor that indicates how much harder it is to mine a block compared to the +baseline difficulty of 1 + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for `bitcoin` + +--- + +### SanAPI + +Available under name: `avg_difficulty` + + +```graphql explorer +{ + getMetric(metric: "avg_difficulty"){ + timeseriesDataJson( + slug: "bitcoin" + from: "2025-11-01T00:00:00Z" + to: "2025-11-10T00:00:00Z" + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/dormant-circulation/index.mdx b/src/content/docs/resources/metrics/dormant-circulation/index.mdx new file mode 100644 index 000000000..c85a2454f --- /dev/null +++ b/src/content/docs/resources/metrics/dormant-circulation/index.mdx @@ -0,0 +1,123 @@ +--- +title: Dormant Circulation +author: Ivan +description: Number of unique coins/tokens transferred after being idle for some time +datePublished: 2020-06-29 +dateModified: 2025-04-30 +--- + + +## Definition + +Dormant Circulation shows number of unique coins/tokens transacted on a given day that +have not been moved for big amount of time. + +Examples: + +- `dormant_circulation_10y` - Shows how many coins/tokens that have not been moved + for more than 10 years were transacted during a day. This is useful for spotting + when really old Bitcoins move. +- `dormant_circulation_90d` - Shows how many coins/tokens that have not been moved + for more than 90 days were transacted during a day. This is the smallest interval + supported for that metric. + +There are also dormant circulation metrics `dormant_circulation_usd_*` that represent the USD value of all +unique coins or tokens that were transacted within a single day that have not been moved for some time. + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Token/Coin amount + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Timebound + +[Timebound Metrics](/metrics/details/timebound) + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +> **Note:** All dormant circulation metrics are available for the same set of assets. + +--- + +## SanAPI + +Available under the `dormant_circulation_` names. + +The smallest supported interval is 90 days. +The biggest supported interval is 10 years. + +```graphql explorer +{ + getMetric(metric: "dormant_circulation_90d") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +The full list of Dormant Circulation metrics is: + +
    + +Open Metrics List + +- dormant_circulation_10y +- dormant_circulation_180d +- dormant_circulation_2y +- dormant_circulation_365d +- dormant_circulation_365d_change_1d +- dormant_circulation_365d_change_30d +- dormant_circulation_365d_change_7d +- dormant_circulation_3y +- dormant_circulation_5y +- dormant_circulation_90d +- dormant_circulation_usd_180d +- dormant_circulation_usd_180d_change_1d +- dormant_circulation_usd_180d_change_30d +- dormant_circulation_usd_180d_change_7d + +
    diff --git a/src/content/docs/resources/metrics/dydx-derivatives/dydx-perpetual-funding-rate/index.mdx b/src/content/docs/resources/metrics/dydx-derivatives/dydx-perpetual-funding-rate/index.mdx new file mode 100644 index 000000000..ad14fa98c --- /dev/null +++ b/src/content/docs/resources/metrics/dydx-derivatives/dydx-perpetual-funding-rate/index.mdx @@ -0,0 +1,69 @@ +--- +title: dYdX Contract Funding Rate +author: Lyudmil +description: Amount of coin/tokens moved on-chain. +datePublished: 2022-02-08 +dateModified: 2025-04-30 +--- + +## Description + +Funding is calculated algorithmically based on the Index Price and sampled Mid-Market Prices for the perpetual. When the rate is positive (perpetual trades at a premium relative to index), traders who are long will make payments to traders who are short. When the rate is negative (perpetual trades at a discount relative to index), this is reversed and shorts will pay longs. Traders make or receive payments in proportion to the size of their market position. These payments are exchanged solely between traders, and are neither paid nor received by the exchange. + +More details on dYdX [web-site](https://help.dydx.exchange/en/articles/4797443-perpetual-funding-rate). + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Ratio + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Hourly Intervals](/metrics/details/frequency#hourly-frequency) + +--- + +## Latency + +[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +### SanAPI + +Available under the `dydx_perpetual_funding_rate` name. + +```graphql explorer +{ + getMetric(metric: "dydx_perpetual_funding_rate") { + timeseriesDataJson( + slug: "bitcoin" + from: "2021-04-01T00:00:00Z" + to: "2021-04-07T00:00:00Z" + interval: "1h" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/dydx-derivatives/index.mdx b/src/content/docs/resources/metrics/dydx-derivatives/index.mdx new file mode 100644 index 000000000..ab645b5f1 --- /dev/null +++ b/src/content/docs/resources/metrics/dydx-derivatives/index.mdx @@ -0,0 +1,10 @@ +--- +title: dYdX Derivatives +author: Santiment Team +datePublished: 2022-02-09 +dateModified: 2024-03-27 +--- + +[dYdX](https://dydx.exchange/) is a leading decentralized exchange that currently supports perpetual trading. dYdX runs on smart contracts on the Ethereum blockchain, and allows users to trade with no intermediaries. + +- [dYdX Perpetual Contract Funding Rate](/metrics/dydx-derivatives/dydx-perpetual-funding-rate) diff --git a/src/docs/metrics/emerging-trends/emerging-trends.png b/src/content/docs/resources/metrics/emerging-trends/emerging-trends.png similarity index 100% rename from src/docs/metrics/emerging-trends/emerging-trends.png rename to src/content/docs/resources/metrics/emerging-trends/emerging-trends.png diff --git a/src/content/docs/resources/metrics/emerging-trends/index.mdx b/src/content/docs/resources/metrics/emerging-trends/index.mdx new file mode 100644 index 000000000..06120b4f2 --- /dev/null +++ b/src/content/docs/resources/metrics/emerging-trends/index.mdx @@ -0,0 +1,172 @@ +--- +title: Emerging trends +author: Ivan Klimuk +description: List of words getting more than the average social attraction in the past 24 hours +datePublished: 2019-11-21 +dateModified: 2025-10-24 +--- + +![Emerging trends on Sanbase](emerging-trends.png) + +## Definition + +The **Emerging trends** (or **Trending words**) is a list of words that describe +the topics which _emerged_ faster than any others over the last 24 hours. By +"emerging" we mean getting more social attraction from the crowd, being +discussed much more than any other topic. + +We detect these words by computing the so called _hype score_ for each single +word that is present in the [social data](/metrics/details/social-data/) after filtering +and cleaning the data. Once this number is calculated, the words are ranked +according to the corresponding scores in a descending order. The top 10 words in +the resulting list are the top emerging trends. + +We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. + +--- + +## Access + +The metric's realtime data is **free**. +The metric's historical data is with [restricted access](/metrics/details/access#restricted-access). + +--- + +### Filtering and Cleaning + +In order to reduce the level of noise, spam and duplicates while calculating the +hype scores, we apply some preprocessing to the text data, namely: + +1. Clean all the texts from + [stopwords](https://en.wikipedia.org/wiki/Stop_words) and non-alphabetic + characters. + +2. Transform each pair `(user_id, text_documents)` to a [bag of + words](https://en.wikipedia.org/wiki/Bag-of-words_model) representation and + remove all the bag of words duplicates. + +3. For all the text documents that have more than a certain amount of words in + general (usually 5) - remove the exact duplicates (i.e. messages that look + exactly the same are considered only once). + +These steps help to make the approach robust to spam and multiple replications +of the same word or short word combinations. + +--- + +### Hype Score + +After the processing is done, for each of the words we calculate the **hype +score** (or **trend score**). For any timestamp $t$ we define the hype score as +follows: + +$$ +HypeScore(t) := \frac{(v_t ^n - \frac{1}{14} \sum_{i=t-15}^{t-1} v_i^n) * v_t^n * +\log_{10} u_t}{1 + \frac{1}{14} \sum_{i=t-15}^{t-1} v_i^n} +$$ + +where: + +- $v_i^n$ is the _normalized_ social volume of the word at the moment $i$ (i.e. + the usual [social volume](/metrics/social-volume) + divided by the total amount of messages in that particular [data + source](/metrics/details/social-data/)), + +- $u_t$ is the total amount of unique users that have used the word under + consideration at least once. + +On an intuitive level the hype score tends to be a measuring of how rapidly the +social volume of a certain word increased over the last 24 hours in comparison +to the past 2 weeks. This is done by comparing the current social volume change +to the average social volume of the past 14 days. + +Additionally we multiply this factor by $\log(\text{unique\_users})$ $-$ this way words +with a high social volume and a relatively low amount of unique users, that +mentioned it at least once, will have a smaller hype score. For example, if a +given word was used many times by exactly one user (i.e. most probably it's +heavy spam) this word will have a hype score of **0** thanks to the +$\log(\text{unique\_users})$ component. On the other hand, words with 100 and 200 users +will have more or less the same chance to get a higher hype score. + +It's also worth noticing that we use the **normalized** social volume instead of +the regular one. This makes it easier to compare the resulting hype score across +different data sources with different average daily volumes of talks. + +--- + +### Ranking the Words + +Once the texts are cleaned and each word has it's hype score, we first rank the +words in descending order (the highest hype score goes to the top) and then +combine the results across different data sources if necessary: this is done by +averaging the hype score for each word across all desired data sources and +ranking the words afterwards again. In case a given word is present in source 1 +and is not present in source 2 we assume that it's hype score in the second data +source is 0. + +--- + +## Measuring Unit + +The [hype score](#hype-score) doesn't really have a qualitative meaning, it can +be treated as a relative number: the higher it gets - the faster a given word is +"emerging". + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +Emerging Trends are available at [hourly intervals](/metrics/details/frequency#hourly-frequency) + +--- + +## Latency + +Emerging Trends have [social data Latency](/metrics/details/latency#social-data-latency) + +--- + +## Available Assets + +The algorithm takes into account all the [social data](/metrics/details/social-data/), +so the list may or may not contain asset names and tickers. We do track the +emerging projects separately for the assets only, but currently it is not +available through any of the products. + +--- + +## How to Access + +### [Sanbase](https://app.santiment.net/social-trends) + +The emerging trends are available in the _`Labs`_ section. + +### [SanAPI](https://api.santiment.net) + +The emerging trends are available as part of the API, the metric is called +`getTrendingWords`: + +```graphql +{ + getTrendingWords( + from: "2020-01-01T12:00:00Z" + to: "2020-01-01T13:00:00Z" + size: 10 + interval: "1h" + ) { + datetime + topWords { + word + score + } + } +} +``` + +**[Run in Explorer]()** diff --git a/src/docs/metrics/emerging-trends/trends.png b/src/content/docs/resources/metrics/emerging-trends/trends.png similarity index 100% rename from src/docs/metrics/emerging-trends/trends.png rename to src/content/docs/resources/metrics/emerging-trends/trends.png diff --git a/src/content/docs/resources/metrics/etf-flow/index.mdx b/src/content/docs/resources/metrics/etf-flow/index.mdx new file mode 100644 index 000000000..a849895d1 --- /dev/null +++ b/src/content/docs/resources/metrics/etf-flow/index.mdx @@ -0,0 +1,95 @@ +--- +title: ETF Flow Metrics +author: Santiment Team +description: Inflow/Outflow from ETF providers +datePublished: 2025-03-28 +dateModified: 2025-04-30 +--- + +## Description + +Those metrics provide insights into the movement of funds within Exchange-Traded Funds (ETFs), tracking both inflows and outflows. ETFs issue and redeem shares throughout trading hours and report at the end of the trading day. +The following two metrics help assess investor sentiment, liquidity trends, and overall market interest in ETFs from different providers. + +- `daily_etf_flow` - Represents the net amount of money flowing in and out of ETFs on a daily basis, measured in USD, and categorized by provider. +- `total_etf_flow` - Cumulative ETF flow since inception, reflecting the long-term investment trends and total net capital movements per provider in USD. + + + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +USD + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#daily-metrics-latency) + +--- + +## Available Assets + +- gbtc +- ibit +- fbtc +- arkb +- btco +- bitb +- hodl +- brrr +- btc +- btcw +- ezbtc + +--- + +### SanAPI + +`daily_etf_flow`: + +```graphql explorer +{ + getMetric(metric: "daily_etf_flow") { + timeseriesDataJson( + selector: { slug: "gbtc" } + from: "2025-03-15T00:00:00Z" + to: "2020-03-30T00:00:00Z" + interval: "1d" + ) + } +} +``` + +`total_etf_flow`: + +```graphql explorer +{ + getMetric(metric: "total_etf_flow") { + timeseriesDataJson( + selector: { slug: "gbtc" } + from: "2025-03-15T00:00:00Z" + to: "2020-03-30T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/eth-2/index.mdx b/src/content/docs/resources/metrics/eth-2/index.mdx new file mode 100644 index 000000000..a3e5bf4c1 --- /dev/null +++ b/src/content/docs/resources/metrics/eth-2/index.mdx @@ -0,0 +1,264 @@ +--- +title: ETH 2.0 Metrics +author: Maksim Razhev, Filip +description: ETH 2.0 Metrics +datePublished: 2021-01-26 +dateModified: 2025-04-30 +--- + + +## Description + +Metrics that show stats related to the ETH 2.0 Staking Contract + +- `eth2_stakers_count` - Amount of addresses that sent ETH to the ETH 2.0 Staking Contract +- `eth2_stakers_realized_value_usd_` - [Realized value](/metrics/realized-value) of stakers addresses. + Metric is available for different [time bounds](/metrics/details/timebound). +- `eth2_stakers_mvrv_usd_` - [MVRV](/metrics/mvrv) of stakers addresses. + Metric is available for different [time bounds](/metrics/details/timebound). +- `eth2_roi` - The annual return on staking in the ETH 2.0 contract + +ETH 2.0 histogram metrics - see [examples](#sanapi) for details how to query it: + +- `eth2_top_stakers` - Top addresses by staked amount +- `eth2_staked_amount_per_label` - Total staked amount by label +- `eth2_staked_address_count_per_label` - Amount of addresses that staked ETH by label + +Beacon chain metrics: + +- `eth_beacon_deposits` - Amount of ETH deposited into the Beacon Chain contract +- `eth_beacon_validator_withdrawals` - Withdrawals made by validators from the Ethereum Beacon Chain contract +- `eth_beacon_reward_withdrawals` - Withdrawals of rewards by validators from the Ethereum Beacon Chain contract + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +- `eth2_stakers_count` - Amount of addresses +- `eth2_roi` - Percents +- `eth2_stakers_realized_value_usd_` and `eth2_stakers_mvrv_usd_` - USD +- `eth_beacon_deposits`, `eth_beacon_validator_withdrawals` and + `eth_beacon_reward_withdrawals` - Amount in ETH + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +`ethereum` + +--- + +### SanAPI + +ETH 2.0 Staker Count: + +```graphql explorer +{ + getMetric(metric: "eth2_stakers_count") { + timeseriesDataJson( + selector: { slug: "ethereum" } + from: "2020-12-05T00:00:00Z" + to: "2020-12-06T00:00:00Z" + interval: "5m" + ) + } +} +``` + +ETH 2.0 Staking ROI: + +```graphql explorer +{ + getMetric(metric: "eth2_roi") { + timeseriesDataJson( + selector: { slug: "ethereum" } + from: "2020-12-05T00:00:00Z" + to: "2020-12-06T00:00:00Z" + interval: "5m" + ) + } +} +``` + +ETH 2.0 Total Staked Amount: + +```graphql explorer +{ + getMetric(metric: "balance_per_owner") { + timeseriesDataJson( + selector: { + slug: "ethereum" + label: "eth2stakingcontract" + owner: "eth2stakingcontract" + } + from: "2020-12-05T00:00:00Z" + to: "2020-12-06T00:00:00Z" + interval: "5m" + ) + } +} +``` + +Staked amount per label: + +```graphql explorer +{ + getMetric(metric: "eth2_staked_amount_per_label") { + histogramData( + selector: { slug: "ethereum" } + from: "utc_now-70d" + to: "utc_now" + ) { + values { + __typename + ... on StringLabelFloatValueList { + data { + label + value + } + } + } + } + } +} +``` + +Count of addresses that staked: + +```graphql explorer +{ + getMetric(metric: "eth2_staked_address_count_per_label") { + histogramData( + selector: { slug: "ethereum" } + from: "utc_now-10d" + to: "utc_now" + ) { + values { + ... on StringLabelFloatValueList { + data { + label + value + } + } + } + } + } +} +``` + +Top stakers: + +```graphql +{ + getMetric(metric: "eth2_top_stakers") { + histogramData( + selector: { slug: "ethereum" } + from: "utc_now-10d" + to: "utc_now" + limit: 2 + ) { + values { + ... on StringAddressStringLabelFloatValueList { + data { + address + label + value + } + } + } + } + } +} +``` + +[**Run in Explorer**]() + +Available under the `eth2_stakers_realized_value_usd_` +and `eth2_stakers_mvrv_usd_` names. + +```graphql explorer +{ + getMetric(metric: "eth2_stakers_realized_value_usd_365d") { + timeseriesDataJson( + slug: "ethereum" + from: "2023-01-01T00:00:00Z" + to: "2023-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +Available under the `eth_beacon_deposits`, `eth_beacon_validator_withdrawals` and +`eth_beacon_reward_withdrawals` names. + +```graphql explorer +{ + getMetric(metric: "eth_beacon_deposits") { + timeseriesDataJson( + slug: "ethereum" + from: "2023-01-01T00:00:00Z" + to: "2023-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +
    + +ETH 2.0 histogram metrics + +- eth2_top_stakers +- eth2_staked_amount_per_label +- eth2_staked_address_count_per_label + +
    + +
    + +ETH 2.0 metrics + +- eth_beacon_deposits +- eth_beacon_validator_withdrawals +- eth_beacon_reward_withdrawals +- eth2_stakers_count +- eth2_roi +- eth2_stakers_realized_value_usd_365d +- eth2_stakers_realized_value_usd_2y +- eth2_stakers_realized_value_usd_3y +- eth2_stakers_realized_value_usd_5y +- eth2_stakers_realized_value_usd_10y +- eth2_stakers_mvrv_usd_365d +- eth2_stakers_mvrv_usd_2y +- eth2_stakers_mvrv_usd_3y +- eth2_stakers_mvrv_usd_5y +- eth2_stakers_mvrv_usd_10y + +
    diff --git a/src/content/docs/resources/metrics/ethena-protocol/index.mdx b/src/content/docs/resources/metrics/ethena-protocol/index.mdx new file mode 100644 index 000000000..8b83d4643 --- /dev/null +++ b/src/content/docs/resources/metrics/ethena-protocol/index.mdx @@ -0,0 +1,95 @@ +--- +title: Ethena Protocol +author: Filip +description: Ethena Protocol Metrics +datePublished: 2024-07-01 +dateModified: 2025-04-30 +--- + +## Description + +Ethena is a synthetic dollar protocol on Ethereum that offers a crypto-native financial solution +independent of traditional banking, along with a globally accessible dollar-denominated savings +instrument called the "Internet Bond". Ethena's synthetic dollar, USDe, achieves scalability and +stability by delta-hedging Ethereum and Bitcoin collateral. The stability of USDe's peg is +maintained through derivatives positions against protocol-held collateral. The "Internet Bond" +generates yield from staked assets and the funding and basis spread from perpetual and futures +markets, providing an on-chain crypto-native monetary solution. Ethena staking involves locking +USDe to earn rewards in the form of sUSDe, which represents staked USDe within the network. +This staking process supports the network's stability and governance, providing users with returns +while contributing to the overall robustness of the Ethena ecosystem. + +Ethena staking metrics: + +- `ethena_staking_deposits` - Amount of USDe deposited into the staking contract +- `ethena_staking_withdrawals` - Amount of USDe withdrawn from the staking contract +- `ethena_staking_apy` - Interest rate paid for staking USDe + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +- `ethena_staking_deposits` and `ethena_staking_withdrawals` - Amount of USDe +- `ethena_staking_apy` - Percentage + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for `ethena-staked-usde` + +--- + +### SanAPI + +Deposit and withdraw metrics: `ethena_staking_deposits` and `ethena_staking_withdrawals` + +```graphql explorer +{ + getMetric(metric: "ethena_staking_deposits"){ + timeseriesDataJson( + slug: "ethena-staked-usde" + from: "2024-06-01T00:00:00Z" + to: "2024-06-10T00:00:00Z" + interval: "1d") + } +} +``` + +Staking APY metric: `ethena_staking_apy` + +```graphql explorer +{ + getMetric(metric: "ethena_staking_apy"){ + timeseriesDataJson( + slug: "ethena-staked-usde" + from: "2024-06-01T00:00:00Z" + to: "2024-06-10T00:00:00Z" + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/ethereum-fees/index.mdx b/src/content/docs/resources/metrics/ethereum-fees/index.mdx new file mode 100644 index 000000000..2d2078a23 --- /dev/null +++ b/src/content/docs/resources/metrics/ethereum-fees/index.mdx @@ -0,0 +1,186 @@ +--- +title: Ethereum fees +author: Filip +description: Ethereum fees +datePublished: 2024-03-01 +dateModified: 2025-04-30 +--- + +## Description +Gas fees are the fees paid for the computational efforts required to execute a transaction or +operation within a smart contract on the Ethereum network. Each operation in a transaction consumes +a specific amount of gas. +The total gas fee you pay consists of several components: +- Base fee: This is a mandatory fee established by the network for processing a transaction. +- Priority fee: An additional, voluntary payment intended to motivate node operators to prioritize +your transaction. +- Units of gas used: Gas signifies computational effort. More complex tasks, such as interacting +with a smart contract, require more gas compared to simpler actions like sending a transaction. + +The base fee is computed independently of the current block and instead relies on the preceding blocks, +enhancing predictability for users regarding transaction fees. Upon block creation, this base fee +is burned, effectively removing it from circulation. + +The gas units consumed per transaction represent the amount of gas used during the transaction, +essentially reflecting the complexity of the transaction. + + +Ethereum fees metrics: +- `fees`: Total fees paid in ETH over a daily interval +- `fees_intraday`: Total fees paid in ETH over 5-minute time intervals +- `fees_usd`: Total fees paid in USD over a daily interval +- `fees_usd_intraday`: Total fees paid in USD over 5-minute time intervals + +Aggregated fees metrics: +- `average_fees_usd`: Average fees paid in USD over a daily interval +- `average_fees_usd_5m`: Average fees paid in USD over 5-minute time intervals +- `median_fees_usd`: Median fees paid in USD over a daily interval +- `median_fees_usd_5m`: Median fees paid in USD over 5-minute time intervals + +Fees burnt metrics: +- `fees_burnt_5m`: Fees burnt (removed from circulation) in ETH within a 5-minute interval +- `fees_burnt_usd_5m`: Fees burnt (removed from circulation) in USD within a 5-minute interval + +Fees to network circulation metric: +- `fees_to_network_circulation_usd_1d`: Calculated using the formula: +$$ +\frac{\text{fees} * \text{daily\_avg\_price\_usd}}{\text{network\_circulation\_usd\_1d}} +$$ +where $\text{network\_circulation\_usd\_1d}$ represents the total value in USD of all coins moved on Ethereum + +Gas used metrics: +- `avg_gas_used` - Average amount of gas consumed per transaction over 5-minute time intervals in Gwei +- `total_gas_used` - Total amount of gas used over 5-minute time intervals + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +- Fees metrics - amount in ETH or USD +- `avg_gas_used` - amount in Gwei +- `total_gas_used` - gas units + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for `ethereum` + +--- + +### SanAPI + +Fees metrics in ETH: `fees` and `fees_intraday` + +```graphql explorer +{ + getMetric(metric: "fees") { + timeseriesDataJson( + slug: "ethereum" + from: "2024-03-01T00:00:00Z" + to: "2024-03-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +Fees metrics in USD: `fees_usd` and `fees_usd_intraday` + +```graphql explorer +{ + getMetric(metric: "fees_usd_intraday") { + timeseriesDataJson( + slug: "ethereum" + from: "2024-03-01T00:00:00Z" + to: "2024-03-07T00:00:00Z" + interval: "5m" + ) + } +} +``` + +Aggregated fees metrics: `average_fees_usd`, `average_fees_usd_5m`, +`median_fees_usd` and `median_fees_usd_5m` + +```graphql explorer +{ + getMetric(metric: "average_fees_usd_5m") { + timeseriesDataJson( + slug: "ethereum" + from: "2024-03-01T00:00:00Z" + to: "2024-03-07T00:00:00Z" + interval: "5m" + ) + } +} +``` + +Fees burnt metrics: `fees_burnt_5m` and `fees_burnt_usd_5m` + +```graphql explorer +{ + getMetric(metric: "fees_burnt_5m") { + timeseriesDataJson( + slug: "ethereum" + from: "2024-03-01T00:00:00Z" + to: "2024-03-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +Fees to network circulation metric: `fees_to_network_circulation_usd_1d` + +```graphql explorer +{ + getMetric(metric: "fees_to_network_circulation_usd_1d") { + timeseriesDataJson( + slug: "ethereum" + from: "2024-03-01T00:00:00Z" + to: "2024-03-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +Gas used metrics: `avg_gas_used` and `total_gas_used` + +```graphql explorer +{ + getMetric(metric: "avg_gas_used") { + timeseriesDataJson( + slug: "ethereum" + from: "2024-03-01T00:00:00Z" + to: "2024-03-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/docs/metrics/ethereum-spent/golem-eth-spent.png b/src/content/docs/resources/metrics/ethereum-spent/golem-eth-spent.png similarity index 100% rename from src/docs/metrics/ethereum-spent/golem-eth-spent.png rename to src/content/docs/resources/metrics/ethereum-spent/golem-eth-spent.png diff --git a/src/content/docs/resources/metrics/ethereum-spent/index.mdx b/src/content/docs/resources/metrics/ethereum-spent/index.mdx new file mode 100644 index 000000000..a92a53a75 --- /dev/null +++ b/src/content/docs/resources/metrics/ethereum-spent/index.mdx @@ -0,0 +1,93 @@ +--- +title: Ethereum Spent +author: Ivan +description: Ethereum spent of ERC20 project ICO wallets +datePublished: 2020-06-29 +dateModified: 2020-06-29 +--- + +## Definition + +Track the amount of ETH leaving the wallets where ICO funds were collected. + +> Note: Transactions are not followed to exchanges. + +#### Example + +Below is the ETH spent over time of Golem plotted against the Golem price and ETH price. +Enabling the ETH is useful to give you an approximation for the value in USD that this +ETH movement generated. Most often ICOs move ethereum out of their ICO wallets to +sell them on exchanges to fund the project. + +![golem-eth-spent](golem-eth-spent.png) + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Ethereum amount + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these +assets](https://api.santiment.net/graphiql?query=%7B%0A%20%20allErc20Projects%20%7B%0A%20%20%20%20slug%0A%20%20%7D%0A%7D%0A) + +--- + +## SanAPI + +### Timeseries data + +Available as a field of the project graphql type, fetch the amount of ETH spent for every `interval` in the time range. + +```graphql explorer +{ + projectBySlug(slug: "santiment") { + ethSpentOverTime( + from: "2019-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "30d" + ) { + datetime + ethSpent + } + } +} +``` + +### Aggregated data per project + +In order to fetch how many ETH every project spent in a the last N days, you can execute the following GraphQL query (the `days` can contain any number of days): + +```graphql explorer +{ + allProjects { + slug + ethSpent(days: 30) + } +} +``` diff --git a/src/docs/metrics/exchange-funds-flow/aeternity-funds-flow-balance.png b/src/content/docs/resources/metrics/exchange-funds-flow/aeternity-funds-flow-balance.png similarity index 100% rename from src/docs/metrics/exchange-funds-flow/aeternity-funds-flow-balance.png rename to src/content/docs/resources/metrics/exchange-funds-flow/aeternity-funds-flow-balance.png diff --git a/src/docs/metrics/exchange-funds-flow/bitcoin-funds-flow-balance.png b/src/content/docs/resources/metrics/exchange-funds-flow/bitcoin-funds-flow-balance.png similarity index 100% rename from src/docs/metrics/exchange-funds-flow/bitcoin-funds-flow-balance.png rename to src/content/docs/resources/metrics/exchange-funds-flow/bitcoin-funds-flow-balance.png diff --git a/src/docs/metrics/exchange-funds-flow/bitcoin-funds-inflow-outflow.png b/src/content/docs/resources/metrics/exchange-funds-flow/bitcoin-funds-inflow-outflow.png similarity index 100% rename from src/docs/metrics/exchange-funds-flow/bitcoin-funds-inflow-outflow.png rename to src/content/docs/resources/metrics/exchange-funds-flow/bitcoin-funds-inflow-outflow.png diff --git a/src/content/docs/resources/metrics/exchange-funds-flow/index.mdx b/src/content/docs/resources/metrics/exchange-funds-flow/index.mdx new file mode 100644 index 000000000..4447feea4 --- /dev/null +++ b/src/content/docs/resources/metrics/exchange-funds-flow/index.mdx @@ -0,0 +1,161 @@ +--- +title: Exchange Inflow/Outflow +author: Santiment Team +description: Amount of coins/token going in or out of exchanges +datePublished: 2019-12-04 +dateModified: 2025-04-30 +--- + +## Definition + +There are three separate metrics regarding exchange funds flow: + +- `exchange_inflow` - How many coins/tokens are moved from non-exchange to + exchange wallets. +- `exchange_outflow` - How many coins/tokens are moved from exchange to + non-exchange wallets. +- `exchange_balance` - The difference inflow-outflow (inflow minus outflow). The + usefulness of this metric comes from the fact that transactions from + missing/unknown exchange wallets to missing/unknown exchange wallets cancel + each other. + +Some of the metrics have a USD equivalent - the raw value is multiplied by the +price of the coin/token at the given date. The available USD metrics are +`exchange_inflow_usd` and `exchange_outflow_usd` + +![bitcoin funds in/outflow](bitcoin-funds-inflow-outflow.png) +![bitcoin funds balance](bitcoin-funds-flow-balance.png) + +For an exchange-specific data please refer to [that page](/metrics/labeled-exchange) + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Amount of coins/tokens + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Change Metrics + +[Change Metrics:](/metrics/details/change_metrics) + +* `exchange_inflow_change_1d` +* `exchange_inflow_change_7d` +* `exchange_inflow_change_30d` + +* `exchange_outflow_change_1d` +* `exchange_outflow_change_7d` +* `exchange_outflow_change_30d` + +* `exchange_balance_change_1d` +* `exchange_balance_change_7d` +* `exchange_balance_change_30d` + +* `exchange_inflow_usd_change_1d` +* `exchange_inflow_usd_change_7d` +* `exchange_inflow_usd_change_30d` + +* `exchange_outflow_usd_change_1d` +* `exchange_outflow_usd_change_7d` +* `exchange_outflow_usd_change_30d` + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Use Case + +It's not uncommon for large inflows of tokens to the exchange to precede +rapid price growth. + +Here's that exact scenario in case of +[aeternity](https://aeternity.com/), a blockchain platform that enables +scalable smart contracts: + +![aeternity funds flow balance](aeternity-funds-flow-balance.png) + +> Note: Aeternity moved from ERC20 to their own blockchain and Santiment does not have data for this new blockchain. + +When a large amount of tokens flow out of the exchange, on the other +hand, the price is likely to fall soon thereafter. + +--- + +## Available Assets + +Available for [these +assets]() + +> Note: All of the metrics are available for the same set of assets. + +--- + +## SanAPI + +Available under the `exchange_balance`, `exchange_inflow` and `exchange_outflow` names. + +```graphql explorer +{ + getMetric(metric: "exchange_balance") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T12:00:00Z" + to: "2020-01-03T12:00:00Z" + interval: "1d" + ) + } +} +``` + +--- + +```graphql explorer +{ + getMetric(metric: "exchange_inflow") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T12:00:00Z" + to: "2020-01-03T12:00:00Z" + interval: "1d" + ) + } +} +``` + +--- + +```graphql explorer +{ + getMetric(metric: "exchange_outflow") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T12:00:00Z" + to: "2020-01-03T12:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/finalized/index.mdx b/src/content/docs/resources/metrics/finalized/index.mdx new file mode 100644 index 000000000..ce50fbc91 --- /dev/null +++ b/src/content/docs/resources/metrics/finalized/index.mdx @@ -0,0 +1,75 @@ +--- +title: Finalized Metrics +headline: 'Finalized metrics via onlyFinalizedData' +description: 'Request guaranteed, finalized values for select metrics via the onlyFinalizedData flag in our GraphQL API.' +author: Santiment Team +datePublished: 2025-10-06 +dateModified: 2025-10-10 +--- + +import Notebox from '$components/markdown/Notebox.svelte' +import Resource from '$components/markdown/Resource.svelte' + +Santiment provides a way to access finalized metric data points through our API. +Data points are flagged as final for a given interval, meaning no further backfills or adjustments will occur for that timestamp. This is especially useful when you need guaranteed consistency for analysis, dashboards, or reporting. + + + +Finalized here means the value is considered final for the requested interval. It does not change afterwards due to late-arriving data or corrections. + + + + + +Set `onlyFinalizedData: true` in your GraphQL query. For example, requesting daily finalized Transaction Volume for Bitcoin Cash: + +```graphql explorer +{ + getMetric(metric: "transaction_volume"){ + timeseriesDataJson( + selector:{slug: "bitcoin-cash"} + from: "utc_now-6h" + to: "utc_now" + interval: "5m" + onlyFinalizedData: true + ) + } +} +``` + + + + + +This feature is currently in testing and implemented for Bitcoin Cash and for a limited subset of metrics: + +- `active_addresses_1h` +- `active_addresses_24h` +- `active_addresses_30d` +- `active_addresses_7d` +- `active_addresses_delta_1h` +- `active_addresses_delta_24h` +- `active_addresses_delta_30d` +- `active_addresses_delta_7d` +- `nvt_transaction_volume` +- `stack_age_consumed_5min` +- `transaction_volume` +- `transaction_volume_5min` + +The assets and metrics coverage will expand in the future. + + + + + +Requesting finalized data introduces additional latency. + + + + + +- [Frequency](/metrics/details/frequency) +- [Latency](/metrics/details/latency) +- [Data Type](/metrics/details/data-type) + + diff --git a/src/content/docs/resources/metrics/ftx-derivatives/ftx-perpetual-funding-rate/index.mdx b/src/content/docs/resources/metrics/ftx-derivatives/ftx-perpetual-funding-rate/index.mdx new file mode 100644 index 000000000..ccf4d54bd --- /dev/null +++ b/src/content/docs/resources/metrics/ftx-derivatives/ftx-perpetual-funding-rate/index.mdx @@ -0,0 +1,71 @@ +--- +title: FTX Contract Funding Rate +author: Lyudmil +description: Amount of coin/tokens moved on-chain. +datePublished: 2022-02-08 +dateModified: 2025-04-30 +--- + +## Description + +If the perpetual is trading at a premium to the underlying index, long positions pay funding to the short positions. If the perpetual is trading at a discount to the underlying index, short positions pay funding to long positions. The funding rate to be paid/received is determined by the following formula: + +``position size * TWAP of ((future mark price - index) / index) / 24`` + +More details on FTX [web-site](https://help.ftx.com/hc/en-us/articles/360027946571-Funding). + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Ratio + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Hourly Intervals](/metrics/details/frequency#hourly-frequency) + +--- + +## Latency + +[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +### SanAPI + +Available under the `ftx_perpetual_funding_rate` name. + +```graphql explorer +{ + getMetric(metric: "ftx_perpetual_funding_rate") { + timeseriesDataJson( + slug: "bitcoin" + from: "2021-04-01T00:00:00Z" + to: "2021-04-07T00:00:00Z" + interval: "1h" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/ftx-derivatives/index.mdx b/src/content/docs/resources/metrics/ftx-derivatives/index.mdx new file mode 100644 index 000000000..f474948ac --- /dev/null +++ b/src/content/docs/resources/metrics/ftx-derivatives/index.mdx @@ -0,0 +1,10 @@ +--- +title: FTX Derivatives +author: Santiment Team +datePublished: 2022-02-09 +dateModified: 2022-12-14 +--- + +FTX is a cryptocurrency exchange built by traders, for traders. FTX offers innovative products including industry-first derivatives, options, volatility products and leveraged tokens. We strive to develop a platform robust enough for professional trading firms and intuitive enough for first-time users. + +- [FTX Perpetual Contract Funding Rate](/metrics/ftx-derivatives/ftx-perpetual-funding-rate) diff --git a/src/content/docs/resources/metrics/fully-diluted-valuation/index.mdx b/src/content/docs/resources/metrics/fully-diluted-valuation/index.mdx new file mode 100644 index 000000000..cfe655a93 --- /dev/null +++ b/src/content/docs/resources/metrics/fully-diluted-valuation/index.mdx @@ -0,0 +1,64 @@ +--- +title: Fully Diluted Valuation in USD +author: Ante +description: Fully Diluted Valuation in USD +datePublished: 2024-09-03 +dateModified: 2025-04-30 +--- + +## Definition + +The fully diluted valuation in USD is derived as the price of an asset in USD multiplied by the total supply of the same asset. + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +USD + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +Available for [these assets](https://api.santiment.net/graphiql?query=%7B%0A%20%20getMetric(metric%3A%20%22fully_diluted_valuation_usd%22)%7B%0A%20%20%20%20metadata%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D) + +--- + +## SanAPI + +```graphql explorer +{ + getMetric(metric: "fully_diluted_valuation_usd") { + timeseriesDataJson( + slug: "ethereum" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/funding-rates-aggregated/index.mdx b/src/content/docs/resources/metrics/funding-rates-aggregated/index.mdx new file mode 100644 index 000000000..8fe1d2f50 --- /dev/null +++ b/src/content/docs/resources/metrics/funding-rates-aggregated/index.mdx @@ -0,0 +1,127 @@ +--- +title: Funding Rates Aggregated +author: Ante +description: Total number of outstanding or open contracts in the market. +datePublished: 2023-11-28 +dateModified: 2025-05-24 +--- + +## Definition +The funding rate is a recurring fee that long positions pay to short positions, or vice versa, at predetermined intervals (usually every 8 hours). The goal is to ensure that the price of the perpetual contract stays close to the spot price of the underlying asset. +Perpetual futures contracts are a type of derivative that tracks the price of an underlying asset and is designed to closely mimic the spot market. + +Funding rates aggregated metrics use [Open Interest](/metrics/open-interest) for aggregation. Meaning the contract with the biggest open interest will have the biggest impact on the final funding rate aggregated value. +There are three types of funding rates aggregated metrics: +- Funding rates aggregated by exchange - represents the aggregation of all funding rates by open interest on given exchange for a given asset +- Funding rates aggregated by settlement currency - represents the aggregation of all funding rates by open interest per settlement currency for a given asset +- Total funding rates aggregated by asset - represents the aggregation of all funding rates by open interest for a given asset +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Decimal percentage + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-minute Intervals](/metrics/details/frequency#five-minute-freqency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#funding-rates-latency) + +--- + +## Available Assets + +- Funding rates aggregated by exchange is available for [these + assets]() + +- Funding rates aggregated by settlement currency is available for [these + assets]() + +- Total funding rates aggregated by asset is available for [these + assets]() + +--- + +## Available Exchanges + +`Binance`, `Bitfinex`, `Bitget`, `Bitmex`, `Btcex`, `Bybit`, `Crosstower`, `Cryptodotcom`, `Deribit`, `Kraken`, `Okex` + +--- + +## SanAPI + +- Funding rates aggregated by exchange available under the `funding_rates_aggregated_by_exchange` name. +- Funding rates aggregated by settlement currency is available for `funding_rates_aggregated_by_settlement_currency` name. +- Total funding rates aggregated by asset is available for `total_funding_rates_aggregated_per_asset` name. + +```graphql explorer +{ + getMetric(metric: "funding_rates_aggregated_by_exchange") { + timeseriesDataJson( + selector: { + slug: "ethereum" + owner: "binance" + } + from: "2023-11-27T00:00:00Z" + to: "2023-11-28T00:00:00Z" + interval: "5m" + ) + } +} +``` + + +--- + +```graphql explorer +{ + getMetric(metric: "funding_rates_aggregated_by_settlement_currency") { + timeseriesDataJson( + selector: { + slug: "ethereum" + owner: "USDT" + } + from: "2023-11-27T00:00:00Z" + to: "2023-11-28T00:00:00Z" + interval: "5m" + ) + } +} +``` + + + +--- + +```graphql explorer +{ + getMetric(metric: "total_funding_rates_aggregated_per_asset") { + timeseriesDataJson( + selector: { + slug: "ethereum" + } + from: "2023-11-27T00:00:00Z" + to: "2023-11-28T00:00:00Z" + interval: "5m" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/gho-savings/index.mdx b/src/content/docs/resources/metrics/gho-savings/index.mdx new file mode 100644 index 000000000..4c6a2dd97 --- /dev/null +++ b/src/content/docs/resources/metrics/gho-savings/index.mdx @@ -0,0 +1,88 @@ +--- +title: GHO Savings +author: Filip +description: GHO Savings Metrics +datePublished: 2025-10-01 +dateModified: 2025-10-17 +--- + +## Description +GHO Savings is a feature within the Aave Protocol that allows users to deposit the GHO +stablecoin to earn a passive yield through the GHO Savings Rate (GSR). When users deposit +GHO into the savings contract, they receive sGHO tokens, which represent their deposit +and continuously accrue interest at the current GSR. This mechanism encourages long-term +GHO holding, enhances liquidity stability, and provides users with a low-risk way to earn +yield directly within the Aave ecosystem. + +Sky Savings metrics: +* `gho_savings_deposits` - Amount of GHO deposited into the savings contract +* `gho_savings_withdrawals` - Amount of GHO withdrawn from the savings contract +* `gho_savings_total_supplied` - Total supply of GHO in the savings contract + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Amount of GHO + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for `gho` + +--- + +### SanAPI + +Deposit and withdraw metrics: `gho_savings_deposits` and `gho_savings_withdrawals` + +```graphql explorer +{ + getMetric(metric: "gho_savings_deposits"){ + timeseriesDataJson( + slug: "gho" + from: "2025-10-01T00:00:00Z" + to: "2025-10-07T00:00:00Z" + interval: "1d") + } +} +``` + +Total supplied metric: `gho_savings_total_supplied` + +```graphql explorer +{ + getMetric(metric: "gho_savings_total_supplied"){ + timeseriesDataJson( + slug: "gho" + from: "2025-10-01T00:00:00Z" + to: "2025-10-07T00:00:00Z" + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/gini-index/index.mdx b/src/content/docs/resources/metrics/gini-index/index.mdx new file mode 100644 index 000000000..77d73779f --- /dev/null +++ b/src/content/docs/resources/metrics/gini-index/index.mdx @@ -0,0 +1,83 @@ +--- +title: Gini Index +author: Filip +description: Gini index +datePublished: 2024-03-01 +dateModified: 2025-04-30 +--- + +## Description +The Gini index is a statistical measure of income or wealth distribution within a population, +ranging from 0 (perfect equality) to 1 (perfect inequality). It quantifies the extent of economic +inequality, with lower values indicating more equitable distributions and higher values indicating +greater disparities. + +Mathematically, the Gini index is calculated using the Lorenz curve, which plots the cumulative share +of income or wealth held by the bottom x% of the population against the cumulative share of the +population. The Gini index is then calculated as the area between the Lorenz curve and the line of +perfect equality, divided by the total area under the line of perfect equality. + +The Gini index can also be applied to cryptocurrencies to measure the distribution of wealth or +coins within a particular cryptocurrency ecosystem. By analyzing the distribution of cryptocurrency +holdings among addresses or users, the Gini index can provide insights into the concentration of +wealth or coins within the cryptocurrency network. + + +Gini index metric: +* `gini_index` - Gini index + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Value between 0 and 1 + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +### SanAPI + +Available under name: `gini_index` + + +```graphql explorer +{ + getMetric(metric: "gini_index"){ + timeseriesDataJson( + slug: "bitcoin" + from: "2024-01-01T00:00:00Z" + to: "2024-02-01T00:00:00Z" + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/historical-balance/index.mdx b/src/content/docs/resources/metrics/historical-balance/index.mdx new file mode 100644 index 000000000..f8f831d68 --- /dev/null +++ b/src/content/docs/resources/metrics/historical-balance/index.mdx @@ -0,0 +1,71 @@ +--- +title: Historical Balance +author: Yury +description: Metric returns historical balance for a chain address / contract +datePublished: 2022-04-21 +dateModified: 2022-04-21 +--- + +## Definition + +Metric returns historical balance for a chain address / contract +[Example of usage Historical Balance on Sanbase](https://app.santiment.net/labs/balance?address=0x876eabf441b2ee5b5b0554fd502a8e0600950cfa&assets[]=shiba-inu&from=2021-10-20T19%3A00%3A00.000Z&isLog=false&priceMetrics[]=shiba-inu&to=2022-04-21T18%3A59%3A59.999Z) + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Number of tokens + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## API + +Available under the `historicalBalance` name: + +```graphql +query historicalBalance($from: DateTime!, $to: DateTime!, $address: String!, $interval: interval!, $slug: String!, $infrastructure: String) { + historicalBalance( + address: $address + interval: $interval + from: $from + to: $to + selector: {slug: $slug, infrastructure: $infrastructure} + ) { + datetime + balance + } +} +``` + +Query variables: +```json +{ + "address": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", + "from": "2021-10-17T21:00:00.000Z", + "interval": "4h", + "metric": "historicalBalance", + "slug": "weth", + "to": "2022-04-18T20:59:59.999Z" +} +``` + +[**Run in explorer**](https://api.santiment.net/graphiql?query=query%20historicalBalance(%24from%3A%20DateTime!%2C%20%24to%3A%20DateTime!%2C%20%24address%3A%20String!%2C%20%24interval%3A%20interval!%2C%20%24slug%3A%20String!%2C%20%24infrastructure%3A%20String)%20%7B%0A%20%20historicalBalance(%0A%20%20%20%20address%3A%20%24address%0A%20%20%20%20interval%3A%20%24interval%0A%20%20%20%20from%3A%20%24from%0A%20%20%20%20to%3A%20%24to%0A%20%20%20%20selector%3A%20%7Bslug%3A%20%24slug%2C%20infrastructure%3A%20%24infrastructure%7D%0A%20%20)%20%7B%0A%20%20%20%20datetime%0A%20%20%20%20balance%0A%20%20%7D%0A%7D%0A&variables=%20%7B%0A%09%09%22address%22%3A%20%220xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d%22%2C%0A%09%09%22from%22%3A%20%222021-10-17T21%3A00%3A00.000Z%22%2C%0A%09%09%22interval%22%3A%20%224h%22%2C%0A%09%09%22metric%22%3A%20%22historicalBalance%22%2C%0A%09%09%22slug%22%3A%20%22weth%22%2C%0A%09%09%22to%22%3A%20%222022-04-18T20%3A59%3A59.999Z%22%0A%09%7D) diff --git a/src/content/docs/resources/metrics/huobi-derivatives/huobi-perpetual-funding-rate/index.mdx b/src/content/docs/resources/metrics/huobi-derivatives/huobi-perpetual-funding-rate/index.mdx new file mode 100644 index 000000000..befd13a7d --- /dev/null +++ b/src/content/docs/resources/metrics/huobi-derivatives/huobi-perpetual-funding-rate/index.mdx @@ -0,0 +1,69 @@ +--- +title: Huobi Contract Funding Rate +author: Lyudmil +description: Amount of coin/tokens moved on-chain. +datePublished: 2022-02-08 +dateModified: 2025-04-30 +--- + +## Description + +Funding rate aims to ensure that the transaction price of Perpetual Swap closely follows the underlying reference price. The Funding rate for each period is calculated from the data of the previous period and has been determined at the beginning of the current period. It will not be changed during the period and will be applied in funding calculation at the end of the current period. Meanwhile, in this period, the estimated funding rate for the next period is calculated every minute, and the last calculated estimated funding rate will be used as the rate for the next period. + +More details on Huobi [web-site](https://help.dydx.exchange/en/articles/4797443-perpetual-funding-rate). + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Ratio + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[8-Hour Intervals](/metrics/details/frequency#hourly-frequency) + +--- + +## Latency + +[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +### SanAPI + +Available under the `huobi_perpetual_funding_rate` name. + +```graphql explorer +{ + getMetric(metric: "huobi_perpetual_funding_rate") { + timeseriesDataJson( + slug: "bitcoin" + from: "2021-04-01T00:00:00Z" + to: "2021-04-07T00:00:00Z" + interval: "8h" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/huobi-derivatives/index.mdx b/src/content/docs/resources/metrics/huobi-derivatives/index.mdx new file mode 100644 index 000000000..bd5e73345 --- /dev/null +++ b/src/content/docs/resources/metrics/huobi-derivatives/index.mdx @@ -0,0 +1,10 @@ +--- +title: Huobi Derivatives +author: Santiment Team +datePublished: 2022-02-09 +dateModified: 2024-03-27 +--- + +[Huobi](https://huobi.com/) is a world-leading Bitcoin (BTC) exchange. They offer clients digital currency announcements including USDT, BTC, ETH, EOS, XPR, LTC, etc. They're more authoritative in Bitcoin price and markets than other exchanges. Huobi Trading Platform offers the most trading and investment information on digital assets. + +- [Huobi Perpetual Contract Funding Rate](/metrics/huobi-derivatives/huobi-perpetual-funding-rate) diff --git a/src/content/docs/resources/metrics/index.mdx b/src/content/docs/resources/metrics/index.mdx new file mode 100644 index 000000000..d65d1d0a3 --- /dev/null +++ b/src/content/docs/resources/metrics/index.mdx @@ -0,0 +1,223 @@ +--- +title: Santiment Crypto Metrics Overview +headline: 'Crypto Metrics: Explore our Set of Onchain Social & Dev Metrics' +description: 'Crypto metrics to delve into key on-chain, social, financial and development data to better understand and navigate the ever-evolving cryptocurrency landscape' +author: Santiment Team +datePublished: 2019-10-19 +dateModified: 2025-11-27 +sidebar: + label: Metrics + order: 10 +--- + +import Resource from '$components/markdown/Resource.svelte' + + + + + +There are metrics that are deprecated, scheduled for deprecation, or the +metrics are available under a new name and the old name should be not used. + +- [Deprecated Metrics](/metrics/deprecated-metrics) +- [Renamed Metrics](/metrics/renamed-metrics) + + + + + +- [Breakdown of Santiment's Top 15 Metrics](https://www.youtube.com/watch?v=FFJB48Z8tfM) +- [Top metrics for new users](https://www.youtube.com/watch?v=c6q4RsQvA58) +- [Finding future crypto pumps](https://www.youtube.com/watch?v=2UpK0CnzzuE) +- [Social Trends metrics](https://www.youtube.com/watch?v=p60ZlNes8WEo) +- [Using Top Stakeholders metrics](https://www.youtube.com/watch?v=lLyd8GzPixY) +- [How to use MVRV](https://www.youtube.com/watch?v=vbYQLNJ40yw) + + + + + +- [Finalized Metrics](/metrics/finalized) + + + + + +Traditional fundamentals including price, volume and market cap, mean coin age + +- [Price in USD, BTC and USDT](/metrics/price) +- [Marketcap in USD](/metrics/marketcap) +- [Trading Volume in USD](/metrics/trading-volume) +- [Fully Diluted Valuation in USD](/metrics/fully-diluted-valuation) +- [Decentralized Exchange Metrics](/metrics/decentralized-exchange-metrics) +- [Ethereum Fees](/metrics/ethereum-fees) +- [Ethereum Spent](/metrics/ethereum-spent) +- [Mean Coin Age](/metrics/mean-coin-age) +- [OHLC (Open-High-Low-Close)](/metrics/price/#ohlc) +- [Price Volatility](/metrics/price-volatility) +- [RSI](/metrics/rsi) +- [Annual Inflation Rate](/metrics/annual-inflation-rate) +- [Gini Index](/metrics/gini-index) +- [Transacted Coin Acquisition Cost](/metrics/transacted-coin-acquisition-cost) +- [Daily Aggregated Financial Metrics in USD](/metrics/daily-aggregated-financial-metrics) +- [BTC and S&P 500 Price Divergence](/metrics/btc-and-s-and-p-500-price-divergence) +- [M2 Money Supply](/metrics/m2-money-supply) + + + + + +Metrics build on top of [Social Data](/metrics/details/social-data) + +They are taken from measuring social activity on crypto-related forums and +channels, plus custom sentiment measurements analyzing crowd behavior. + +- [Community Messages Count](/metrics/community-messages-count) +- [Community Social Volume](/metrics/community-social-volume) +- [Emerging Trends](/metrics/emerging-trends) +- [Sentiment Metrics](/metrics/sentiment-metrics) +- [Social Dominance](/metrics/social-dominance) +- [Social Volume](/metrics/social-volume) +- [Social Volume AI](/metrics/social-volume-ai) +- [Unique Social Volume](/metrics/unique-social-volume) +- [Trending Words Rank](/metrics/trending-words-rank) + + + + + +[Development Activity Metrics](/metrics/development-activity) are used to measure a team’s development activity. + +- [Development Activity](/metrics/development-activity/development-activity) +- [Github Activity](/metrics/development-activity/github-activity) +- [Development Activity Contributors Count](/metrics/development-activity/development-activity-contributors-count) +- [Development Activity](/metrics/development-activity/development-activity-contributors-count) + + + + + +- [MVRV](/metrics/mvrv) +- [NVT](/metrics/nvt) +- [Realized Value](/metrics/realized-value) +- [Mean Realized Price](/metrics/mean-realized-price) +- [Network Profit Loss](/metrics/network-profit-loss) +- [Realized Market Capitalization Hodl Waves](/metrics/realized-market-capitalization-hodl-waves) + + + + + +- [Daily Active Addresses](/metrics/daily-active-addresses) +- [Active Addresses 24h](/metrics/active-addresses-24h) +- [Active Deposits](/metrics/active-deposits) +- [Active Withdrawals](/metrics/active-withdrawals) +- [Network Growth](/metrics/network-growth) + + + + + +- [Age Consumed](/metrics/age-consumed) +- [Amount in Top Holders](/metrics/amount-in-top-holders) +- [Bitcoin ETF Volume](/metrics/bitcoin-etf-volume) +- [Circulation](/metrics/circulation) +- [CrvUSD Savings](/metrics/crvusd-savings) +- [Difficulty](/metrics/difficulty) +- [Dormant Circulation](/metrics/dormant-circulation) +- [ETF Flow](/metrics/etf-flow) +- [ETH 2.0](/metrics/eth-2) +- [Ethena Protocol](/metrics/ethena-protocol) +- [Exchange Funds Flow](/metrics/exchange-funds-flow) +- [GHO Savings](/metrics/gho-savings) +- [Labeled Balance](/metrics/labeled-balance) +- [Labeled Exchange](/metrics/labeled-exchange) +- [Lending and Borrowing Protocols](/metrics/lending-and-borrowing-protocols) +- [MakerDAO DAI Savings Rate](/metrics/makerdao-dai-savings-rate) +- [New Deployed Contracts](/metrics/new-deployed-contracts) +- [Pendle Markets](/metrics/pendle-markets) +- [Sky Savings](/metrics/sky-savings) +- [Spent Coins Age Band](/metrics/spent-coins-age-band) +- [Stock To Flow ratio](/metrics/stock-to-flow) +- [Supply Distribution](/metrics/supply-distribution) +- [Supply On Or Outside Exchanges](/metrics/supply-on-or-outside-exchanges) +- [Thermocap](/metrics/thermocap) +- [Top Holders](/metrics/top-holders) +- [Total Supply](/metrics/total-supply) +- [Transaction Count](/metrics/transaction-count) +- [Transaction Size](/metrics/transaction-size) +- [Transaction Volume](/metrics/transaction-volume) +- [Transaction Volume In Profit Or Loss](/metrics/transaction-volume-in-profit-or-loss) +- [Velocity](/metrics/velocity) +- [Whale Transaction Count](/metrics/whale-transaction-count) +- [Whale Transaction Volume](/metrics/whale-transaction-volume) + + + + + +- [Funding Rates Aggregated](/metrics/funding-rates-aggregated) +- [Open Interest](/metrics/open-interest) +- [BitMEX](/metrics/bitmex-derivatives) +- [Binance](/metrics/binance-derivatives) +- [Bitfinex](/metrics/bitfinex-derivatives) +- [Deribit](/metrics/deribit-derivatives) +- [FTX](/metrics/ftx-derivatives) +- [dYdX](/metrics/dydx-derivatives) +- [Huobi](/metrics/huobi-derivatives) + + + + + +- [NFT Collection Holders Balance](/metrics/nft-collection-holders-balance) +- [NFT Collection Price](/metrics/nft-collection-price) +- [NFT Market Volume](/metrics/nft-market-volume) +- [NFT Network Profit Loss](/metrics/nft-network-profit-loss) +- [NFT Trades Count](/metrics/nft-trades-count) +- [NFT Trade Volume USD](/metrics/nft-trade-volume-usd) + + + + + +We have a bunch of API methods related to blockchain addresses. +The list of supported blockchains [can be found here](/sanapi/supported-blockchains/). +Some of this methods return [timeseries](/sanapi/fetching-metrics/#timeseriesdatajson) and other return tables, eg "Top Trasfres Table". + +- [Historical Balance](/metrics/historical-balance) +- [Labelled Historical Balance](/metrics/labelled-historical-balance) +- [Latest Transactions](/metrics/latest-transactions) +- [Contract Transaction Count](/metrics/contract-transactions-count) +- [Contract Interacting Address Count](/metrics/contract-interacting-address-count) + + + + + +[XRP Ledger (XRPL)](https://xrpl.org/) is a decentralized, public blockchain led by a global developer community. + +Santiment provides key metrics about the XRPL Chain which are listed below. +The rest of metrics are also available for XRP. + +The XRP-specific metrics are: + +#### Holders metrics + +- [Number of accounts](/metrics/xrpl-metrics/number-of-accounts) + +#### Activity metrics + +- [DEX Volume in USD](/metrics/xrpl-metrics/dex-volume) +- [Number of assets issued](/metrics/xrpl-metrics/assets-issued) +- [Number of active trustlines](/metrics/xrpl-metrics/trustline-count) +- [Liquidty in XRPL AMM Pools](/metrics/xrpl-metrics/liquidity-amm-pools) + + diff --git a/src/content/docs/resources/metrics/labeled-balance/index.mdx b/src/content/docs/resources/metrics/labeled-balance/index.mdx new file mode 100644 index 000000000..ef9392260 --- /dev/null +++ b/src/content/docs/resources/metrics/labeled-balance/index.mdx @@ -0,0 +1,165 @@ +--- +title: Labeled Balance +author: Maksim Razhev +description: Labeled Balance Metrics +datePublished: 2020-07-13 +dateModified: 2025-04-30 +--- + +## Description +Metrics that show labeled addresses inflow, outflow and balances + +* `inflow_per_label_and_owner` - inflow of a given owner +* `outflow_per_label_and_owner` - outflow of a given owner +* `balance_per_label_and_owner_delta` - balance change of a given owner +* `balance_per_owner` - balance of a given owner + +Please note that metrics may undergo changes in historical values due to automated recalculations triggered monthly. We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. Additionally, adjustments to labels automatically trigger recalculation of labeled balances. + +Available [labels](/labels): +* `centralized_exchange` +* `decentralized_exchange` +* `defi` +* `eth2stakingcontract` +* `deposit` + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit +Amount of tokens + +--- + +## Data Type +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency +[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets +* `ethereum` +* For [these ERC20 assets]() + +--- + +### SanAPI +Inflow per label and owner (example DAI inflow to Compound): +```graphql explorer +{ + getMetric(metric: "inflow_per_label_and_owner") { + timeseriesDataJson( + selector: { + slug: "uniswap" + owner: "1inch" + label: "decentralized_exchange" + } + from: "2023-12-10T00:00:00Z" + to: "2023-12-11T00:00:00Z" + interval: "1h" + ) + } +} +``` + +Inflow per label (example DAI inflow to all DeFi protocols): +```graphql explorer +{ + getMetric(metric: "inflow_per_label_and_owner") { + timeseriesDataJson( + selector: { + slug: "lido-dao" + label: "defi" + } + from: "2023-12-10T00:00:00Z" + to: "2023-12-11T00:00:00Z" + interval: "1h" + ) + } +} +``` + +Outflow per label and owner (example DAI outflow to Compound): +```graphql explorer +{ + getMetric(metric: "outflow_per_label_and_owner") { + timeseriesDataJson( + selector: { + slug: "uniswap" + owner: "1inch" + label: "decentralized_exchange" + } + from: "2023-12-10T00:00:00Z" + to: "2023-12-11T00:00:00Z" + interval: "1h" + ) + } +} +``` + +Outflow per label: +```graphql explorer +{ + getMetric(metric: "outflow_per_label_and_owner") { + timeseriesDataJson( + selector: { + slug: "lido-dao" + label: "defi" + } + from: "2023-12-10T00:00:00Z" + to: "2023-12-11T00:00:00Z" + interval: "1h" + ) + } +} +``` + +Balance delta per label and owner (example DAI balance delta of Aave): +```graphql explorer +{ + getMetric(metric: "balance_per_label_and_owner_delta") { + timeseriesDataJson( + selector: { + slug: "uniswap" + owner: "1inch" + label: "decentralized_exchange" + } + from: "2023-12-10T00:00:00Z" + to: "2023-12-11T00:00:00Z" + interval: "1h" + ) + } +} +``` + +Balance per label and owner (example DAI balance of Aave): +```graphql explorer +{ + getMetric(metric: "balance_per_owner") { + timeseriesDataJson( + selector: { + slug: "multi-collateral-dai" + owner: "aave" + label: "defi" + } + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1h" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/labeled-exchange/index.mdx b/src/content/docs/resources/metrics/labeled-exchange/index.mdx new file mode 100644 index 000000000..6628c50fd --- /dev/null +++ b/src/content/docs/resources/metrics/labeled-exchange/index.mdx @@ -0,0 +1,130 @@ +--- +title: Labeled Exchange +author: Alex +description: Exchange Labeled Metrics +datePublished: 2020-12-29 +dateModified: 2025-04-30 +--- + +## Description + +Exchange-labeled metrics showcase exchange metrics from the perspective of a single exchange. For instance, instead of retrieving [active_deposits](/metrics/active-deposits) data for all exchanges, you can specifically query active deposits related to Binance only. [Full list of available exchange names](labels/centralized-exchange/#see-also) + +--- + +Supported_metrics: + +* `active_deposits_per_exchange` - The number of unique deposit addresses that have been active on a particular day for a given asset within a specific exchange. Essentially, this metric serves as an indicator of how many users have deposited a given asset into the specified exchange. + +* `deposit_transactions_per_exchange` - The total number of all incoming and outgoing transactions involving deposit addresses on a specific day within a particular exchange. +--- + +* `active_withdrawals_per_exchange` - The number of unique withdrawal addresses that have withdrawn a particular asset from a given exchange. +* `withdrawal_transactions_per_exchange` - The total number of withdrawal transactions for a given asset from a specified centralized exchange. +--- + +* `exchange_inflow_per_exchange` - The volume of coins/tokens transferred from non-exchange wallets to wallets associated with a specified exchange. +* `exchange_outflow_per_exchange` - The volume of coins/tokens transferred from wallets associated with a given exchange to non-exchange wallets. +* `exchange_balance_per_exchange` - The net balance resulting from the difference between inflow and outflow (inflow minus outflow) for a particular exchange. + +Please note that metrics may undergo changes in historical values due to automated recalculations triggered monthly. We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. Additionally, adjustments to labels automatically trigger recalculation of labeled balances. + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +* `active_deposits_per_exchange`, `active_withdrawals_per_exchange` - Amount of addresses +* `deposit_transactions_per_exchange`, `withdrawal_transactions_per_exchange` - Amount of transactions +* `exchange_balance_per_exchange`, `exchange_inflow_per_exchange`, `exchange_outflow_per_exchange` - Amount of coins/tokens + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-freqency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +Available for [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22active_deposits_per_exchange%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) + +--- + +### SanAPI + +Binance Active Deposits: + +```graphql explorer +{ + getMetric(metric: "active_deposits_per_exchange") { + timeseriesDataJson( + selector: { + slug: "ethereum" + owner: "binance" + label: "centralized_exchange" + } + from: "2024-03-01T00:00:00Z" + to: "2024-03-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + + + +Binance Withdrawals Transactions +```graphql explorer +{ + getMetric(metric: "withdrawal_transactions_per_exchange") { + timeseriesDataJson( + selector: { + slug: "ethereum" + owner: "binance" + label: "centralized_exchange" + } + from: "2020-03-01T00:00:00Z" + to: "2020-03-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + + +Binance Flow Balance +```graphql explorer +{ + getMetric(metric: "exchange_balance_per_exchange") { + timeseriesDataJson( + selector: { + slug: "ethereum" + owner: "binance" + label: "centralized_exchange" + } + from: "2020-03-01T00:00:00Z" + to: "2020-03-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/labelled-historical-balance/index.mdx b/src/content/docs/resources/metrics/labelled-historical-balance/index.mdx new file mode 100644 index 000000000..af641c7f9 --- /dev/null +++ b/src/content/docs/resources/metrics/labelled-historical-balance/index.mdx @@ -0,0 +1,85 @@ +--- +title: Labelled Historical Balance +author: Santiment team +description: Get historical balance for a given label +datePublished: 2024-04-17 +dateModified: 2025-04-30 +--- + +## Definition + +`labelled_historical_balance` shows a historical balance for a provided [label FQN](/labels/label-fqn). I.e. it shows a total combined balance for all addresses labelled with a given label FQN. For instance, all centralized exchange addresses or all miner addresses. + +`labelled_historical_balance_changes` shows a change in the historical balance. + +You can find available labels along with [label FQNs](/labels/label-fqn) at [labels academy section](labels/#domains). +Here are some label FQN examples: +* `santiment/centralized_exchange:v1` +* `santiment/fund:v1` +* `santiment/miner:v1` +* `santiment/owner->binance:v1` +* `santiment/whale_usd_balance(ethereum):v1` + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Number of tokens + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Available Assets + +Available for [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22labelled_historical_balance%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) + +--- + +## API + +Available under `labelled_historical_balance`. The query below fetches a total `ethereum` balance of all `centralized_exchange` addresses. + +```graphql explorer +{ + getMetric(metric: "labelled_historical_balance") { + timeseriesDataJson( + from: "2024-03-01T00:00:00Z" + to: "2024-03-07T00:00:00Z" + interval: "1d" + selector: {labelFqn: "santiment/centralized_exchange:v1", slug: "ethereum"} + ) + } +} +``` + +`labelled_historical_balance_changes` + +```graphql explorer +{ + getMetric(metric: "labelled_historical_balance_changes") { + timeseriesDataJson( + from: "2024-03-01T00:00:00Z" + to: "2024-03-07T00:00:00Z" + interval: "1d" + selector: {labelFqn: "santiment/centralized_exchange:v1", slug: "ethereum"} + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/latest-transactions/index.mdx b/src/content/docs/resources/metrics/latest-transactions/index.mdx new file mode 100644 index 000000000..cbdb0672f --- /dev/null +++ b/src/content/docs/resources/metrics/latest-transactions/index.mdx @@ -0,0 +1,71 @@ +--- +title: Latest Transactions +author: Yury +description: Get latest transactions for a chain address +datePublished: 2022-04-21 +dateModified: 2022-04-21 +--- + +## Definition + +Get latest transactions for a chain address +[Example of usage **latest transactions** on Sanbase](https://app.santiment.net/labs/balance?address=0x876eabf441b2ee5b5b0554fd502a8e0600950cfa&assets[]=shiba-inu&from=2021-10-20T19%3A00%3A00.000Z&isLog=false&priceMetrics[]=shiba-inu&to=2022-04-21T18%3A59%3A59.999Z) + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## API + +Available under the `recentTransactions` name: + +```graphql +query recentTransactions($address: String!, $page: Int, $pageSize: Int = 20) { + transactions: recentTransactions( + address: $address + page: $page + pageSize: $pageSize + type: ERC20 + onlySender: false + ) { + datetime + fromAddress { + address + labels { + name + origin + } + } + toAddress { + address + labels { + name + origin + } + } + trxValue + trxHash + project { + id + ticker + logoUrl + } + } +} +``` + +Query variables: +```json +{ + "address": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", + "infrastructure": "ETH", + "page": 1, + "pageSize": 20 +} +``` + +[**Run in explorer**](https://api.santiment.net/graphiql?query=query%20recentTransactions(%24address%3A%20String!%2C%20%24page%3A%20Int%2C%20%24pageSize%3A%20Int%20%3D%2020)%20%7B%0A%20%20transactions%3A%20recentTransactions(%0A%20%20%20%20address%3A%20%24address%0A%20%20%20%20page%3A%20%24page%0A%20%20%20%20pageSize%3A%20%24pageSize%0A%20%20%20%20type%3A%20ERC20%0A%20%20%20%20onlySender%3A%20false%0A%20%20)%20%7B%0A%20%20%20%20datetime%0A%20%20%20%20fromAddress%20%7B%0A%20%20%20%20%20%20address%0A%20%20%20%20%20%20labels%20%7B%0A%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20origin%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20toAddress%20%7B%0A%20%20%20%20%20%20address%0A%20%20%20%20%20%20labels%20%7B%0A%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20origin%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20trxValue%0A%20%20%20%20trxHash%0A%20%20%20%20project%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%20%20ticker%0A%20%20%20%20%20%20logoUrl%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A&variables=%7B%0A%09%09%22address%22%3A%20%220xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d%22%2C%0A%09%09%22infrastructure%22%3A%20%22ETH%22%2C%0A%09%09%22page%22%3A%201%2C%0A%09%09%22pageSize%22%3A%2020%0A%09%7D) diff --git a/src/content/docs/resources/metrics/lending-and-borrowing-protocols/aave-safety-module/index.mdx b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/aave-safety-module/index.mdx new file mode 100644 index 000000000..5397b9ca1 --- /dev/null +++ b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/aave-safety-module/index.mdx @@ -0,0 +1,120 @@ +--- +title: Aave Safety Module +author: Filip +description: Aave Safety Module Metrics +datePublished: 2025-02-26 +dateModified: 2025-04-30 +--- + +## Description +The Aave Safety Module is a risk mitigation system designed to protect the protocol +from shortfalls. Users can stake AAVE tokens (or other assets) into the module, +providing a safety net in case of unexpected liquidity issues or smart contract +vulnerabilities. In return, stakers earn rewards but also accept the risk that a +portion of their funds could be slashed if the module is activated to cover losses. +It’s essentially a decentralized insurance mechanism that helps keep Aave secure while +incentivizing community participation. + + +### Metrics related to Aave safety module: + +Aave Safety Module staking metrics: +* `aave_safety_module_amount` – Total staked amount +* `aave_safety_module_amount_usd` – Total staked amount in USD +* `aave_safety_module_emission_usd` – Daily reward emissions in USD +* `aave_safety_module_apr` – Staking APR + +Total metrics: +* `aave_safety_module_total_amount_usd` – Total amount staked in the Aave Safety Module (combining all assets in USD) +* `aave_safety_module_total_emission_usd` – Total reward emissions in the Aave Safety Module (combining all assets in USD) + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +* Amount in tokens/USD +* APR metric in percentages + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +* [Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Metrics related to the entire protocol available for `aave` + +Other metrics: +available for [these assets]() + +--- + +### SanAPI + +Total staked amount metrics: `aave_safety_module_amount<_usd>` + +```graphql explorer +{ + getMetric(metric: "aave_safety_module_amount"){ + timeseriesDataJson( + slug: "gho" + from: "2025-01-01T00:00:00Z" + to: "2025-01-07T00:00:00Z" + includeIncompleteData: true + interval: "1d") + } +} +``` + +Emissions and APR metrics: `aave_safety_module_emission_usd` +and `aave_safety_module_apr` + +```graphql explorer +{ + getMetric(metric: "aave_safety_module_apr"){ + timeseriesDataJson( + slug: "aave" + from: "2025-01-01T00:00:00Z" + to: "2025-01-07T00:00:00Z" + includeIncompleteData: true + interval: "1d") + } +} +``` + +Total metrics: `aave_safety_module_total_amount_usd` and +`aave_safety_module_total_emission_usd` + +```graphql explorer +{ + getMetric(metric: "aave_safety_module_total_amount_usd"){ + timeseriesDataJson( + slug: "aave" + from: "2025-01-01T00:00:00Z" + to: "2025-01-07T00:00:00Z" + includeIncompleteData: true + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/lending-and-borrowing-protocols/aave-v2/index.mdx b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/aave-v2/index.mdx new file mode 100644 index 000000000..301422366 --- /dev/null +++ b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/aave-v2/index.mdx @@ -0,0 +1,213 @@ +--- +title: Aave V2 Protocol +author: Filip +description: Aave V2 Protocol Metrics +datePublished: 2022-12-05 +dateModified: 2025-04-30 +--- + +## Description +Aave V2 is the second version of the [Aave](https://aave.com/) protocol. + +One of the key new features of Aave V2 is "stable-rate borrowing," which allows +users to lock in a fixed interest rate for their loans rather than being subject +to the variable interest rates that are common in DeFi lending. +This makes borrowing more predictable and stable, reducing the risk of +sudden interest rate spikes that can make loans more expensive to repay. + +### Metrics related to Aave v2 protocol: + +Action metrics: +* `aave_v2_action_deposits` - Amount of deposited tokens +* `aave_v2_action_deposits_usd` - Amount of deposited tokens in USD +* `aave_v2_action_liquidations` - Amount of liquidated tokens +* `aave_v2_action_liquidations_usd` - Amount of liquidated tokens in USD +* `aave_v2_action_new_debt` - Amount of borrowed tokens +* `aave_v2_action_new_debt_usd` - Amount of borrowed tokens in USD +* `aave_v2_action_repayments` - Amount of repaid tokens +* `aave_v2_action_repayments_usd` - Amount of repaid tokens in USD + +Total supplied/borrowed metrics: +* `aave_v2_total_supplied` - Total supplied tokens +* `aave_v2_total_supplied_usd` - Total supplied tokens in USD +* `aave_v2_total_borrowed` - Total borrowed tokens +* `aave_v2_total_borrowed_usd` - Total borrowed tokens in USD + +APY (annual percentage yield) metrics: +* `aave_v2_supply_apy` - Supply APY +* `aave_v2_stable_borrow_apy` - Stable borrow APY (stable interest rate will stay the same for the duration of the loan) +* `aave_v2_variable_borrow_apy` - Variable borrow APY (variable interest rate will fluctuate based on the market conditions) + +Protocol total action metrics: +* `aave_v2_total_deposits_usd` - Total amount of deposits on Aave V2 (combining all assets in USD) +* `aave_v2_total_liquidations_usd` - Total amount of liquidations on Aave V2 (combining all assets in USD) +* `aave_v2_total_new_debt_usd` - Total amount of borrowings on Aave V2 in USD (combining all assets in USD) +* `aave_v2_total_repayments_usd` - Total amount of repayments on Aave V2 in USD (combining all assets in USD) + +Protocol total supplied/borrowed metrics: +* `aave_v2_protocol_total_supplied_usd` - Total amount supplied on Aave V2 (combining all assets in USD) +* `aave_v2_protocol_total_borrowed_usd` - Total amount borrowed on Aave V2 (combining all assets in USD) + +Daily active addresses: +* `aave_v2_active_addresses` - Daily active addresses on Aave V2 + +Revenue metrics: +* `aave_v2_revenue` - Aave V2 Revenue per asset +* `aave_v2_revenue_usd` - Aave V2 Revenue in USD per asset +* `aave_v2_total_protocol_revenue_usd` - Aave V2 Total Protocol Revenue +* `aave_v2_total_protocol_cumulative_revenue_usd` - Daily Aave V2 Total Protocol Cumulative Revenue + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +* Amount in tokens/USD +* APY metrics in percentages + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +* [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - Actions, supply, borrow, and APY metrics +* [Daily Intervals](/metrics/details/frequency#daily-frequency) - Revenue and active addresses metrics + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Metrics related to the entire protocol available for `aave` + +Other metrics: +available for [these assets]() + +--- + +### SanAPI + +Action metrics: `aave_v2_action_deposits<_usd>`, `aave_v2_action_liquidations<_usd>`, +`aave_v2_action_new_debt<_usd>` and `aave_v2_action_repayments<_usd>` + +```graphql explorer +{ + getMetric(metric: "aave_v2_action_deposits_usd"){ + timeseriesDataJson( + slug: "weth" + from: "2022-11-01T00:00:00Z" + to: "2022-11-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Total action metrics: `aave_v2_total_deposits_usd`, `aave_v2_total_liquidations_usd`, +`aave_v2_total_new_debt_usd` and `aave_v2_total_repayments_usd` + +```graphql explorer +{ + getMetric(metric: "aave_v2_total_new_debt_usd"){ + timeseriesDataJson( + slug: "aave" + from: "2022-11-01T00:00:00Z" + to: "2022-11-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Total supplied/borrowed metrics: `aave_v2_total_supplied<_usd>` and +`aave_v2_total_borrowed<_usd>` + +```graphql explorer +{ + getMetric(metric: "aave_v2_total_supplied"){ + timeseriesDataJson( + slug: "wrapped-bitcoin" + from: "2022-11-01T00:00:00Z" + to: "2022-11-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Protocol total supplied/borrowed metrics: `aave_v2_protocol_total_supplied_usd` and +`aave_v2_protocol_total_borrowed_usd` + +```graphql explorer +{ + getMetric(metric: "aave_v2_protocol_total_supplied_usd"){ + timeseriesDataJson( + slug: "aave" + from: "2022-11-01T00:00:00Z" + to: "2022-11-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +APY metrics: `aave_v2_supply_apy`, `aave_v2_stable_borrow_apy` and `aave_v2_variable_borrow_apy` + +```graphql explorer +{ + getMetric(metric: "aave_v2_supply_apy"){ + timeseriesDataJson( + slug: "wrapped-bitcoin" + from: "2022-11-01T00:00:00Z" + to: "2022-11-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Daily active addresses: `aave_v2_active_addresses` + +```graphql explorer +{ + getMetric(metric: "aave_v2_active_addresses"){ + timeseriesDataJson( + slug: "aave" + from: "2023-01-01T00:00:00Z" + to: "2023-01-10T00:00:00Z" + includeIncompleteData: true + interval: "1d") + } +} +``` + +Revenue metrics: `aave_v2_revenue`, `aave_v2_revenue_usd`, `aave_v2_total_protocol_revenue_usd` +and `aave_v2_total_protocol_cumulative_revenue_usd` + +```graphql explorer +{ + getMetric(metric: "aave_v2_revenue"){ + timeseriesDataJson( + slug: "usd-coin" + from: "2023-01-01T00:00:00Z" + to: "2023-01-10T00:00:00Z" + includeIncompleteData: true + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/lending-and-borrowing-protocols/aave-v3/index.mdx b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/aave-v3/index.mdx new file mode 100644 index 000000000..73b74a5b7 --- /dev/null +++ b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/aave-v3/index.mdx @@ -0,0 +1,257 @@ +--- +title: Aave V3 Protocol +author: Filip +description: Aave V3 Protocol Metrics +datePublished: 2023-04-27 +dateModified: 2025-04-30 +--- + +## Description + +AAVE v3 refers to the third version of the [Aave](https://aave.com/) protocol, +which is a decentralized lending and borrowing platform built on the Ethereum +blockchain. AAVE v3 was released in December 2020, and it introduced several new +features and improvements over the previous versions of the protocol. + +Some of the notable changes introduced in AAVE v3 include: + +- Introduction of "Elastic Interest Rates": This feature enables the interest + rates to adjust automatically based on the supply and demand for each asset on + the platform, ensuring that the rates are always market-driven and competitive. +- Improved User Interface: The user interface of AAVE v3 was redesigned to make + it more intuitive and user-friendly, making it easier for users to navigate and + use the platform. +- Gas optimizations: AAVE v3 was designed with gas optimizations in mind, making + it more cost-efficient for users to interact with the platform. + +### Metrics related to Aave v3 protocol + +Action metrics: + +- `aave_v3_action_deposits` - Amount of deposited tokens +- `aave_v3_action_deposits_usd` - Amount of deposited tokens in USD +- `aave_v3_action_liquidations` - Amount of liquidated tokens +- `aave_v3_action_liquidations_usd` - Amount of liquidated tokens in USD +- `aave_v3_action_new_debt` - Amount of borrowed tokens +- `aave_v3_action_new_debt_usd` - Amount of borrowed tokens in USD +- `aave_v3_action_repayments` - Amount of repaid tokens +- `aave_v3_action_repayments_usd` - Amount of repaid tokens in USD + +Total supplied/borrowed metrics: + +- `aave_v3_total_supplied` - Total supplied tokens +- `aave_v3_total_supplied_usd` - Total supplied tokens in USD +- `aave_v3_total_borrowed` - Total borrowed tokens +- `aave_v3_total_borrowed_usd` - Total borrowed tokens in USD + +APY (annual percentage yield) metrics: + +- `aave_v3_supply_apy` - Supply APY +- `aave_v3_variable_borrow_apy` - Variable borrow APY (variable interest rate will fluctuate based on the market conditions) + +Protocol total action metrics: + +- `aave_v3_total_deposits_usd` - Total amount of deposits on Aave V3 (combining all assets in USD) +- `aave_v3_total_liquidations_usd` - Total amount of liquidations on Aave V3 (combining all assets in USD) +- `aave_v3_total_new_debt_usd` - Total amount of borrowings on Aave V3 (combining all assets in USD) +- `aave_v3_total_repayments_usd` - Total amount of repayments on Aave V3 (combining all assets in USD) + +Protocol total supplied/borrowed metrics: + +- `aave_v3_protocol_total_supplied_usd` - Total amount supplied on Aave V3 (combining all assets in USD) +- `aave_v3_protocol_total_borrowed_usd` - Total amount borrowed on Aave V3 (combining all assets in USD) + +Daily active addresses: + +- `aave_v3_active_addresses` - Daily active addresses on Aave V3 + +Revenue metrics: + +- `aave_v3_revenue` - Aave V3 Revenue per asset +- `aave_v3_revenue_usd` - Aave V3 Revenue in USD per asset +- `aave_v3_total_protocol_revenue_usd` - Aave V3 Total Protocol Revenue +- `aave_v3_total_protocol_cumulative_revenue_usd` - Daily Aave V3 Total Protocol Cumulative Revenue + +Flashloan metrics: + +- `aave_v3_flashloan` - Flashloan volume by asset +- `aave_v3_flashloan_usd` - Flashloan volume by asset in USD +- `aave_v3_total_flashloan_usd` - Total flashloan volume across Aave V3 in USD + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +- Amount in tokens/USD +- APY metrics in percentages + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +- [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - Actions, supply, borrow, and APY metrics +- [Daily Intervals](/metrics/details/frequency#daily-frequency) - Revenue and active addresses metrics + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Metrics related to the entire protocol available for `aave` + +Other metrics: +available for [these assets]() + +--- + +### SanAPI + +Action metrics: `aave_v3_action_deposits<_usd>`, `aave_v3_action_liquidations<_usd>`, +`aave_v3_action_new_debt<_usd>` and `aave_v3_action_repayments<_usd>` + +```graphql explorer +{ + getMetric(metric: "aave_v3_action_deposits_usd") { + timeseriesDataJson( + slug: "weth" + from: "2023-04-01T00:00:00Z" + to: "2023-04-07T00:00:00Z" + includeIncompleteData: true + interval: "5m" + ) + } +} +``` + +Total action metrics: `aave_v3_total_deposits_usd`, `aave_v3_total_liquidations_usd`, +`aave_v3_total_new_debt_usd` and `aave_v3_total_repayments_usd` + +```graphql explorer +{ + getMetric(metric: "aave_v3_total_new_debt_usd") { + timeseriesDataJson( + slug: "aave" + from: "2023-04-01T00:00:00Z" + to: "2023-04-07T00:00:00Z" + includeIncompleteData: true + interval: "5m" + ) + } +} +``` + +Total supplied/borrowed metrics: `aave_v3_total_supplied<_usd>` and +`aave_v3_total_borrowed<_usd>` + +```graphql explorer +{ + getMetric(metric: "aave_v3_total_supplied") { + timeseriesDataJson( + slug: "wrapped-bitcoin" + from: "2023-04-01T00:00:00Z" + to: "2023-04-07T00:00:00Z" + includeIncompleteData: true + interval: "5m" + ) + } +} +``` + +Protocol total supplied/borrowed metrics: `aave_v3_protocol_total_supplied_usd` and +`aave_v3_protocol_total_borrowed_usd` + +```graphql explorer +{ + getMetric(metric: "aave_v3_protocol_total_supplied_usd") { + timeseriesDataJson( + slug: "aave" + from: "2023-04-01T00:00:00Z" + to: "2023-04-07T00:00:00Z" + includeIncompleteData: true + interval: "5m" + ) + } +} +``` + +APY metrics: `aave_v3_supply_apy` and `aave_v3_variable_borrow_apy` + +```graphql explorer +{ + getMetric(metric: "aave_v3_supply_apy") { + timeseriesDataJson( + slug: "wrapped-bitcoin" + from: "2023-04-01T00:00:00Z" + to: "2023-04-07T00:00:00Z" + includeIncompleteData: true + interval: "5m" + ) + } +} +``` + +Daily active addresses: `aave_v3_active_addresses` + +```graphql explorer +{ + getMetric(metric: "aave_v3_active_addresses") { + timeseriesDataJson( + slug: "aave" + from: "2023-03-01T00:00:00Z" + to: "2023-03-10T00:00:00Z" + includeIncompleteData: true + interval: "1d" + ) + } +} +``` + +Revenue metrics: `aave_v3_revenue`, `aave_v3_revenue_usd`, `aave_v3_total_protocol_revenue_usd` +and `aave_v3_total_protocol_cumulative_revenue_usd` + +```graphql explorer +{ + getMetric(metric: "aave_v3_revenue") { + timeseriesDataJson( + slug: "usd-coin" + from: "2023-01-01T00:00:00Z" + to: "2023-01-10T00:00:00Z" + includeIncompleteData: true + interval: "1d" + ) + } +} +``` + +Flashloan metrics: `aave_v3_flashloan`, `aave_v3_flashloan_usd` and `aave_v3_total_flashloan_usd` + +```graphql explorer +{ + getMetric(metric: "aave_v3_flashloan") { + timeseriesDataJson( + slug: "usd-coin" + from: "2026-01-01T00:00:00Z" + to: "2026-01-10T00:00:00Z" + includeIncompleteData: true + interval: "5m" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/lending-and-borrowing-protocols/compound-v3/index.mdx b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/compound-v3/index.mdx new file mode 100644 index 000000000..9d407d471 --- /dev/null +++ b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/compound-v3/index.mdx @@ -0,0 +1,198 @@ +--- +title: Compound V3 Protocol +author: Filip +description: Compound V3 Protocol Metrics +datePublished: 2023-09-01 +dateModified: 2025-04-30 +--- + +## Description +Compound V3 is the third version of the [Compound](https://compound.finance/) protocol. +New version represents a significant shift in the DeFi landscape by introducing +a unified borrowing market model. In this model, the base asset can be borrowed +against other assets. + +Currently, there are three markets: the ETH market, the USDC market, and the USDT market. +In each market, users can provide different assets as collateral and borrow the market's +asset (WETH, USDC, or USDT). + +This transformation carries several advantages. First, it enhances security +for users across all assets within the Compound ecosystem. Second, it allows +for increased collateral ratios, providing more flexibility for borrowers. +This also decreases the liability for each market since all debt is settled in +the form of assets. + +### Metrics related to Compound protocol: + +Action metrics: +* `compound_v3_action_deposits` - Amount of deposited tokens +* `compound_v3_action_deposits_usd` - Amount of deposited tokens in USD +* `compound_v3_action_liquidations` - Amount of liquidated tokens +* `compound_v3_action_liquidations_usd` - Amount of liquidated tokens in USD +* `compound_v3_action_new_debt` - Amount of borrowed tokens +* `compound_v3_action_new_debt_usd` - Amount of borrowed tokens in USD +* `compound_v3_action_repayments` - Amount of repaid tokens +* `compound_v3_action_repayments_usd` - Amount of repaid tokens in USD + +Total supplied/borrowed metrics: +* `compound_v3_collateral_total_supplied` - Total supplied tokens for the collateral asset +* `compound_v3_collateral_total_supplied_usd` - Total supplied tokens in USD for the collateral asset +* `compound_v3_total_supplied` - Total supplied tokens for the market asset +* `compound_v3_total_supplied_usd` - Total supplied tokens in USD for the market asset +* `compound_v3_total_borrowed` - Total borrowed tokens +* `compound_v3_total_borrowed_usd` - Total borrowed tokens in USD + +APY (annual percentage yield) metrics: +* `compound_v3_supply_apy` - Supply APY +* `compound_v3_borrow_apy` - Borrow APY + +Protocol total action metrics: +* `compound_v3_total_deposits_usd` - Total amount of deposits on Compound V3 (combining all assets in USD) +* `compound_v3_total_liquidations_usd` - Total amount of liquidations on Compound V3 (combining all assets in USD) +* `compound_v3_total_new_debt_usd` - Total amount of borrowings on Compound V3 (combining all assets in USD) +* `compound_v3_total_repayments_usd` - Total amount of repayments on Compound V3 (combining all assets in USD) + +Protocol total supplied/borrowed metrics: +* `compound_v3_protocol_total_supplied_usd` - Total amount supplied on Compound V3 (combining all assets in USD) +* `compound_v3_protocol_total_borrowed_usd` - Total amount borrowed on Compound V3 (combining all assets in USD) + +Daily active addresses: +* `compound_v3_active_addresses` - Daily active addresses on Compound V3 + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +* Amount in tokens/USD +* APY metrics in percentages + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Metrics related to the entire protocol available for `compound` + +Other metrics: +available for [these assets]() + +--- + +### SanAPI + +Action metrics: `compound_v3_action_deposits<_usd>`, `compound_v3_action_liquidations<_usd>`, +`compound_v3_action_new_debt<_usd>` and `compound_v3_action_repayments<_usd>` + +```graphql explorer +{ + getMetric(metric: "compound_v3_action_deposits_usd"){ + timeseriesDataJson( + slug: "wrapped-bitcoin" + from: "2023-08-01T00:00:00Z" + to: "2023-08-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Total action metrics: `compound_v3_total_deposits_usd`, `compound_v3_total_liquidations_usd`, +`compound_v3_total_new_debt_usd` and `compound_v3_total_repayments_usd` + +```graphql explorer +{ + getMetric(metric: "compound_v3_total_new_debt_usd"){ + timeseriesDataJson( + slug: "compound" + from: "2023-08-01T00:00:00Z" + to: "2023-08-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Total supplied/borrowed metrics: `compound_v3_collateral_total_supplied<_usd>`, +`compound_v3_total_supplied<_usd>` and `compound_v3_total_borrowed<_usd>` + +```graphql explorer +{ + getMetric(metric: "compound_v3_collateral_total_supplied"){ + timeseriesDataJson( + slug: "wrapped-bitcoin" + from: "2023-08-01T00:00:00Z" + to: "2023-08-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Protocol total supplied/borrowed metrics: `compound_v3_protocol_total_supplied_usd` and +`compound_v3_protocol_total_borrowed_usd` + +```graphql explorer +{ + getMetric(metric: "compound_v3_protocol_total_supplied_usd"){ + timeseriesDataJson( + slug: "compound" + from: "2023-08-01T00:00:00Z" + to: "2023-08-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +APY metrics: `compound_v3_supply_apy` and `compound_v3_borrow_apy` + +```graphql explorer +{ + getMetric(metric: "compound_v3_supply_apy"){ + timeseriesDataJson( + slug: "usd-coin" + from: "2023-08-01T00:00:00Z" + to: "2023-08-07T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Daily active addresses: `compound_v3_active_addresses` + +```graphql explorer +{ + getMetric(metric: "compound_v3_active_addresses"){ + timeseriesDataJson( + slug: "compound" + from: "2023-08-01T00:00:00Z" + to: "2023-08-10T00:00:00Z" + includeIncompleteData: true + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/lending-and-borrowing-protocols/compound/index.mdx b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/compound/index.mdx new file mode 100644 index 000000000..bcdfe8fdc --- /dev/null +++ b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/compound/index.mdx @@ -0,0 +1,210 @@ +--- +title: Compound Protocol +author: Filip +description: Compound Protocol Metrics +datePublished: 2022-12-05 +dateModified: 2025-04-30 +--- + +## Description +Compound is a decentralized finance (DeFi) protocol built on the Ethereum +blockchain that allows individuals to lend and borrow digital assets without +intermediaries. Compound is designed to create a market for lending and borrowing +digital assets, where users can earn interest by lending their assets and +borrowers can obtain loans by using their assets as collateral. + +### Metrics related to Compound protocol: + +Action metrics: +* `compound_action_deposits` - Amount of deposited tokens +* `compound_action_deposits_usd` - Amount of deposited tokens in USD +* `compound_action_liquidations` - Amount of liquidated tokens +* `compound_action_liquidations_usd` - Amount of liquidated tokens in USD +* `compound_action_new_debt` - Amount of borrowed tokens +* `compound_action_new_debt_usd` - Amount of borrowed tokens in USD +* `compound_action_repayments` - Amount of repaid tokens +* `compound_action_repayments_usd` - Amount of repaid tokens in USD + +Total supplied/borrowed metrics: +* `compound_total_supplied` - Total supplied tokens +* `compound_total_supplied_usd` - Total supplied tokens in USD +* `compound_total_borrowed` - Total borrowed tokens +* `compound_total_borrowed_usd` - Total borrowed tokens in USD + +APY (annual percentage yield) metrics: +* `compound_supply_apy` - Supply APY +* `compound_borrow_apy` - Borrow APY + +Protocol total action metrics: +* `compound_total_deposits_usd` - Total amount of deposits on Compound (combining all assets in USD) +* `compound_total_liquidations_usd` - Total amount of liquidations on Compound (combining all assets in USD) +* `compound_total_new_debt_usd` - Total amount of borrowings on Compound (combining all assets in USD) +* `compound_total_repayments_usd` - Total amount of repayments on Compound (combining all assets in USD) + +Protocol total supplied/borrowed metrics: +* `compound_protocol_total_supplied_usd` - Total amount supplied on Compound (combining all assets in USD) +* `compound_protocol_total_borrowed_usd` - Total amount borrowed on Compound (combining all assets in USD) + +Daily active addresses: +* `compound_active_addresses` - Daily active addresses on Compound + +Revenue metrics: +* `compound_revenue` - Compound Revenue per asset +* `compound_revenue_usd` - Compound Revenue in USD per asset +* `compound_total_protocol_revenue_usd` - Compound Total Protocol Revenue +* `compound_total_protocol_cumulative_revenue_usd` - Daily Compound Total Protocol Cumulative Revenue + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +* Amount in tokens/USD +* APY metrics in percentages + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +* [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - Actions, supply, borrow, and APY metrics +* [Daily Intervals](/metrics/details/frequency#daily-frequency) - Revenue and active addresses metrics + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Metrics related to the entire protocol available for `compound` + +Other metrics: +available for [these assets]() + +--- + +### SanAPI + +Action metrics: `compound_action_deposits<_usd>`, `compound_action_liquidations<_usd>`, +`compound_action_new_debt<_usd>` and `compound_action_repayments<_usd>` + +```graphql explorer +{ + getMetric(metric: "compound_action_deposits_usd"){ + timeseriesDataJson( + slug: "ethereum" + from: "2022-11-01T00:00:00Z" + to: "2022-11-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Total action metrics: `compound_total_deposits_usd`, `compound_total_liquidations_usd`, +`compound_total_new_debt_usd` and `compound_total_repayments_usd` + +```graphql explorer +{ + getMetric(metric: "compound_total_new_debt_usd"){ + timeseriesDataJson( + slug: "compound" + from: "2022-11-01T00:00:00Z" + to: "2022-11-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Total supplied/borrowed metrics: `compound_total_supplied<_usd>` and +`compound_total_borrowed<_usd>` + +```graphql explorer +{ + getMetric(metric: "compound_total_supplied"){ + timeseriesDataJson( + slug: "wrapped-bitcoin" + from: "2022-11-01T00:00:00Z" + to: "2022-11-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Protocol total supplied/borrowed metrics: `compound_protocol_total_supplied_usd` and +`compound_protocol_total_borrowed_usd` + +```graphql explorer +{ + getMetric(metric: "compound_protocol_total_supplied_usd"){ + timeseriesDataJson( + slug: "compound" + from: "2022-11-01T00:00:00Z" + to: "2022-11-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +APY metrics: `compound_supply_apy` and `compound_borrow_apy` + +```graphql explorer +{ + getMetric(metric: "compound_supply_apy"){ + timeseriesDataJson( + slug: "wrapped-bitcoin" + from: "2023-01-01T00:00:00Z" + to: "2023-03-01T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Daily active addresses: `compound_active_addresses` + +```graphql explorer +{ + getMetric(metric: "compound_active_addresses"){ + timeseriesDataJson( + slug: "compound" + from: "2023-01-01T00:00:00Z" + to: "2023-01-10T00:00:00Z" + includeIncompleteData: true + interval: "1d") + } +} +``` + +Revenue metrics: `compound_revenue`, `compound_revenue_usd`, `compound_total_protocol_revenue_usd` +and `compound_total_protocol_cumulative_revenue_usd` + +```graphql explorer +{ + getMetric(metric: "compound_revenue"){ + timeseriesDataJson( + slug: "usd-coin" + from: "2023-01-01T00:00:00Z" + to: "2023-01-10T00:00:00Z" + includeIncompleteData: true + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/lending-and-borrowing-protocols/fluid/index.mdx b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/fluid/index.mdx new file mode 100644 index 000000000..e583bb26f --- /dev/null +++ b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/fluid/index.mdx @@ -0,0 +1,167 @@ +--- +title: Fluid Protocol +author: Filip +description: Fluid Protocol Metrics +datePublished: 2025-02-07 +dateModified: 2025-04-30 +--- + +## Description +[Fluid](https://fluid.instadapp.io/) is Instadapp’s innovative lending and borrowing protocol designed to optimize +capital efficiency in DeFi. Unlike traditional lending platforms, Fluid dynamically adjusts borrowing power and interest +rates based on real-time market conditions. This allows users to borrow more against their collateral while reducing +risks of liquidation. The protocol integrates seamlessly with Instadapp, offering deep liquidity and smart automation to +enhance user experience. By making lending more flexible and efficient, Fluid aims to redefine how DeFi users manage +their assets. + +### Metrics related to Fluid protocol: + +Action metrics: +* `fluid_action_deposits` - Amount of deposited tokens +* `fluid_action_deposits_usd` - Amount of deposited tokens in USD +* `fluid_action_liquidations` - Amount of liquidated tokens +* `fluid_action_liquidations_usd` - Amount of liquidated tokens in USD +* `fluid_action_new_debt` - Amount of borrowed tokens +* `fluid_action_new_debt_usd` - Amount of borrowed tokens in USD +* `fluid_action_repayments` - Amount of repaid tokens +* `fluid_action_repayments_usd` - Amount of repaid tokens in USD + +Protocol total action metrics: +* `fluid_total_deposits_usd` - Total amount of deposits on Fluid protocol (combining all assets in USD) +* `fluid_total_liquidations_usd` - Total amount of liquidations on Fluid protocol (combining all assets in USD) +* `fluid_total_new_debt_usd` - Total amount of borrowings on Fluid protocol (combining all assets in USD) +* `fluid_total_repayments_usd` - Total amount of repayments on Fluid protocol (combining all assets in USD) + +APY (annual percentage yield) metrics: +* `fluid_supply_apy` - Supply APY + +Total supplied metrics: +* `fluid_total_supplied` - Total supplied tokens +* `fluid_total_supplied_usd` - Total supplied tokens in USD +* `fluid_protocol_total_supplied_usd` - Total amount supplied on Fluid (combining all assets in USD) + +Daily active addresses: +* `fluid_active_addresses` - Daily active addresses on Fluid protocol + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +* Amount in tokens/USD +* APY metric in percentages + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +* [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - Actions, supply and APY metrics +* [Daily Intervals](/metrics/details/frequency#daily-frequency) - Active addresses metric + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Metrics related to the entire protocol available for `instadapp`. + +Other metrics: +available for [these assets]() + +--- + +### SanAPI + +Action metrics: `fluid_action_deposits<_usd>`, `fluid_action_liquidations<_usd>`, +`fluid_action_new_debt<_usd>` and `fluid_action_repayments<_usd>` + +```graphql explorer +{ + getMetric(metric: "fluid_action_deposits_usd"){ + timeseriesDataJson( + slug: "ethereum" + from: "2025-01-01T00:00:00Z" + to: "2025-02-01T00:00:00Z" + includeIncompleteData: true + interval: "1d") + } +} +``` + +Total action/supply metrics: `fluid_total_deposits_usd`, `fluid_total_liquidations_usd`, +`fluid_total_new_debt_usd`, `fluid_total_repayments_usd` and `fluid_protocol_total_supplied_usd` + +```graphql explorer +{ + getMetric(metric: "fluid_total_new_debt_usd"){ + timeseriesDataJson( + slug: "instadapp" + from: "2025-01-10T00:00:00Z" + to: "2025-01-12T00:00:00Z" + includeIncompleteData: true + interval: "1h") + } +} +``` + +APY metrics: `fluid_supply_apy` + +```graphql explorer +{ + getMetric(metric: "fluid_supply_apy"){ + timeseriesDataJson( + slug: "ethereum" + from: "2025-01-10T00:00:00Z" + to: "2025-01-12T00:00:00Z" + includeIncompleteData: true + interval: "1h") + } +} +``` + +Total supplied/borrowed metrics: `fluid_total_supplied<_usd>` + +```graphql explorer +{ + getMetric(metric: "fluid_total_supplied"){ + timeseriesDataJson( + slug: "ethereum" + from: "2025-01-10T00:00:00Z" + to: "2025-01-15T00:00:00Z" + includeIncompleteData: true + interval: "1d") + } +} +``` + + +Daily active addresses: `fluid_active_addresses` + +```graphql explorer +{ + getMetric(metric: "fluid_active_addresses"){ + timeseriesDataJson( + slug: "instadapp" + from: "2025-01-01T00:00:00Z" + to: "2025-01-10T00:00:00Z" + includeIncompleteData: true + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/lending-and-borrowing-protocols/fraxlend/index.mdx b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/fraxlend/index.mdx new file mode 100644 index 000000000..4664a382d --- /dev/null +++ b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/fraxlend/index.mdx @@ -0,0 +1,191 @@ +--- +title: Fraxlend Protocol +author: Filip +description: Fraxlend Protocol Metrics +datePublished: 2024-06-25 +dateModified: 2025-04-30 +--- + +## Description +[Fraxlend](https://app.frax.finance/fraxlend) Protocol is a decentralized lending and borrowing +platform designed to facilitate efficient and secure financial transactions within the DeFi +ecosystem. It operates by allowing users to lend their digital assets to earn interest or borrow +against their holdings, leveraging the stability and flexibility of the FRAX stablecoin. The +protocol employs smart contracts to ensure transparency, security, and automation of all lending +activities, minimizing risks associated with traditional financial systems. + +### Metrics related to Fraxlend protocol: + +Action metrics: +* `fraxlend_action_deposits` - Amount of deposited tokens +* `fraxlend_action_deposits_usd` - Amount of deposited tokens in USD +* `fraxlend_action_liquidations` - Amount of liquidated tokens +* `fraxlend_action_liquidations_usd` - Amount of liquidated tokens in USD +* `fraxlend_action_new_debt` - Amount of borrowed tokens +* `fraxlend_action_new_debt_usd` - Amount of borrowed tokens in USD +* `fraxlend_action_repayments` - Amount of repaid tokens +* `fraxlend_action_repayments_usd` - Amount of repaid tokens in USD + +Total supplied/borrowed metrics: +* `fraxlend_total_supplied` - Total supplied tokens +* `fraxlend_total_supplied_usd` - Total supplied tokens in USD +* `fraxlend_total_borrowed_against_collateral` - Total FRAX borrowed against collateral + +APY (annual percentage yield) metric: +* `fraxlend_borrow_apy` - Variable borrow APY (variable interest rate will fluctuate based on the market conditions) + +Protocol total action metrics: +* `fraxlend_total_deposits_usd` - Total amount of deposits on Fraxlend protocol (combining all assets in USD) +* `fraxlend_total_liquidations_usd` - Total amount of liquidations on Fraxlend protocol (combining all assets in USD) +* `fraxlend_total_new_debt_usd` - Total amount of borrowings on Fraxlend protocol (combining all assets in USD) +* `fraxlend_total_repayments_usd` - Total amount of repayments on Fraxlend protocol (combining all assets in USD) + +Protocol total supplied/borrowed metrics: +* `fraxlend_protocol_total_supplied_usd` - Total amount supplied on Fraxlend (combining all assets in USD) +* `fraxlend_protocol_total_borrowed_usd` - Total amount borrowed on Fraxlend (combining all assets in USD) + +Daily active addresses: +* `fraxlend_active_addresses` - Daily active addresses on Fraxlend protocol + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +* Amount in tokens/USD +* Borrow APY metric in percentage + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +* [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - Actions and APY metrics +* [Daily Intervals](/metrics/details/frequency#daily-frequency) - Active addresses metric + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Metrics related to the entire protocol available for `frax` + +Other metrics: +available for [these assets]() + +--- + +### SanAPI + +Action metrics: `fraxlend_action_deposits<_usd>`, `fraxlend_action_liquidations<_usd>`, +`fraxlend_action_new_debt<_usd>` and `fraxlend_action_repayments<_usd>` + +```graphql explorer +{ + getMetric(metric: "fraxlend_action_deposits_usd"){ + timeseriesDataJson( + slug: "weth" + from: "2024-01-01T00:00:00Z" + to: "2024-02-01T00:00:00Z" + includeIncompleteData: true + interval: "1d") + } +} +``` + + +Total action metrics: `fraxlend_total_deposits_usd`, `fraxlend_total_liquidations_usd`, +`fraxlend_total_new_debt_usd` and `fraxlend_total_repayments_usd` + +```graphql explorer +{ + getMetric(metric: "fraxlend_total_new_debt_usd"){ + timeseriesDataJson( + slug: "frax" + from: "2024-01-10T00:00:00Z" + to: "2024-01-12T00:00:00Z" + includeIncompleteData: true + interval: "1h") + } +} +``` + +Total supplied/borrowed metrics: `fraxlend_total_supplied<_usd>` and +`fraxlend_total_borrowed_against_collateral` + +```graphql explorer +{ + getMetric(metric: "fraxlend_total_supplied"){ + timeseriesDataJson( + slug: "wrapped-bitcoin" + from: "2024-11-01T00:00:00Z" + to: "2024-11-07T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Protocol total supplied/borrowed metrics: `fraxlend_protocol_total_supplied_usd` and +`fraxlend_protocol_total_borrowed_usd` + +```graphql explorer +{ + getMetric(metric: "fraxlend_protocol_total_supplied_usd"){ + timeseriesDataJson( + slug: "frax" + from: "2024-11-01T00:00:00Z" + to: "2024-11-07T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + + +APY metric: `fraxlend_borrow_apy` + +```graphql explorer +{ + getMetric(metric: "fraxlend_borrow_apy"){ + timeseriesDataJson( + slug: "wrapped-bitcoin" + from: "2024-01-01T00:00:00Z" + to: "2024-01-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + + +Daily active addresses: `fraxlend_active_addresses` + +```graphql explorer +{ + getMetric(metric: "fraxlend_active_addresses"){ + timeseriesDataJson( + slug: "frax" + from: "2024-01-01T00:00:00Z" + to: "2024-01-10T00:00:00Z" + includeIncompleteData: true + interval: "1d") + } +} +``` + diff --git a/src/content/docs/resources/metrics/lending-and-borrowing-protocols/index.mdx b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/index.mdx new file mode 100644 index 000000000..e28c30233 --- /dev/null +++ b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/index.mdx @@ -0,0 +1,33 @@ +--- +title: DeFi Lending and Borrowing Protocols +author: Filip +datePublished: 2023-04-07 +dateModified: 2025-03-03 +--- + +Decentralized Finance (DeFi) lending and borrowing protocols are blockchain-based +platforms that allow individuals to lend and borrow digital assets without the need +for traditional financial intermediaries, such as banks. These protocols utilize +smart contracts, which are self-executing code on a blockchain, to automate the +lending and borrowing process and enforce the terms of the agreement between parties. + +On these DeFi platforms, users can lend their digital assets to other users and earn +interest on their deposits. Conversely, borrowers can use these digital assets as +collateral to obtain loans in the form of stablecoins or other cryptocurrencies. +DeFi lending and borrowing protocols typically offer more flexibility, accessibility, +and transparency than traditional finance and allow users to participate in the +global financial system without the need for intermediaries or extensive paperwork. +However, they also carry additional risks such as smart contract vulnerabilities +and market volatility. + +- [Aave V2](/metrics/lending-and-borrowing-protocols/aave-v2) +- [Aave V3](/metrics/lending-and-borrowing-protocols/aave-v3) +- [Aave Safety Module](/metrics/lending-and-borrowing-protocols/aave-safety-module) +- [Compound](/metrics/lending-and-borrowing-protocols/compound) +- [Compound V3](/metrics/lending-and-borrowing-protocols/compound-v3) +- [MakerDAO](/metrics/lending-and-borrowing-protocols/makerdao) +- [Morpho](/metrics/lending-and-borrowing-protocols/morpho) +- [Spark](/metrics/lending-and-borrowing-protocols/spark) +- [Fluid](/metrics/lending-and-borrowing-protocols/fluid) +- [Liquity](/metrics/lending-and-borrowing-protocols/liquity) +- [Fraxlend](/metrics/lending-and-borrowing-protocols/fraxlend) diff --git a/src/content/docs/resources/metrics/lending-and-borrowing-protocols/liquity/index.mdx b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/liquity/index.mdx new file mode 100644 index 000000000..cb8eadfb2 --- /dev/null +++ b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/liquity/index.mdx @@ -0,0 +1,147 @@ +--- +title: Liquity Protocol +author: Filip +description: Liquity Protocol Metrics +datePublished: 2024-03-01 +dateModified: 2025-04-30 +--- + +## Description +[Liquity](https://www.liquity.org/) is a decentralized borrowing protocol operating on the Ethereum +blockchain. It allows users to borrow a stablecoin, LUSD, against their Ethereum (ETH) collateral. + +It stands out from other borrowing protocols because of its unique approach to interest calculation +for loans. Liquity applies a small, fixed fee for borrowing LUSD, rather than subjecting users to +highly fluctuating interest rates. + +Aside from the collateral, the loans are backed by a Stability Pool containing LUSD and +by other borrowers collectively serving as a safety net. + +### Metrics related to Compound protocol: + +Action metrics: +* `liquity_action_deposits` - Amount of deposited tokens +* `liquity_action_deposits_usd` - Amount of deposited tokens in USD +* `liquity_action_liquidations` - Amount of liquidated tokens +* `liquity_action_liquidations_usd` - Amount of liquidated tokens in USD +* `liquity_action_new_debt` - Amount of borrowed tokens +* `liquity_action_new_debt_usd` - Amount of borrowed tokens in USD +* `liquity_action_repayments` - Amount of repaid tokens +* `liquity_action_repayments_usd` - Amount of repaid tokens in USD + +Total supplied/borrowed metrics: +* `liquity_total_supplied` - Total supplied tokens +* `liquity_total_supplied_usd` - Total supplied tokens in USD +* `liquity_total_borrowed` - Total borrowed tokens +* `liquity_total_borrowed_usd` - Total borrowed tokens in USD + +APY (annual percentage yield) metrics: +* `liquity_borrow_fee` - Liquity borrow fee + +Daily active addresses: +* `liquity_active_addresses` - Daily active addresses on Liquity + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +* Amount in tokens/USD +* `liquity_borrow_fee` in percentages + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Deposit/supply metrics available for `ethereum` + +Repayment/borrow metrics available for `liquity-usd` + +--- + +### SanAPI + +Action metrics: `liquity_action_deposits<_usd>`, `liquity_action_liquidations<_usd>`, +`liquity_action_new_debt<_usd>` and `liquity_action_repayments<_usd>` + +```graphql explorer +{ + getMetric(metric: "liquity_action_new_debt"){ + timeseriesDataJson( + slug: "liquity-usd" + from: "2024-01-01T00:00:00Z" + to: "2024-01-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Total supplied/borrowed metrics: `liquity_total_supplied<_usd>` and +`liquity_total_borrowed<_usd>` + +```graphql explorer +{ + getMetric(metric: "liquity_total_supplied"){ + timeseriesDataJson( + slug: "ethereum" + from: "2024-01-01T00:00:00Z" + to: "2024-01-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Borrow fee metric: `liquity_borrow_fee` + +```graphql explorer +{ + getMetric(metric: "liquity_borrow_fee"){ + timeseriesDataJson( + slug: "liquity-usd" + from: "2024-03-01T00:00:00Z" + to: "2024-03-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Daily active addresses: `liquity_active_addresses` + +```graphql explorer +{ + getMetric(metric: "liquity_active_addresses"){ + timeseriesDataJson( + slug: "liquity-usd" + from: "2024-01-01T00:00:00Z" + to: "2024-01-07T00:00:00Z" + includeIncompleteData: true + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/lending-and-borrowing-protocols/makerdao/index.mdx b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/makerdao/index.mdx new file mode 100644 index 000000000..b35b62ad8 --- /dev/null +++ b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/makerdao/index.mdx @@ -0,0 +1,220 @@ +--- +title: MakerDAO Protocol +author: Filip +description: MakerDAO Protocol Metrics +datePublished: 2023-01-01 +dateModified: 2025-04-30 +--- + +## Description +MakerDAO is a decentralized finance (DeFi) platform built on the Ethereum +blockchain that allows individuals to create and manage the DAI stablecoin, +which is pegged to the value of the US dollar. MakerDAO uses a system of +smart contracts to manage the creation and redemption of DAI tokens, which +can be used for a variety of purposes, such as payments, trading, and investment. + +One of the key features of MakerDAO is its collateralized debt position (CDP) +system, which allows users to lock up their digital assets as collateral in order +to generate DAI stablecoins. This creates a decentralized lending system that is +independent of traditional financial intermediaries and allows users to access +liquidity without having to sell their assets. + +### Metrics related to MakerDAO protocol: + +Action metrics: +* `makerdao_action_deposits` - Amount of deposited tokens +* `makerdao_action_deposits_usd` - Amount of deposited tokens in USD +* `makerdao_action_liquidations` - Amount of liquidated tokens +* `makerdao_action_liquidations_usd` - Amount of liquidated tokens in USD +* `makerdao_action_new_debt` - Amount of borrowed tokens +* `makerdao_action_new_debt_usd` - Amount of borrowed tokens in USD +* `makerdao_action_repayments` - Amount of repaid tokens +* `makerdao_action_repayments_usd` - Amount of repaid tokens in USD + +New debt/repayments against collateral metrics: +* `dai_created` - Amount of DAI created, backed by underlying collateral +* `dai_repaid` - Amount of DAI repaid, backed by underlying collateral +* `total_dai_created` - Amount of DAI in circulation, backed by underlying collateral + +Total supplied/borrowed metrics: +* `makerdao_total_supplied` - Total supplied tokens +* `makerdao_total_supplied_usd` - Total supplied tokens in USD +* `makerdao_total_borrowed` - Total borrowed tokens +* `makerdao_total_borrowed_usd` - Total borrowed tokens in USD + +Collateralization ratio and stability fee metrics: +* `mcd_collat_ratio` - Ratio of collateral value to the value of the debt generated against that collateral +* `mcd_stability_fee` - Variable interest rate charged on outstanding debt + +Protocol total action metrics: +* `makerdao_total_deposits_usd` - Total amount of deposits on MakerDAO (combining all assets in USD) +* `makerdao_total_liquidations_usd` - Total amount of liquidations on MakerDAO (combining all assets in USD) +* `makerdao_total_new_debt_usd` - Total amount of borrowings on MakerDAO (combining all assets in USD) +* `makerdao_total_repayments_usd` - Total amount of repayments on MakerDAO (combining all assets in USD) + +Protocol total supplied/borrowed metrics: +* `makerdao_protocol_total_supplied_usd` - Total amount supplied on MakerDAO (combining all assets in USD) +* `makerdao_protocol_total_borrowed_usd` - Total amount borrowed on MakerDAO (combining all assets in USD) + +Daily active addresses: +* `makerdao_active_addresses` - Daily active addresses on MakerDAO + + +> MakerDAO metrics have been migrated to a new framework; old metrics can be accessed via their +> previous names, listed here: [Deprecated MakerDAO Metrics](/metrics/deprecated-metrics/deprecated-makerdao-metrics). +> **Although older data remains accessible through the API, we do not recommend its use.** + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Amount in tokens/USD + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Metrics related to the entire protocol available for `maker` and `multi-collateral-dai` + +Other metrics: +available for [these assets]() + +--- + +### SanAPI + +Action metrics: `makerdao_action_deposits<_usd>`, `makerdao_action_liquidations<_usd>`, +`makerdao_action_new_debt<_usd>` and `makerdao_action_repayments<_usd>` + +```graphql explorer +{ + getMetric(metric: "makerdao_action_deposits_usd"){ + timeseriesDataJson( + slug: "weth" + from: "2022-11-01T00:00:00Z" + to: "2022-11-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + + +New debt/repayments against collateral metrics:`dai_created`, `dai_repaid` and `total_dai_created` + +```graphql explorer +{ + getMetric(metric: "dai_created"){ + timeseriesDataJson( + slug: "weth" + from: "2022-11-01T00:00:00Z" + to: "2022-11-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Total supplied/borrowed metrics: `makerdao_total_supplied<_usd>` and +`makerdao_total_borrowed<_usd>` + +```graphql explorer +{ + getMetric(metric: "makerdao_total_supplied"){ + timeseriesDataJson( + slug: "wrapped-bitcoin" + from: "2022-11-01T00:00:00Z" + to: "2022-11-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Collateralization ratio and stability fee metrics: `mcd_collat_ratio` and +`mcd_stability_fee` + +```graphql explorer +{ + getMetric(metric: "mcd_collat_ratio"){ + timeseriesDataJson( + slug: "wrapped-bitcoin" + from: "2022-11-01T00:00:00Z" + to: "2022-11-03T00:00:00Z" + includeIncompleteData: true + interval: "1d") + } +} +``` + + +Protocol total action metrics: `makerdao_total_deposits_usd`, `makerdao_total_liquidations_usd`, +`makerdao_total_new_debt_usd` and `makerdao_total_repayments_usd` + +```graphql explorer +{ + getMetric(metric: "makerdao_total_new_debt_usd"){ + timeseriesDataJson( + slug: "maker" + from: "2022-11-01T00:00:00Z" + to: "2022-11-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Protocol total supplied/borrowed metrics: `makerdao_protocol_total_supplied_usd` and +`makerdao_protocol_total_borrowed_usd` + +```graphql explorer +{ + getMetric(metric: "makerdao_protocol_total_supplied_usd"){ + timeseriesDataJson( + slug: "multi-collateral-dai" + from: "2022-11-01T00:00:00Z" + to: "2022-11-03T00:00:00Z" + includeIncompleteData: true + interval: "5m") + } +} +``` + +Daily active addresses: `makerdao_active_addresses` + +```graphql explorer +{ + getMetric(metric: "makerdao_active_addresses"){ + timeseriesDataJson( + slug: "maker" + from: "2023-01-01T00:00:00Z" + to: "2023-01-10T00:00:00Z" + includeIncompleteData: true + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/lending-and-borrowing-protocols/morpho/index.mdx b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/morpho/index.mdx new file mode 100644 index 000000000..91837d9b1 --- /dev/null +++ b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/morpho/index.mdx @@ -0,0 +1,221 @@ +--- +title: Morpho Protocol +author: Filip +description: Morpho Protocol Metrics +datePublished: 2024-08-01 +dateModified: 2025-09-22 +--- + +## Description + +[Morpho](https://morpho.org/) is a decentralized finance (DeFi) protocol designed to optimize yields in +lending and borrowing markets. It operates as a layer on top of existing protocols like +Compound and Aave, improving the efficiency of capital allocation by matching lenders and +borrowers directly. This direct matching reduces intermediaries, enhancing both the interest +rates for lenders and borrowers. The protocol aims to offer seamless and more profitable +interactions within the DeFi ecosystem. + +### Metrics related to Morpho protocol + +Action metrics: + +- `morpho_action_deposits` - Amount of deposited tokens +- `morpho_action_deposits_usd` - Amount of deposited tokens in USD +- `morpho_action_liquidations` - Amount of liquidated tokens +- `morpho_action_liquidations_usd` - Amount of liquidated tokens in USD +- `morpho_action_new_debt` - Amount of borrowed tokens +- `morpho_action_new_debt_usd` - Amount of borrowed tokens in USD +- `morpho_action_repayments` - Amount of repaid tokens +- `morpho_action_repayments_usd` - Amount of repaid tokens in USD + +Protocol total action metrics: + +- `morpho_total_deposits_usd` - Total amount of deposits on Morpho protocol (combining all assets in USD) +- `morpho_total_liquidations_usd` - Total amount of liquidations on Morpho protocol (combining all assets in USD) +- `morpho_total_new_debt_usd` - Total amount of borrowings on Morpho protocol (combining all assets in USD) +- `morpho_total_repayments_usd` - Total amount of repayments on Morpho protocol (combining all assets in USD) + +Morpho vaults metrics: + +- `morpho_vaults_total_supplied_usd` - [Morpho vault]() total supplied in USD +- `morpho_vaults_apy` - [Morpho vault]() APY + +Protocol total supplied/borrowed metrics: + +- `morpho_protocol_total_supplied_usd` - Total amount supplied on Morpho (combining all assets in USD) +- `morpho_protocol_total_borrowed_usd` - Total amount borrowed on Morpho (combining all assets in USD) + +Daily active addresses: + +- `morpho_active_addresses` - Daily active addresses on Morpho protocol + +Flashloan metrics: + +- `morpho_flashloan` - Flashloan volume by asset +- `morpho_flashloan_usd` - Flashloan volume by asset in USD +- `morpho_total_flashloan_usd` - Total flashloan volume across Morpho in USD + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +- Amount in tokens/USD + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +- [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - Actions metrics +- [Daily Intervals](/metrics/details/frequency#daily-frequency) - Active addresses metric + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Metrics related to the entire protocol available for `morpho`. + +Other metrics: +available for [these assets]() + +--- + +### SanAPI + +Action metrics: `morpho_action_deposits<_usd>`, `morpho_action_liquidations<_usd>`, +`morpho_action_new_debt<_usd>` and `morpho_action_repayments<_usd>` + +```graphql explorer +{ + getMetric(metric: "morpho_action_deposits_usd") { + timeseriesDataJson( + slug: "weth" + from: "2024-01-01T00:00:00Z" + to: "2024-02-01T00:00:00Z" + includeIncompleteData: true + interval: "1d" + ) + } +} +``` + +Total action metrics: `morpho_total_deposits_usd`, `morpho_total_liquidations_usd`, +`morpho_total_new_debt_usd` and `morpho_total_repayments_usd` + +```graphql explorer +{ + getMetric(metric: "morpho_total_new_debt_usd") { + timeseriesDataJson( + slug: "morpho" + from: "2024-01-10T00:00:00Z" + to: "2024-01-12T00:00:00Z" + includeIncompleteData: true + interval: "1h" + ) + } +} +``` + +Morpho vaults total supplied metric: `morpho_vaults_total_supplied_usd` + +```graphql explorer +{ + getMetric(metric: "morpho_vaults_total_supplied_usd") { + timeseriesDataJson( + selector: { + slug: "morpho" + labelFqn: "santiment/morpho_vault->steakhouse usdc:v1" + } + from: "2024-10-01T00:00:00Z" + to: "2024-10-10T00:00:00Z" + includeIncompleteData: true + interval: "1h" + ) + } +} +``` + +Morpho vaults APY metric: `morpho_vaults_apy` + +```graphql explorer +{ + getMetric(metric: "morpho_vaults_apy") { + timeseriesDataJson( + selector: { + slug: "morpho" + labelFqn: "santiment/morpho_vault->steakhouse usdc:v1" + } + from: "2025-09-01T00:00:00Z" + to: "2025-10-10T00:00:00Z" + includeIncompleteData: true + interval: "1d" + ) + } +} +``` + +Protocol total supplied/borrowed metrics: `morpho_protocol_total_supplied_usd` and +`morpho_protocol_total_borrowed_usd` + +```graphql explorer +{ + getMetric(metric: "morpho_protocol_total_supplied_usd") { + timeseriesDataJson( + slug: "morpho" + from: "2025-09-01T00:00:00Z" + to: "2025-09-07T00:00:00Z" + includeIncompleteData: true + interval: "5m" + ) + } +} +``` + +Daily active addresses: `morpho_active_addresses` + +```graphql explorer +{ + getMetric(metric: "morpho_active_addresses") { + timeseriesDataJson( + slug: "morpho" + from: "2024-01-01T00:00:00Z" + to: "2024-01-10T00:00:00Z" + includeIncompleteData: true + interval: "1d" + ) + } +} +``` + +Flashloan metrics: `morpho_flashloan`, `morpho_flashloan_usd` and `morpho_total_flashloan_usd` + +```graphql explorer +{ + getMetric(metric: "morpho_flashloan") { + timeseriesDataJson( + slug: "usd-coin" + from: "2026-01-01T00:00:00Z" + to: "2026-01-10T00:00:00Z" + includeIncompleteData: true + interval: "5m" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/lending-and-borrowing-protocols/spark/index.mdx b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/spark/index.mdx new file mode 100644 index 000000000..e60295260 --- /dev/null +++ b/src/content/docs/resources/metrics/lending-and-borrowing-protocols/spark/index.mdx @@ -0,0 +1,224 @@ +--- +title: Spark Protocol +author: Filip +description: Spark Protocol Metrics +datePublished: 2024-07-01 +dateModified: 2025-04-30 +--- + +## Description + +[Spark](https://spark.fi/) is a lending and borrowing crypto protocol developed by MakerDAO. +Spark aims to offer competitive interest rates and enhanced liquidity within the DeFi ecosystem, +integrating the best liquidity from Maker and seamlessly incorporating the best DeFi protocols. +The protocol incorporates with MakerDAO's existing infrastructure, ensuring stability and security. +By utilizing Spark, users can efficiently manage their crypto assets and optimize their financial +strategies within the decentralized finance landscape. + +### Metrics related to Spark protocol + +Action metrics: + +- `spark_action_deposits` - Amount of deposited tokens +- `spark_action_deposits_usd` - Amount of deposited tokens in USD +- `spark_action_liquidations` - Amount of liquidated tokens +- `spark_action_liquidations_usd` - Amount of liquidated tokens in USD +- `spark_action_new_debt` - Amount of borrowed tokens +- `spark_action_new_debt_usd` - Amount of borrowed tokens in USD +- `spark_action_repayments` - Amount of repaid tokens +- `spark_action_repayments_usd` - Amount of repaid tokens in USD + +Total supplied/borrowed metrics: + +- `spark_total_supplied` - Total supplied tokens +- `spark_total_supplied_usd` - Total supplied tokens in USD +- `spark_total_borrowed` - Total borrowed tokens +- `spark_total_borrowed_usd` - Total borrowed tokens in USD + +APY (annual percentage yield) metric: + +- `spark_supply_apy` - Supply APY +- `spark_borrow_apy` - Variable borrow APY (variable interest rate will fluctuate based on the market conditions) + +Protocol total action metrics: + +- `spark_total_deposits_usd` - Total amount of deposits on Spark protocol (combining all assets in USD) +- `spark_total_liquidations_usd` - Total amount of liquidations on Spark protocol (combining all assets in USD) +- `spark_total_new_debt_usd` - Total amount of borrowings on Spark protocol (combining all assets in USD) +- `spark_total_repayments_usd` - Total amount of repayments on Spark protocol (combining all assets in USD) + +Protocol total supplied/borrowed metrics: + +- `spark_protocol_total_supplied_usd` - Total amount supplied on Spark (combining all assets in USD) +- `spark_protocol_total_borrowed_usd` - Total amount borrowed on Spark (combining all assets in USD) + +Daily active addresses: + +- `spark_active_addresses` - Daily active addresses on Spark protocol + +Flashloan metrics: + +- `spark_flashloan` - Flashloan volume by asset +- `spark_flashloan_usd` - Flashloan volume by asset in USD +- `spark_total_flashloan_usd` - Total flashloan volume across Spark in USD + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +- Amount in tokens/USD +- APY metrics in percentage + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +- [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - Actions and APY metrics +- [Daily Intervals](/metrics/details/frequency#daily-frequency) - Active addresses metric + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Metrics related to the entire protocol available for `maker` and `multi-collateral-dai` + +Other metrics: +available for [these assets]() + +--- + +### SanAPI + +Action metrics: `spark_action_deposits<_usd>`, `spark_action_liquidations<_usd>`, +`spark_action_new_debt<_usd>` and `spark_action_repayments<_usd>` + +```graphql explorer +{ + getMetric(metric: "spark_action_deposits_usd") { + timeseriesDataJson( + slug: "weth" + from: "2024-01-01T00:00:00Z" + to: "2024-02-01T00:00:00Z" + includeIncompleteData: true + interval: "1d" + ) + } +} +``` + +Total action metrics: `spark_total_deposits_usd`, `spark_total_liquidations_usd`, +`spark_total_new_debt_usd` and `spark_total_repayments_usd` + +```graphql explorer +{ + getMetric(metric: "spark_total_new_debt_usd") { + timeseriesDataJson( + slug: "multi-collateral-dai" + from: "2024-01-10T00:00:00Z" + to: "2024-01-12T00:00:00Z" + includeIncompleteData: true + interval: "1h" + ) + } +} +``` + +Total supplied/borrowed metrics: `spark_total_supplied<_usd>` and +`spark_total_borrowed<_usd>` + +```graphql explorer +{ + getMetric(metric: "spark_total_supplied") { + timeseriesDataJson( + slug: "wrapped-bitcoin" + from: "2023-04-01T00:00:00Z" + to: "2023-04-07T00:00:00Z" + includeIncompleteData: true + interval: "5m" + ) + } +} +``` + +Protocol total supplied/borrowed metrics: `spark_protocol_total_supplied_usd` and +`spark_protocol_total_borrowed_usd` + +```graphql explorer +{ + getMetric(metric: "spark_protocol_total_supplied_usd") { + timeseriesDataJson( + slug: "maker" + from: "2023-04-01T00:00:00Z" + to: "2023-04-07T00:00:00Z" + includeIncompleteData: true + interval: "5m" + ) + } +} +``` + +APY metric: `spark_supply_apy` and `spark_borrow_apy` + +```graphql explorer +{ + getMetric(metric: "spark_supply_apy") { + timeseriesDataJson( + slug: "wrapped-bitcoin" + from: "2024-08-01T00:00:00Z" + to: "2024-08-07T00:00:00Z" + includeIncompleteData: true + interval: "5m" + ) + } +} +``` + +Daily active addresses: `spark_active_addresses` + +```graphql explorer +{ + getMetric(metric: "spark_active_addresses") { + timeseriesDataJson( + slug: "multi-collateral-dai" + from: "2024-01-01T00:00:00Z" + to: "2024-01-10T00:00:00Z" + includeIncompleteData: true + interval: "1d" + ) + } +} +``` + +Flashloan metrics: `spark_flashloan`, `spark_flashloan_usd` and `spark_total_flashloan_usd` + +```graphql explorer +{ + getMetric(metric: "spark_flashloan") { + timeseriesDataJson( + slug: "usd-coin" + from: "2026-01-01T00:00:00Z" + to: "2026-01-10T00:00:00Z" + includeIncompleteData: true + interval: "5m" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/m2-money-supply/index.mdx b/src/content/docs/resources/metrics/m2-money-supply/index.mdx new file mode 100644 index 000000000..4b8d5919c --- /dev/null +++ b/src/content/docs/resources/metrics/m2-money-supply/index.mdx @@ -0,0 +1,75 @@ +--- +title: M2 Money Supply +author: Filip +description: M2 Money Supply +datePublished: 2024-03-01 +dateModified: 2025-04-30 +--- + +## Description +The M2 money supply is a key economic indicator that measures the total amount of money in +circulation within an economy, including cash, checking deposits, and easily convertible near +money such as savings deposits, money market securities, and other time deposits. Unlike the +narrower M1, which focuses on liquid forms of money, M2 provides a broader view of the money +available in the economy, giving insights into potential inflationary pressures and economic +growth. Changes in the M2 money supply can influence interest rates, consumer spending, and +overall economic activity, making it an important tool for policymakers and economists. + + +M2 Money Supply metric: +* `money_supply` - M2 money supply + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Billions of Dollars + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +7-day interval + +--- + +## Latency + +FED announces data on a monthly basis + +--- + +## Available Assets + +Available for `m2-money` + +--- + +### SanAPI + +Available under name: `money_supply` + + +```graphql explorer +{ + getMetric(metric: "money_supply"){ + timeseriesDataJson( + slug: "m2-money" + from: "2024-01-01T00:00:00Z" + to: "2024-03-01T00:00:00Z" + interval: "7d") + } +} +``` diff --git a/src/content/docs/resources/metrics/makerdao-dai-savings-rate/index.mdx b/src/content/docs/resources/metrics/makerdao-dai-savings-rate/index.mdx new file mode 100644 index 000000000..02bb26829 --- /dev/null +++ b/src/content/docs/resources/metrics/makerdao-dai-savings-rate/index.mdx @@ -0,0 +1,106 @@ +--- +title: MakerDAO DAI Savings Rate +author: Filip +description: MakerDAO DAI Savings Rate +datePublished: 2024-03-01 +dateModified: 2025-04-30 +--- + +## Description +The MakerDAO DAI Savings Rate (DSR) is an interest rate paid to holders of the DAI stablecoin +for locking their DAI into smart contracts. It was introduced as a way to incentivize users to hold +DAI, thereby helping to maintain its stability and peg to the US dollar. + +The interest rate is determined by the MakerDAO community through governance votes and is paid out from +the stability fees collected from borrowers who generate DAI by locking up collateral. + + +MakerDAO DSR metrics: +* `makerdao_dsr_deposits` - Amount of DAI deposited into the smart contract +* `makerdao_dsr_withdrawals` - Amount of DAI withdrawn from the smart contract +* `makerdao_dsr_total_supplied` - Total supply of DAI in the smart contract +* `mcd_dsr` - Interest rate paid to DAI deposited in the DSR contract + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Amount of DAI + +`mcd_dsr` - percentage + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for `multi-collateral-dai` + +--- + +### SanAPI + +Deposit and withdraw metrics: `makerdao_dsr_deposits` and `makerdao_dsr_withdrawals` + +```graphql explorer +{ + getMetric(metric: "makerdao_dsr_deposits"){ + timeseriesDataJson( + slug: "multi-collateral-dai" + from: "2024-03-01T00:00:00Z" + to: "2024-03-03T00:00:00Z" + interval: "5m") + } +} +``` + +Total supplied metric: `makerdao_dsr_total_supplied` + +```graphql explorer +{ + getMetric(metric: "makerdao_dsr_total_supplied"){ + timeseriesDataJson( + slug: "multi-collateral-dai" + from: "2024-03-01T00:00:00Z" + to: "2024-03-03T00:00:00Z" + interval: "5m") + } +} +``` + +MakerDAO DAI savings rate metric: `mcd_dsr` + +```graphql explorer +{ + getMetric(metric: "mcd_dsr"){ + timeseriesDataJson( + slug: "multi-collateral-dai" + from: "2024-03-01T00:00:00Z" + to: "2024-03-03T00:00:00Z" + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/marketcap/index.mdx b/src/content/docs/resources/metrics/marketcap/index.mdx new file mode 100644 index 000000000..2760e77c9 --- /dev/null +++ b/src/content/docs/resources/metrics/marketcap/index.mdx @@ -0,0 +1,88 @@ +--- +title: Marketcap in USD +author: Ivan +description: Marketcap in USD +datePublished: 2023-06-02 +dateModified: 2025-04-30 +--- + + +## Definition + +The marketcap in USD is derived as the price of an asset in USD multiplied by the circulating supply of the same asset. + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +USD + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +Available assets for [marketcap_usd](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22marketcap_usd%22%29%7B%0A++++metadata%7B%0A++++++availableSlugs%0A++++%7D%0A++%7D%0A%7D) + +--- + +## SanAPI + +### Marketcap USD + +```graphql explorer +{ + getMetric(metric: "marketcap_usd") { + timeseriesDataJson( + slug: "ethereum" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +The full list of Marketcap in USD metrics is: + +
    + +Open Metrics List + +- marketcap_usd +- marketcap_usd_change_1d +- marketcap_usd_change_30d +- marketcap_usd_change_7d + +
    diff --git a/src/content/docs/resources/metrics/mean-coin-age/index.mdx b/src/content/docs/resources/metrics/mean-coin-age/index.mdx new file mode 100644 index 000000000..575a19a25 --- /dev/null +++ b/src/content/docs/resources/metrics/mean-coin-age/index.mdx @@ -0,0 +1,174 @@ +--- +title: Mean Coin Age +author: Ivan +description: The average age of all coins/tokens on a given blockchain +datePublished: 2019-10-04 +dateModified: 2025-04-30 +--- + + +## Definition + +Recall that the **[coin-age model](/metrics/details/stack-coin-age-model)** +allows us at each given point in time to assign age to each coin/token. + +There are two coin age defined metrics: + +- Mean Coin Age - The average age of all coins/tokens on the blockchain. +- Mean Dollar Invested Age - The average age of every dollar invested into the market cap of a coin. + +Mean Coin Age metrics are also available for different [time bounds](/metrics/details/timebound), which +compute the mean coin age for tokens moved at least once no longer than a specific number of days or years ago. + +### Example (Mean Coin age) + +Given there are 100 tokens in existence: + +- 50 of them have age 10 days +- 50 of them have age 20 days + +then the average coin age is: + +$$ +\frac{10 × 50 + 20 × 50}{100} = 15\;\text{(coin-days)} +$$ + +### Example (Mean Dollar Invested Age) + +Given there 100 tokens in existence: + +- 50 of them have age 10 days and the token's price was \$1 at that time +- 50 of them have age 20 days and the token's price was \$2 at that time + +then the mean dollar invested age is: + +$$ +\frac{10 × 50 + 20 × 50}{50 × \$1 + 50 × \$2} = \frac{1500}{150} = 10\;\text{(coin-dollar days)} +$$ + +> More technical definition and computation description can be found +> [here](/metrics/mean-coin-age/mean-coin-age-technical) + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +- Coin Age in Days +- Coin Dollar Age in Days + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Timebound + +[Timebound Metrics](/metrics/details/timebound) + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +- Mean Coin Age is available for [these + assets]() +- Mean Dollar Invested Age is available for [these assets]() + +> Note: timebound Mean Age metrics are available for [these +> assets]() + +--- + +## SanAPI + +Available under the `mean_age` and `mean_age_` names. + +```graphql explorer +{ + getMetric(metric: "mean_age") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-13T00:00:00Z" + to: "2020-01-18T00:00:00Z" + interval: "1d" + ) + } +} +``` + +--- + +Available under the `mean_dollar_invested_age` and +`mean_dollar_invested_age_` names. + +```graphql explorer +{ + getMetric(metric: "mean_dollar_invested_age") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-13T00:00:00Z" + to: "2020-01-18T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +
    + +Mean coin age metrics + +- mean_age +- mean_age_90d +- mean_age_180d +- mean_age_365d +- mean_age_2y +- mean_age_3y +- mean_age_5y + +
    + +
    + +Mean dollar invested age metrics + +- mean_dollar_invested_age +- mean_dollar_invested_age_90d +- mean_dollar_invested_age_180d +- mean_dollar_invested_age_365d +- mean_dollar_invested_age_2y +- mean_dollar_invested_age_3y +- mean_dollar_invested_age_5y +- mean_dollar_invested_age_change_1d +- mean_dollar_invested_age_change_7d +- mean_dollar_invested_age_change_30d + +
    diff --git a/src/content/docs/resources/metrics/mean-coin-age/mean-coin-age-technical.mdx b/src/content/docs/resources/metrics/mean-coin-age/mean-coin-age-technical.mdx new file mode 100644 index 000000000..fc2106252 --- /dev/null +++ b/src/content/docs/resources/metrics/mean-coin-age/mean-coin-age-technical.mdx @@ -0,0 +1,171 @@ +--- +title: Mean Coin Age - Technical Details +author: Tzanko Matev +datePublished: 2019-10-04 +dateModified: 2021-11-22 +--- + +## Definition + +Recall that a **[coin-age model](/metrics/details/stack-coin-age-model)** allows +us at each given point in time to split all coins into segments where each +segment $x$ has an assigned amount $v_x$ and creation timestamp $ot_x$. The set +of all segments that exist at time $t$ will be denoted by $S_t$. + +Then, the formula for computing the mean coin age $MCA(t)$ is: + +$$ +MCA(t) = \frac{\sum_{x\in S_t} (t-ot_x)v_x}{\sum_{x\in S_t}v_x} +$$ + +Let us call the quantity in the numerator the **total coin-age** and denote it +by $TCA(t)$. The quantity in the denominator is the _total supply_ existing at +time $t$. We will call it $TS(t)$ + +## Total supply + +We can already compute the coin circulation. For each period $p$, we can +calculate the number of coins that have been active in the last $p$ days. Let us +denote this amount by $Circ_p(t)$. + +### Lemma + +$$ +TS(t) = Circ_p(t) +$$ + +for $p$ sufficiently large. More precisely, the equality holds if $p$ is larger +than the entire life of the coin. + +## Total age + +Let's focus on computing the total age of each coin. We have + +$$ +TCA(t) = t\left(\sum_{x\in S_t} v_x\right) - \sum_{x\in S_t} ot_x = TS(t)t - +TCT(t) +$$ + +We call the second summand the **total creation timestamp**. If we divide it by +the token supply, we will get the **mean creation timestamp** $MCT(t)$. Hence we +have the following formula: + +$$ +MCA(t) = t - MCT(t) +$$ + +In other words, the mean coin-age is equal to the current timestamp minus the +mean creation timestamp. + +## Total creation timestamp + +According to the theory that we have already developed, we can efficiently +compute the total creation timestamp. It is the metric $M_f(t)$ associated to +the function $f(x,t) = ot_x v_x$. + +### Lemma + +Let $E$ denote the event stream associated with the coin-age model $S$. Then + +$$ +\Delta TCT(t) = \sum_{e\in E \\ t_e = t} \sigma_e ot_x v_e +$$ + +The SQL statement for computing the real-time total creation timestamp delta is + +```sql +SELECT + asset_id, + dt, + sum(sigma*odt*amount) as value +FROM {events} +GROUP BY asset_id, dt +``` + +In practice, we don't use the real-time delta functions. Instead, we use daily +or five-minute deltas. We must construct those functions so that the value of +the daily TCT is the same as the value of the real-time TCT at the start of each +day. For the five-minute analog, a similar condition must hold. We have: + +### Lemma + +We compute the daily TCT delta using the following SQL: + +```sql +SELECT + asset_id, + toStartOfDay(dt + 86400) AS daily_dt, + sum(sigma*odt*amount) AS value +FROM {events} +GROUP BY asset_id, daily_dt +``` + +We compute the five-minute TCT delta using the following SQL: + +```sql +SELECT + asset_id, + toStartOfFiveMinutes(dt + 300) AS five_minute_dt, + sum(sigma*odt*amount) AS value +FROM {events} +GROUP BY asset_id, daily_dt +``` + +## Mean age computation + +From the facts above, we can easily derive the mean coin-age. We first compute +the daily or five-minute $\Delta TCT$. Then we use a cumulative sum to calculate +the daily five-minute total creation timestamp $TCT$. From that, we can +calculate the mean creation timestamp as a _composite metric_ with the SQL +formula: + +```sql +total_creation_timestamp/circulation_20y +``` + +Finally, we can compute the mean coin-age as a composite metric with the SQL +formula: + +```sql +dt - mean_creation_timestamp +``` + +## Relation to age consumed + +There is a relation between the total creation timestamp delta and the age +consumed. The formula computes the age consumed (or coin-days destroyed): + +$$ +AC(t) = \sum_{e\in E \\ t_e = t} -\sigma_e (t-ot_e)v_e +$$ + +So you have + +$$ +AC(t) = \Delta TCT(t) - t\sum_{e\in E \\ t_e=t} \sigma_e v_e +$$ + +The latter summand is the timestamp multiplied by the total supply delta at the +time $t$. If we choose a sufficiently large period $p$, it is also equal to +$\Delta Circ_p(t)$. So if we have already computed the age consumed, we can +compute the delta total creation timestamp as a composite metric: + +```sql +age_consumed + dt * circulation_delta_20y +``` + +However, our age consumed metric is measured in days. If we want the delta TCT +to be measured in seconds the formula is + +```sql +age_consumed*86400 + dt*circulation_delta_20y +``` + +If we want to measure it in days, then we have: + +```sql +age_consumed + dt/86400 * circulation_delta_20y +``` + +In conclusion, once we have age_consumed and circulation, we can compute the +mean coin age using only cumulative sums and composite metrics. diff --git a/src/content/docs/resources/metrics/mean-realized-price/index.mdx b/src/content/docs/resources/metrics/mean-realized-price/index.mdx new file mode 100644 index 000000000..c38a11734 --- /dev/null +++ b/src/content/docs/resources/metrics/mean-realized-price/index.mdx @@ -0,0 +1,116 @@ +--- +title: Mean Realized Price +author: Filip +description: Mean Realized Price Metrics +datePublished: 2024-04-01 +dateModified: 2025-04-30 +--- + + +## Definition + +The Mean Realized Price metric calculates the average price at which tokens were obtained. +It provides insights into the average profitability of token transactions by considering the +[Realized Value](/metrics/realized-value) against the [Total Circulating](/metrics/circulation) +tokens. It can be understood as the price level that acts as support or resistance. + +$$ +\text{mean\_realized\_price\_usd} = \frac{\text{realized\_value\_usd}}{\text{circulation}} +$$ + +Mean Realized Price metric is also available for different [time bounds](/metrics/details/timebound), which +computes the mean realized price for tokens moved at least once no longer than a specific number of days or years ago. + +### Bottom Indicator Use Case + +![Mean Realized Price](mean-realized-price.png) + +The Mean Realized Price carries considerable weight for crypto investors. In times of market instability, +it serves as a crucial indicator. If the price falls below the Mean Realized Price, it suggests that, +on average, token holders are facing unrealized losses. These periods are highlighted on the chart +above (red rectangles), and investors view them as opportunities to accumulate more tokens. + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Timebound + +[Timebound Metrics](/metrics/details/timebound) available + +--- + +## Measuring Unit + +USD + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these assets]() + +> Note: `mean_realized_price_usd` metric and all timebound realized value metrics are +> available for the same set of assets. + +--- + +## SanAPI + +Available under the `mean_realized_price_usd` and `mean_realized_price_usd_` names. + +```graphql explorer +{ + getMetric(metric: "mean_realized_price_usd") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +
    + +Mean Realized Price metrics + +- mean_realized_price_usd +- mean_realized_price_usd_1d +- mean_realized_price_usd_7d +- mean_realized_price_usd_30d +- mean_realized_price_usd_60d +- mean_realized_price_usd_90d +- mean_realized_price_usd_180d +- mean_realized_price_usd_365d +- mean_realized_price_usd_2y +- mean_realized_price_usd_3y +- mean_realized_price_usd_5y +- mean_realized_price_usd_10y + +
    diff --git a/src/docs/metrics/mean-realized-price/mean-realized-price.png b/src/content/docs/resources/metrics/mean-realized-price/mean-realized-price.png similarity index 100% rename from src/docs/metrics/mean-realized-price/mean-realized-price.png rename to src/content/docs/resources/metrics/mean-realized-price/mean-realized-price.png diff --git a/src/docs/metrics/mvrv/MVRV_difference.png b/src/content/docs/resources/metrics/mvrv/MVRV_difference.png similarity index 100% rename from src/docs/metrics/mvrv/MVRV_difference.png rename to src/content/docs/resources/metrics/mvrv/MVRV_difference.png diff --git a/src/docs/metrics/mvrv/Sanbase.png b/src/content/docs/resources/metrics/mvrv/Sanbase.png similarity index 100% rename from src/docs/metrics/mvrv/Sanbase.png rename to src/content/docs/resources/metrics/mvrv/Sanbase.png diff --git a/src/docs/metrics/mvrv/Sangraphs.png b/src/content/docs/resources/metrics/mvrv/Sangraphs.png similarity index 100% rename from src/docs/metrics/mvrv/Sangraphs.png rename to src/content/docs/resources/metrics/mvrv/Sangraphs.png diff --git a/src/content/docs/resources/metrics/mvrv/index.mdx b/src/content/docs/resources/metrics/mvrv/index.mdx new file mode 100644 index 000000000..19e5a2e17 --- /dev/null +++ b/src/content/docs/resources/metrics/mvrv/index.mdx @@ -0,0 +1,279 @@ +--- +title: MVRV - Market Value To Realized Value +author: Santiment Team +description: MVRV (Market Value to Realized Value) ratio shows the average profit or loss of all the coins currently in circulation according to the current price. +datePublished: 2019-11-21 +dateModified: 2025-10-28 +--- + + + + +## Definition + +MVRV (Market Value to Realized Value) ratio is an asset's market capitalization divided by realized capitalization, where realized capitalization is every token multiplied by its acquisition price. + +## MVRV Ratio Overview + +MVRV shows the ratio between the current price and the average price of every token acquired. An increase in the ratio shows us how much unrealized profit the market is sitting on. As the ratio increases, more market participants become willing sellers. The value of MVRV gives an idea about the average profit of holders across different durations. + +## How MVRV Measured + +The MVRV Ratio is used as an on-chain indicator for the purpose of studying aggregate investor behaviors as price moves to/from their cost basis. It can be considered as a mean reversion style model, where the Realized Cap (aggregate market cost basis) functions as the mean and MVRV measures deviations from this mean. + +The value of an asset's given MVRV gives an idea of how much overvalued or undervalued an asset is based on short, mid, or long-term timeframes. + +An MVRV value of 100% (or 2.0) means that if all holders sell their coins/tokens at the current price, they will generate a 100% (x2) profit on average. The more this ratio increases, the more likely traders have historically demonstrated their willingness to sell. + +On the other side of the spectrum, a negative MVRV value indicates that the asset is "undervalued" on average. This means that if all coins were sold, most traders will be realizing losses at the asset's current price. + +MVRV values (regardless of which timeframe) will hover around 0%, assuming the asset has had enough time to normalize after its introduction as a publicly-traded asset. + +Overall, MVRV shows the average profit/loss of all the coins currently in circulation +given the current price. + +We need to define two terms: + +- `MV` as in `Market Value` refers to the well-known capitalization. The second + part is the +- `RV` as in [Realized Value](/metrics/realized-value). It is an alternative to + the Market Value where instead of the current price, every coin/token is + multiplied by its acquisition price. + +The definition of MVRV is: + +$$ +MVRV = \frac{MV}{RV} +$$ + +## Usage Guide + +The MVRV ratio allows traders to gauge both actual profitability vs. loss on the network, as well as gauge the inherent degree of fear and greed that comes with it. Assets have different extremes in terms of how far a positive or negative fluctuation in its MVRV can go. And if we measure the coin's current MVRV vs. its lowest and highest points, it's usually fair to make educated presumptions of when price tops and bottoms are forming. + +### MVRV Bitcoin chart + + + +### High MVRV Values ( > 2 ) + +MVRV value of 2 means that if all holders sell their coins/tokens at the current price, they will generate an x2 profit on average. + +### Low MVRV Values ( < 1 ) + +If the MVRV value is between 0 and 1, then the market is "undervalued" on average, meaning most people will realize losses if they all sell their holdings at the current price. + +## Timebound + +[Timebound Metrics](/metrics/details/timebound) available. + +The timebound metrics can help exclude the inactive addresses. These metrics are +computed the same way as the MVRV metric, with the only difference that they +take into account only the coins/tokens that have moved in the desired time +range. Examples: `mvrv_usd_365d` is computed on the coins/tokens that moved at +least once in the past 365 days. `mvrv_usd_60d` is computed by taking only the +coins/tokens that moved at least once in the past 60 days. + +Comparing timebound MVRV values of different time ranges can clarify how much +profit/loss long-term and short-term holders can realize. + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +### MVRV Long/Short Difference + +MVRV Long/Short Difference is defined as: + +$$ +\text{mvrv\_usd\_365d} - \text{mvrv\_usd\_60d} +$$ + +Negative values mean that short-term holders will realize higher profits +than long-term holders if they sell at a price at this moment. Positive values +show the opposite. + +During strong and long bull runs, this metric tends to grow, and during bear +markets it is decreasing. The rationale is that during strong bull runs, the +long term holders are determining when the bull run will end when they start +selling, while during bear markets, the long term holders are at a loss on average +and the short term holders manage to realize profits + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Ratio + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +All available assets have [Daily +Intervals](/metrics/details/frequency#daily-frequency) A subset of the available +assets that consists of some of the bigger assets have [Five-Minute +Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +The daily interval MVRV metrics are available for [these +assets]() + +The 5-minute MVRV metrics are available for [these +assets]() + +--- + +## SanAPI + +The daily metrics are available under the `mvrv_usd` name under the +`mvrv_usd_` name for the timebound metrics. The 5-minute interval +metrics are available under the `mvrv_usd_intraday` name under the +`mvrv_usd_intraday_` name for the timebound metrics. + +Example of query for **mvrv_usd**: + +```graphql explorer +{ + getMetric(metric: "mvrv_usd") { + timeseriesDataJson( + slug: "santiment" + from: "2019-01-01T00:00:00Z" + to: "2019-09-01T00:00:00Z" + interval: "7d" + ) + } +} +``` + +Example of query for **mvrv_usd_intraday**: + +```graphql explorer +{ + getMetric(metric: "mvrv_usd_intraday") { + timeseriesDataJson( + slug: "bitcoin" + from: "utc_now-90d" + to: "utc_now-30d" + interval: "3d" + ) + } +} +``` + +Example of query for **timebound MVRV**: + +```graphql explorer +{ + getMetric(metric: "mvrv_usd_7d") { + timeseriesDataJson( + slug: "santiment" + from: "2019-01-01T00:00:00Z" + to: "2019-09-01T00:00:00Z" + interval: "7d" + ) + } +} +``` + +Example of query for **MVRV Long/Short Difference** + +```graphql explorer +{ + getMetric(metric: "mvrv_long_short_diff_usd") { + timeseriesDataJson( + slug: "santiment" + from: "2019-01-01T00:00:00Z" + to: "2019-09-01T00:00:00Z" + interval: "7d" + ) + } +} +``` + +## Full list of metrics + +The full list of MVRV metrics is: + +
    + +Open Metrics List + +- mvrv_long_short_diff_usd +- mvrv_usd +- mvrv_usd_10y +- mvrv_usd_180d +- mvrv_usd_180d_change_1d +- mvrv_usd_180d_change_30d +- mvrv_usd_180d_change_7d +- mvrv_usd_1d +- mvrv_usd_2y +- mvrv_usd_30d +- mvrv_usd_30d_change_1d +- mvrv_usd_30d_change_30d +- mvrv_usd_30d_change_7d +- mvrv_usd_365d +- mvrv_usd_365d_change_1d +- mvrv_usd_365d_change_30d +- mvrv_usd_365d_change_7d +- mvrv_usd_3y +- mvrv_usd_5y +- mvrv_usd_60d +- mvrv_usd_60d_change_1d +- mvrv_usd_60d_change_30d +- mvrv_usd_60d_change_7d +- mvrv_usd_7d +- mvrv_usd_7d_change_1d +- mvrv_usd_7d_change_30d +- mvrv_usd_7d_change_7d +- mvrv_usd_90d +- mvrv_usd_90d_change_1d +- mvrv_usd_90d_change_30d +- mvrv_usd_90d_change_7d +- mvrv_usd_change_1d +- mvrv_usd_change_30d +- mvrv_usd_change_7d +- mvrv_usd_intraday +- mvrv_usd_intraday_10y +- mvrv_usd_intraday_180d +- mvrv_usd_intraday_1d +- mvrv_usd_intraday_2y +- mvrv_usd_intraday_30d +- mvrv_usd_intraday_365d +- mvrv_usd_intraday_3y +- mvrv_usd_intraday_5y +- mvrv_usd_intraday_60d +- mvrv_usd_intraday_7d +- mvrv_usd_intraday_90d +- mvrv_usd_z_score + +
    diff --git a/src/docs/metrics/network-growth/aragon-network-growth.png b/src/content/docs/resources/metrics/network-growth/aragon-network-growth.png similarity index 100% rename from src/docs/metrics/network-growth/aragon-network-growth.png rename to src/content/docs/resources/metrics/network-growth/aragon-network-growth.png diff --git a/src/content/docs/resources/metrics/network-growth/index.mdx b/src/content/docs/resources/metrics/network-growth/index.mdx new file mode 100644 index 000000000..7b15841bd --- /dev/null +++ b/src/content/docs/resources/metrics/network-growth/index.mdx @@ -0,0 +1,111 @@ +--- +title: Network Growth +author: Santiment Team +description: Amount of addresses that transferred a given token for the first time +datePublished: 2019-11-21 +dateModified: 2025-10-28 +--- + + + + +## Definition + +The amount of new addresses that transferred a given token for the first +time. + +This chart illustrates user adoption over time and can be used to +identify when the project is gaining or losing traction. + +![tether network growth](aragon-network-growth.png) + +Here's a Network Growth graph for +[Aragon](https://app.santiment.net/projects/aragon), which lets anyone create +and manage a decentralized organization on Ethereum. + +UP until December of 2017, the Aragon network grew by 85-750 new addresses each +day, and the price loyally followed. + +Then, right around the start of 2018, the network growth slowly began to +throttle. It indicated that the Aragon user base was already quite deep, and +wouldn't be able to sustain future price growth. + +What happened since speaks for itself. + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Number of addresses + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +## SanAPI + +Available under the `network_growth` name. + +```graphql explorer +{ + getMetric(metric: "network_growth") { + timeseriesDataJson( + slug: "santiment" + from: "2019-01-01T00:00:00Z" + to: "2019-09-01T00:00:00Z" + interval: "7d" + ) + } +} +``` + +## Full list of metrics + +The full list of Network Growth metrics is: + +
    + +Open Metrics List + +- network_growth +- network_growth_change_1d +- network_growth_change_30d +- network_growth_change_7d + +
    + diff --git a/src/content/docs/resources/metrics/network-profit-loss/index.mdx b/src/content/docs/resources/metrics/network-profit-loss/index.mdx new file mode 100644 index 000000000..40dd45f72 --- /dev/null +++ b/src/content/docs/resources/metrics/network-profit-loss/index.mdx @@ -0,0 +1,90 @@ +--- +title: Network Profit Loss +author: Santiment Team +description: Average profit or loss of all coins that change addresses. +datePublished: 2021-07-23 +dateModified: 2025-04-30 +--- + + +## Definition + +Network Profit/Loss (NPL for short) computes the average profit or loss of all coins that change addresses daily. For each coin that moves on-chain, NPL takes the price at which it was last moved and assumes this to be its acquisition price. Once it changes addresses again, NPL assumes the coin was sold. + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Amount in dollars + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-freqency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +## SanAPI + +Example of query for **network_profit_loss**: + +```graphql explorer +{ + getMetric(metric: "network_profit_loss") { + timeseriesDataJson( + slug: "santiment" + from: "2021-01-01T00:00:00Z" + to: "2021-02-01T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +The full list of Network Profit Loss metrics is: + +
    + +Open Metrics List + +- network_profit_loss +- network_profit_loss_change_1d +- network_profit_loss_change_30d +- network_profit_loss_change_7d + +
    + diff --git a/src/content/docs/resources/metrics/new-deployed-contracts/index.mdx b/src/content/docs/resources/metrics/new-deployed-contracts/index.mdx new file mode 100644 index 000000000..fd4ca6e8d --- /dev/null +++ b/src/content/docs/resources/metrics/new-deployed-contracts/index.mdx @@ -0,0 +1,70 @@ +--- +title: New Deployed Contracts +author: Filip +description: New Deployed Contracts Metric +datePublished: 2025-09-01 +dateModified: 2025-09-22 +--- + +## Description +New Deployed Contracts tracks the number of new smart contracts deployed on the Solana +network. This metric helps monitor developer activity and network growth over time. +A higher value may indicate increased adoption and ecosystem expansion. + +New Deployed Contracts Metric: +* `new_deployed_contracts` - The number of new smart contracts deployed + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Number of new contracts + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for `solana` + +--- + +### SanAPI + +Available under name: `new_deployed_contracts` + + +```graphql explorer +{ + getMetric(metric: "new_deployed_contracts"){ + timeseriesDataJson( + slug: "solana" + from: "2025-09-01T00:00:00Z" + to: "2025-09-07T00:00:00Z" + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/nft-collection-holders-balance/index.mdx b/src/content/docs/resources/metrics/nft-collection-holders-balance/index.mdx new file mode 100644 index 000000000..3fc2d8355 --- /dev/null +++ b/src/content/docs/resources/metrics/nft-collection-holders-balance/index.mdx @@ -0,0 +1,69 @@ +--- +title: NFT Collection Holders Balance +author: Filip +description: Average balance of all holders of NFT collection +datePublished: 2022-06-17 +dateModified: 2025-04-30 +--- +## Definition + +This metric represents average balance of collection holders +(e.g. average balance of `bored apes` holders is $10M). + +Balance of holders is calculated based on their ownership of NFTs +(sum of values (in eth and usd) of all NFTs they have). + + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Amount in USD + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +`ethereum` + +--- + +## SanAPI + +`nft_collection_holders_balance`: + +```graphql explorer +{ + getMetric(metric: "nft_collection_holders_balance") { + timeseriesDataJson( + selector: { address: "0xed5af388653567af2f388e6224dc7c4b3241c544" } + from: "2022-05-01T00:00:00Z" + to: "2022-05-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/nft-collection-price/index.mdx b/src/content/docs/resources/metrics/nft-collection-price/index.mdx new file mode 100644 index 000000000..0418fe955 --- /dev/null +++ b/src/content/docs/resources/metrics/nft-collection-price/index.mdx @@ -0,0 +1,93 @@ +--- +title: NFT Collection Price +author: Filip +description: Daily minimum, maximum, average price in eth and usd, and daily trade count for NFT collections and tokens +datePublished: 2022-06-17 +dateModified: 2025-04-30 +--- +## Definition + +NFT Collection price is a set of metrics that represent prices and number of trades +for NFT collections and tokens. Based on the collection address and interval, users can +fetch data for minimum, maximum and average prices in ETH and USD for NFT collection +with that address. Also, they can fetch number of trades for some NFT collection. +Based on the collection address and token ID, users can fetch all the prices for that +NFT token. + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +* Price metrics - amount USD and ETH +* Trade count metrics - amount of trades + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +* NFT collection: [Daily Intervals](/metrics/details/frequency#daily-frequency) +* NFT tokens: [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) + + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +`ethereum` and `weth` + +--- + +## SanAPI + +The following metrics are available: +- nft_collection_min_price +- nft_collection_max_price +- nft_collection_avg_price +- nft_collection_min_price_usd +- nft_collection_max_price_usd +- nft_collection_avg_price_usd +- nft_collection_trades_count + +```graphql explorer +{ + getMetric(metric: "nft_collection_min_price") { + timeseriesDataJson( + selector: { address: "0xed5af388653567af2f388e6224dc7c4b3241c544" } + from: "2022-05-01T00:00:00Z" + to: "2022-05-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +NFT collection trade count - `nft_collection_trades_count`: + +```graphql explorer +{ + getMetric(metric: "nft_collection_trades_count") { + timeseriesDataJson( + selector: { address: "0xed5af388653567af2f388e6224dc7c4b3241c544" } + from: "2022-05-01T00:00:00Z" + to: "2022-05-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/nft-market-volume/index.mdx b/src/content/docs/resources/metrics/nft-market-volume/index.mdx new file mode 100644 index 000000000..49cb7b183 --- /dev/null +++ b/src/content/docs/resources/metrics/nft-market-volume/index.mdx @@ -0,0 +1,68 @@ +--- +title: NFT Market Volume/Count +author: Filip +description: Daily market volume in ETH, and daily market count for NFT collections +datePublished: 2022-07-12 +dateModified: 2025-04-30 +--- +## Definition + +NFT Market Volume/Count is metric which calculates market count and the market volume +in ETH for NFT collections. Assumption is that when the majority of the volume is buying NFTs, the market +is in a euphoric state. On the other hand, when NFT owners accept many orders, +the market is depressed. + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +* Volume metric - amount in ETH +* Count metric - amount of trades + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +* NFT collection: [Daily Intervals](/metrics/details/frequency#daily-frequency) + + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +`ethereum` and `weth` + +--- + +## SanAPI + +NFT collection buy/sell market volume (count) - `nft_market_volume` (`nft_market_count`): + +```graphql explorer +{ + getMetric(metric: "nft_market_volume") { + timeseriesDataJson( + selector: { address: "0xed5af388653567af2f388e6224dc7c4b3241c544" } + from: "2022-05-01T00:00:00Z" + to: "2022-05-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/nft-network-profit-loss/index.mdx b/src/content/docs/resources/metrics/nft-network-profit-loss/index.mdx new file mode 100644 index 000000000..1e5ece7f8 --- /dev/null +++ b/src/content/docs/resources/metrics/nft-network-profit-loss/index.mdx @@ -0,0 +1,83 @@ +--- +title: NFT Network Profit Loss +author: Filip +description: NFT network realized profit/loss for all NFTs and for each NFT collection separately +datePublished: 2022-06-29 +dateModified: 2025-04-30 +--- + +## Definition + +NFT Network Profit/Loss computes the average profit or loss of all NFTs +that change addresses. +This metric represents the average profit or loss of each +NFT collection that is being transacted on a given day. + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Amount in USD or ETH + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +- NFT network: [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) +- NFT collection: [Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +`ethereum` + +--- + +## SanAPI + +NFT Network Profit Loss - `nft_network_profit_loss<_usd>`: + +```graphql explorer +{ + getMetric(metric: "nft_network_profit_loss") { + timeseriesDataJson( + slug: "ethereum" + from: "2022-01-01T00:00:00Z" + to: "2022-01-10T00:00:00Z" + interval: "1d" + ) + } +} +``` + +NFT Collection Profit Loss - `nft_collection_profit_loss_usd`: + +```graphql explorer +{ + getMetric(metric: "nft_collection_profit_loss_usd") { + timeseriesDataJson( + selector: { address: "0xed5af388653567af2f388e6224dc7c4b3241c544" } + from: "2022-01-01T00:00:00Z" + to: "2022-01-10T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/nft-trade-volume-usd/index.mdx b/src/content/docs/resources/metrics/nft-trade-volume-usd/index.mdx new file mode 100644 index 000000000..813a86bfe --- /dev/null +++ b/src/content/docs/resources/metrics/nft-trade-volume-usd/index.mdx @@ -0,0 +1,99 @@ +--- +title: NFT Trade Volume USD +author: Katsiaryna +description: Total NFT trades volume made on a particular marketplace in USD per day, NFT volume in USD made by NFT whales and NFT volumen in USD made by retail users on a particular marketplpace +datePublished: 2024-04-09 +dateModified: 2025-04-30 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + +## Definition + +NFT volume is represented through several metrics: + +- **NFT trade volume USD** denotes the total value of transactions in US dollars involving non-fungible tokens (NFTs) within a specific marketplace (owner) during the measurement period. This metric is calculated based on the value of the base assets transferred for acquiring or trading NFTs. + +- **NFT whale trade volume USD** quantifies the total value of trades executed by significant investors, commonly referred to as "whales," within the NFT market, measured in US dollars. This metric highlights the impact of large-scale investors on the overall trading volume and market dynamics of NFTs. + +- **NFT retail trade volume USD** represents the total value of transactions conducted by individual retail investors, as opposed to institutional or large-scale investors, within the NFT market, measured in US dollars. It offers insight into the participation and spending behavior of individual, non-professional traders in the NFT ecosystem. + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Amount of USD + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +- `nft_trade_volume_usd` : [available assets]() + +- `nft_retail_trade_volume_usd`: [available assets]() + +- `nft_whale_trade_volume_usd`: [available assets]() + +--- + +## Available Owners + +`blur` +`cryptopunks` +`foundation` +`looksrare` +`opensea` +`rarible` +`superrare` +`x2y2` + + + +The Polygon chain has been deprecated as of October 28th 2024 and is no longer supported. + + + +## SanAPI + +The following metrics are available: + +- nft_trade_volume_usd +- nft_retail_trade_volume_usd +- nft_whale_trade_volume_usd + +Example query: NFT trades volume on Opensea + +```graphql explorer +{ + getMetric(metric: "nft_trade_volume_usd") { + timeseriesDataJson( + selector: {slug: "weth", owner: "opensea"} + from: "2024-03-01T00:00:00Z" + to: "2024-03-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/nft-trades-count/index.mdx b/src/content/docs/resources/metrics/nft-trades-count/index.mdx new file mode 100644 index 000000000..29fef541c --- /dev/null +++ b/src/content/docs/resources/metrics/nft-trades-count/index.mdx @@ -0,0 +1,100 @@ +--- +title: NFT Trades Count +author: Katsiaryna +description: Total amount of NFT trades per day made on a particular marketplace, amount of NFT trades made by NFT whales and amount of NFT trades made by retail users made on a particular marketplace +datePublished: 2024-04-09 +dateModified: 2025-04-30 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + +## Definition + +NFT trades count is represented through the following metrics: + +- **NFT trades count** refers to the total number of trades involving non-fungible tokens (NFTs) within a specific marketplace (owner) during a given period. + +- **NFT whale trades count** represents the count of trades conducted by significant investors, often referred to as "whales," within the NFT market. These traders typically possess substantial holdings and can significantly influence market trends due to the scale of their transactions. + +- **NFT retail trades count** represents the total number of trades executed by individual retail investors, as opposed to institutional or large-scale investors, within the NFT market. It provides insights into the level of participation and trading activity among non-professional traders in the NFT ecosystem. + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Amount of trades + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +- `nft_trades_count` : [available assets]() + +- `nft_whale_trades_count` : [available assets]() + +- `nft_retail_trades_count` : [available assets]() + +--- + +## Available Owners + +`blur` +`cryptopunks` +`foundation` +`looksrare` +`opensea` +`rarible` +`superrare` +`x2y2` + + + +The Polygon chain has been deprecated as of October 28th 2024 and is no longer +supported. + + + +## SanAPI + +The following metrics are available: + +- nft_trades_count +- nft_whale_trades_count +- nft_retail_trades_count + +Example query: Amount of NFT trades on Opensea + +```graphql explorer +{ + getMetric(metric: "nft_trades_count") { + timeseriesDataJson( + selector: {slug: "ethereum", owner: "opensea"} + from: "2024-03-01T00:00:00Z" + to: "2024-03-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/nvt/index.mdx b/src/content/docs/resources/metrics/nvt/index.mdx new file mode 100644 index 000000000..9986ee84f --- /dev/null +++ b/src/content/docs/resources/metrics/nvt/index.mdx @@ -0,0 +1,139 @@ +--- +title: NVT +author: Santiment Team +description: The ratio between marketcap and transaction volume or circulation +datePublished: 2019-11-21 +dateModified: 2025-04-30 +--- + +## Definition + +The typical formula for NVT is the following: + +`NVT = Daily Market Cap / Daily Transaction Volume` + +Santiment provides an alternative formula for NVT: + +`NVT = Daily Market Cap / Daily Circulation` + +Since daily circulation is zero at the beginning of each day, NVT based on it +would have a spike at the day beginning, we solve it with rolling NVT metric +which uses rolling circulation for last 24 hours and is computed using +following formula: + +`NVT = Intraday Market Cap / Rolling Circulation` + +For some assets there is a more prceise metric called Circulation NVT, +which takes 24 hour rolling daily circulation instead of daily. +The `Network Value-to-Transaction` (NVT) ratio is an asset valuation metric +similar to the [P/E +ratio](https://www.investopedia.com/terms/p/price-earningsratio.asp) +traditionally used in equity markets to gauge a stock's growth potential. + +The P/E or `Price-to-Earnings` ratio is calculated by dividing the +company's current price per share with its earnings per share. A high +P/E could mean a stock's price is high relative to its earnings and +therefore possibly overvalued. Conversely, a low P/E might indicate that +the current stock price is low relative to earnings and possibly +undervalued. + +As crypto assets are not companies, their earnings are not known , so +Transaction Volume is often used as a proxy for the blockchain's +underlying value. + +Since Transaction Volume gets rather noisy and often includes duplicate +transactions (sending 10 ETH to a deposit address which then sends them to the +exchange hot wallet counts as 20 ETH Transaction Volume even though it's the +same 10 ETH being transacted), it's not an ideal measure of a network's economic +activity. That's why at Santiment we calculate NVT using Daily Trx Volume, but +also by using [Circulation](/metrics/circulation) instead, which filters out +excess transactions and provides a cleaner overview of a blockchain's daily +transaction throughput. You'll find both approaches plotted on the graph and can +choose which one you prefer. + +As with P/E, a high NVT indicates that an asset's network valuation is +higher than the value being transmitted on the network. In other words, +the network is expensive relative to how much value it moves, signaling +a potentially overvalued asset. + +Conversely, a low NVT denotes an asset that is cheaper per unit of +on-chain transaction volume, signaling a potentially undervalued asset. + +NVT is often used as a long-term indicator of an asset's price trends, +rather than a day-to-day valuation metric. + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Ratio + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five Minute Intervals](/metrics/details/frequency#five-minute-frequency) and [Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +- NVT using 1-day circulation is available for [these + assets]() + +- NVT Transaction Volume is available for [these + assets]() + +--- + +## SanAPI + +- `nvt` - NVT using 1 day Circulation. Computed with daily frequency. +- `nvt_5min` - Same as `nvt`, but computed with 5-minute frequency. +- `nvt_transaction_volume` - NVT using Transaction Volume. Computed with daily frequency. + +```graphql explorer +{ + getMetric(metric: "nvt") { + timeseriesDataJson( + slug: "santiment" + from: "utc_now-90d" + to: "utc_now-60d" + interval: "1d" + ) + } +} +``` + +--- + +```graphql explorer +{ + getMetric(metric: "nvt_transaction_volume") { + timeseriesDataJson( + slug: "santiment" + from: "utc_now-90d" + to: "utc_now-60d" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/open-interest/index.mdx b/src/content/docs/resources/metrics/open-interest/index.mdx new file mode 100644 index 000000000..9b3aefc53 --- /dev/null +++ b/src/content/docs/resources/metrics/open-interest/index.mdx @@ -0,0 +1,122 @@ +--- +title: Open Interest +author: Ante +description: Total number of outstanding or open contracts in the market. +datePublished: 2023-11-28 +dateModified: 2025-05-24 +--- + +## Definition +Open interest represents the total number of outstanding contracts that have not been settled by an offsetting trade. For example, if trader A buys a futures contract from trader B, and neither has closed out their position, the open interest is one. +Traders can close out their positions by taking an opposing position (sell if they were long or buy if they were short). Changes in open interest can reflect whether traders are initiating new positions or closing existing ones. +There are three types of open interest metrics: +- Open interest per exchange - represents the sum of open interests of all contracts on given exchange for a given asset +- Open interest per settlement currency - represents the sum of open interests of all contracts for given settlement currency and asset +- Total open interest - represents the sum of open interests of all contracts for a given asset +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Dollars + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-minute Intervals](/metrics/details/frequency#five-minute-freqency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#funding-rates-latency) + +--- + +## Available Assets + +- Open interest per exchange is available for [these + assets]() + +- Open interest per settlement currency is available for [these + assets]() + +- Total open interest is available for [these + assets]() + +--- + +## Available Exchanges + +`Binance`, `Bitfinex`, `Bitget`, `Bitmex`, `Btcex`, `Bybit`, `Crosstower`, `Cryptodotcom`, `Deribit`, `Kraken`, `Okex` + +--- + +## SanAPI + +- Open interest per exchange is available under the `exchange_open_interest` name. +- Open interest per settlement currency is available under the `open_interest_per_settlement_currency` name. +- Total open interest is available under the `total_open_interest` name. + +```graphql explorer +{ + getMetric(metric: "exchange_open_interest") { + timeseriesDataJson( + selector: { + slug: "ethereum" + owner: "binance" + } + from: "2023-11-27T00:00:00Z" + to: "2023-11-28T00:00:00Z" + interval: "5m" + ) + } +} +``` + +--- + +```graphql explorer +{ + getMetric(metric: "open_interest_per_settlement_currency") { + timeseriesDataJson( + selector: { + slug: "ethereum" + owner: "USDT" + } + from: "2023-11-27T00:00:00Z" + to: "2023-11-28T00:00:00Z" + interval: "5m" + ) + } +} +``` + +--- + +```graphql explorer +{ + getMetric(metric: "total_open_interest") { + timeseriesDataJson( + selector: { + slug: "ethereum" + } + from: "2023-11-27T00:00:00Z" + to: "2023-11-28T00:00:00Z" + interval: "5m" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/pendle-markets/index.mdx b/src/content/docs/resources/metrics/pendle-markets/index.mdx new file mode 100644 index 000000000..f7c7e1db9 --- /dev/null +++ b/src/content/docs/resources/metrics/pendle-markets/index.mdx @@ -0,0 +1,103 @@ +--- +title: Pendle Markets +author: Filip +description: Pendle Markets Metrics +datePublished: 2025-02-07 +dateModified: 2025-04-30 +--- + +## Description +Pendle Protocol is a decentralized finance (DeFi) platform that allows users to trade the future yield of tokenized +assets. By splitting yield-bearing tokens into principal and yield components, Pendle enables more flexible yield +management strategies. This opens up opportunities for users to hedge, speculate, or lock in fixed yields, which +isn't typically possible in traditional DeFi staking. The protocol operates on Ethereum and other blockchain networks, +leveraging smart contracts to ensure secure and efficient transactions. + +Pendle Markets metrics: +* `pendle_total_markets_tvl` - Total USD value locked across all Pendle markets for the selected asset +* `pendle_underlying_apy` - Annual percentage yield (APY) of the underlying asset +* `pendle_implied_apy` - Average implied yields of all markets for a selected asset, weighted by expiry date +* `pendle_yield_spread` - Difference between the implied APY and the underlying APY + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +* `pendle_total_markets_tvl`- Amount in USD +* `pendle_underlying_apy`, `pendle_implied_apy` and `pendle_yield_spread` - Percentage + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for `ethena-staked-usde` + +--- + +### SanAPI + +Pendle total markets TVL metric: `pendle_total_markets_tvl` + +```graphql explorer +{ + getMetric(metric: "pendle_total_markets_tvl"){ + timeseriesDataJson( + slug: "ethena-staked-usde" + from: "2025-01-01T00:00:00Z" + to: "2025-01-10T00:00:00Z" + interval: "1d") + } +} +``` + +APY metrics: `pendle_underlying_apy` and `pendle_implied_apy` + +```graphql explorer +{ + getMetric(metric: "pendle_implied_apy"){ + timeseriesDataJson( + slug: "ethena-staked-usde" + from: "2025-01-01T00:00:00Z" + to: "2025-01-10T00:00:00Z" + interval: "1d") + } +} +``` + +Yield spread metric: `pendle_yield_spread` + +```graphql explorer +{ + getMetric(metric: "pendle_yield_spread"){ + timeseriesDataJson( + slug: "ethena-staked-usde" + from: "2025-01-01T00:00:00Z" + to: "2025-01-10T00:00:00Z" + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/price-daa-divergence/index.mdx b/src/content/docs/resources/metrics/price-daa-divergence/index.mdx new file mode 100644 index 000000000..2c5ea3c6e --- /dev/null +++ b/src/content/docs/resources/metrics/price-daa-divergence/index.mdx @@ -0,0 +1,87 @@ +--- +title: Price and Daily Active Addresses Divergence +author: Santiment Team +datePublished: 2025-03-19 +dateModified: 2025-04-30 +--- + +## Description + +The DAA Divergence metric measures the difference between the number of daily active +addresses (DAA) and an asset's price movement. It helps identify whether network activity +is supporting the price trend or if there's a mismatch that could signal a potential +reversal. A positive divergence (higher DAA, lower price) might indicate undervaluation, +while a negative divergence (lower DAA, higher price) could suggest overvaluation. + +- `price_daa_divergence` - Divergence between an asset's price movement and daily active addresses +- `adjusted_price_daa_divergence` - Smoother version of `price_daa_divergence`, + averaging data over the last 365 days + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Divergence factor + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +### SanAPI + +Available under name: `price_daa_divergence` and `adjusted_price_daa_divergence` + +```graphql explorer +{ + getMetric(metric: "price_daa_divergence") { + timeseriesDataJson( + slug: "bitcoin" + from: "utc_now-90d" + to: "utc_now" + interval: "1d" + ) + } +} +``` + +```graphql explorer +{ + getMetric(metric: "adjusted_price_daa_divergence") { + timeseriesDataJson( + slug: "bitcoin" + from: "utc_now-90d" + to: "utc_now" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/price-volatility/index.mdx b/src/content/docs/resources/metrics/price-volatility/index.mdx new file mode 100644 index 000000000..f9ca8c071 --- /dev/null +++ b/src/content/docs/resources/metrics/price-volatility/index.mdx @@ -0,0 +1,86 @@ +--- +title: Price Volatility +author: Filip +description: Price fluctuations of different assets +datePublished: 2022-12-06 +dateModified: 2025-04-30 +--- + +## Description +Price volatility is used to describe price fluctuations of an asset. + +If we use $\mu$ and $\sigma$ to denote mean and standard deviation of asset prices, +then we define **Price Volatility** as: + +$$ +volatility(assetPrice) = \frac{\sigma(assetPrice)}{\mu(assetPrice)} +$$ + +Price volatility metrics are available for 4 different time periods +* `price_volatility_1d` - Price volatility for the last day +* `price_volatility_1w` - Price volatility for the last 7 days +* `price_volatility_2w` - Price volatility for the last 14 days +* `price_volatility_4w` - Price volatility for the last 28 days + +Examples of use cases: +* Traders seek volatile assets because they move more quickly and have larger price changes. Those price changes are both upward and downward. Keeping this in mind, a trader needs effective risk management in order to trade volatile assets profitably. +* On the other hand, some traders seek exposure to the assets that are the least volatile, and they might use this metric to identify those assets. + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Volatility + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +> Note: All metrics are available for the same set of assets + +--- + +### SanAPI + +Available under names: `price_volatility_1d`, `price_volatility_1w`, +`price_volatility_2w` and `price_volatility_4w` + + +```graphql explorer +{ + getMetric(metric: "price_volatility_1d"){ + timeseriesDataJson( + slug: "santiment" + from: "2022-11-01T00:00:00Z" + to: "2022-11-03T00:00:00Z" + interval: "5m") + } +} +``` diff --git a/src/content/docs/resources/metrics/price/index.mdx b/src/content/docs/resources/metrics/price/index.mdx new file mode 100644 index 000000000..5655506fa --- /dev/null +++ b/src/content/docs/resources/metrics/price/index.mdx @@ -0,0 +1,178 @@ +--- +title: Price Metrics +author: Santiment Team +description: Price in USD, BTC and USDT +datePublished: 2020-03-31 +dateModified: 2025-04-30 +--- + + +## Definition + +The following metrics are provided: + +- `price_usd` - Price in USD, sourced from a 3rd party provider +- `price_usd_5m` - The same as `price_usd`, but the data points are aligned at 5 minute intervals and + any gaps are filled with the last known value +- `price_btc` - Price in BTC +- `price_usdt` - Price in USDT +- Open-High-Close-Low Price in USD + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Amount in dollars/usdt/bitcoins + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +- Available assets for [price_usd](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22price_usd%22%29%7B%0A++++metadata%7B%0A++++++availableSlugs%0A++++%7D%0A++%7D%0A%7D) +- Available assets for [price_usd_5m](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22price_usd_5m%22%29%7B%0A++++metadata%7B%0A++++++availableSlugs%0A++++%7D%0A++%7D%0A%7D) +- Available assets for [price_btc](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22price_btc%22%29%7B%0A++++metadata%7B%0A++++++availableSlugs%0A++++%7D%0A++%7D%0A%7D) +- Available assets for [price_usdt](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22price_usdt%22%29%7B%0A++++metadata%7B%0A++++++availableSlugs%0A++++%7D%0A++%7D%0A%7D) +- Available assets for [price_eth](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22price_eth%22%29%7B%0A++++metadata%7B%0A++++++availableSlugs%0A++++%7D%0A++%7D%0A%7D) + +--- + +## SanAPI + +### Price USD + +```graphql explorer +{ + getMetric(metric: "price_usd") { + timeseriesDataJson( + slug: "ethereum" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +### Average price in USD over five-minute intervals + +```graphql explorer +{ + getMetric(metric: "price_usd_5m") { + timeseriesDataJson( + slug: "ethereum" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "5m" + ) + } +} +``` + +### Price BTC + +```graphql explorer +{ + getMetric(metric: "price_btc") { + timeseriesDataJson( + slug: "ethereum" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +### Price USDT + +```graphql explorer +{ + getMetric(metric: "price_usdt") { + timeseriesDataJson( + slug: "ethereum" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +### OHLC + +```graphql explorer +{ + getMetric(metric: "price_usd") { + timeseriesDataJson( + slug: "ethereum" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + aggregation: OHLC) + } +} +``` + +## Full list of metrics + +The full list of Price metrics is: + +
    + +Open Metrics List + +- price_btc +- price_eth +- price_usd +- price_usd_5m +- price_usdt + +
    + +
    + +Open Change Metrics List + +- price_btc_change_1d +- price_btc_change_30d +- price_btc_change_7d +- price_eth_change_1d +- price_eth_change_30d +- price_eth_change_7d +- price_usd_change_1d +- price_usd_change_1h +- price_usd_change_30d +- price_usd_change_7d + +
    + diff --git a/src/content/docs/resources/metrics/rank/index.mdx b/src/content/docs/resources/metrics/rank/index.mdx new file mode 100644 index 000000000..9c733aade --- /dev/null +++ b/src/content/docs/resources/metrics/rank/index.mdx @@ -0,0 +1,84 @@ +--- +title: Rank +author: Santiment Team +description: The position in the list of assets ordered by Marketcap in ascending order +datePublished: 2025-03-19 +dateModified: 2025-04-30 +--- + +## Definition + +The `rank` metrics is defined by the numerical position, starting from 1, of the asset within the list of all assets sorted by market capitalization in ascending order. Assets with smaller market capitalizations are assigned lower numerical positions. + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Position in a list + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +- [Available Assets](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22rank%22%29%7B%0A++++metadata%7B%0A++++++availableSlugs%0A++++%7D%0A++%7D%0A%7D) + +--- + +## SanAPI + +### Get historical ranks of an asset + +```graphql explorer +{ + getMetric(metric: "rank") { + timeseriesDataJson( + slug: "ethereum" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +### Get the latest rank of each asset + +```graphql +{ + allProjects { + slug + rank: aggregatedTimeseriesData( + metric: "rank" + from: "utc_now-1d" + to: "utc_now" + aggregation: LAST + ) + } +} +``` + +**[Run in Explorer]()** diff --git a/src/content/docs/resources/metrics/realized-market-capitalization-hodl-waves/index.mdx b/src/content/docs/resources/metrics/realized-market-capitalization-hodl-waves/index.mdx new file mode 100644 index 000000000..84664cca0 --- /dev/null +++ b/src/content/docs/resources/metrics/realized-market-capitalization-hodl-waves/index.mdx @@ -0,0 +1,101 @@ +--- +title: Realized Market Capitalization Hodl Waves +author: Ante +description: Percent of interval Realized Marketcap in total Realized Marketcap +datePublished: 2022-06-01 +dateModified: 2025-04-30 +--- + + +## Definition + +Realized Market Capitalization Hodl Waves is an alternative to Circulation Hodl Waves. +This metric is representing the percentage of realized cap for a given timebound +interval in total realized cap value. +For example `realized_cap_hodl_waves_1d_to_7d` is computed by dividing the realized +cap of coins that are 1 to 7 days old with total realized market cap: +`(realized_cap_usd_7d - realized_cap_usd_1d) / realized_cap_usd` +Assigning age to coin/tokens is done according to the [coin-age model](/metrics/details/stack-coin-age-model). + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Timebound + +[Interval Timebound Metrics](/metrics/details/interval_timebound) available + +--- + +## Measuring Unit + +Number - % between 0 and 100 + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +## SanAPI + +Available under `realized_cap_hodl_waves_` names. + +```graphql explorer +{ + getMetric(metric: "realized_cap_hodl_waves_1d_to_7d") { + timeseriesDataJson( + slug: "santiment" + from: "2022-05-25T00:00:00Z" + to: "2022-06-01T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +
    + +Realized Market Capitalization Hodl Waves Metrics + +- realized_cap_hodl_waves_0d_to_1d +- realized_cap_hodl_waves_1d_to_7d +- realized_cap_hodl_waves_7d_to_30d +- realized_cap_hodl_waves_30d_to_60d +- realized_cap_hodl_waves_60d_to_90d +- realized_cap_hodl_waves_90d_to_180d +- realized_cap_hodl_waves_180d_to_365d +- realized_cap_hodl_waves_365d_to_2y +- realized_cap_hodl_waves_2y_to_3y +- realized_cap_hodl_waves_3y_to_5y +- realized_cap_hodl_waves_5y_to_10y +- realized_cap_hodl_waves_10y_to_20y + +
    diff --git a/src/content/docs/resources/metrics/realized-value/index.mdx b/src/content/docs/resources/metrics/realized-value/index.mdx new file mode 100644 index 000000000..f9f93fadf --- /dev/null +++ b/src/content/docs/resources/metrics/realized-value/index.mdx @@ -0,0 +1,105 @@ +--- +title: Realized Value +author: Ivan +description: Marketcap alternative with acquisition price instead of current price +datePublished: 2019-11-21 +dateModified: 2025-04-30 +--- + + +## Definition + +Realized Value is an alternative to Market Capitalization (Market Value). Instead of +multiplying all coins/tokens by the last price, every coin/token is assigned the +price at which it was last moved. Assigning age to coin/tokens is done +according to the [coin-age model](/metrics/details/stack-coin-age-model). + +Realized Value metric is also available for different [time bounds](/metrics/details/timebound), which +computes realized value for tokens moved at least once no longer than a specific number of days or years ago. + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Timebound + +[Timebound Metrics](/metrics/details/timebound) available + +--- + +## Measuring Unit + +Dollars + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +> Note: `realized_value_usd` metric and all timebound realized value metrics are +> available for the same set of assets. + +--- + +## SanAPI + +Available under the `realized_value_usd` and `realized_value_usd_` names. + +```graphql explorer +{ + getMetric(metric: "realized_value_usd") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +
    + +Realized value metrics + +- realized_value_usd +- realized_value_usd_1d +- realized_value_usd_7d +- realized_value_usd_30d +- realized_value_usd_60d +- realized_value_usd_90d +- realized_value_usd_180d +- realized_value_usd_365d +- realized_value_usd_2y +- realized_value_usd_3y +- realized_value_usd_5y +- realized_value_usd_10y + +
    + diff --git a/src/content/docs/resources/metrics/renamed-metrics/index.mdx b/src/content/docs/resources/metrics/renamed-metrics/index.mdx new file mode 100644 index 000000000..2bf01f160 --- /dev/null +++ b/src/content/docs/resources/metrics/renamed-metrics/index.mdx @@ -0,0 +1,42 @@ +--- +title: Renamed Metrics +author: Boris +datePublished: 2024-04-29 +dateModified: 2024-05-13 +--- + +import Resource from '$components/markdown/Resource.svelte' +import Notebox from '$components/markdown/Notebox.svelte' + +## Renamed Metrics + + + +Renamed metrics are those that have undergone a name change within our system, reflecting updates to terminology or standardization efforts. These metrics remain actively supported for analysis and reporting but may now be referred to by a different name than previously used. It's important for users to be aware of these changes to ensure clarity and consistency in their analytical processes. While the underlying data and calculation methods for renamed metrics remain unchanged, their updated names help align our reporting practices with industry standards and best practices. Relying on renamed metrics allows for smoother communication and interpretation of analytical results across teams and stakeholders. + + + +## Why Do We Rename Metrics? + +Metrics undergo renaming for several reasons, driven by our commitment to enhancing clarity, consistency, and alignment with industry standards. Here's why certain metrics may be renamed: + +1. **Standardization Efforts**: In response to evolving industry norms or best practices, we periodically update our metric terminology to align with widely accepted standards. Renaming metrics ensures consistency in communication and facilitates interoperability with external partners or industry peers, enhancing the clarity and accessibility of our analytical outputs. + +2. **Clarification of Concepts**: Renaming metrics may also serve to clarify their underlying concepts or methodologies, reducing ambiguity and improving understanding among users. By adopting more intuitive or descriptive names, we enhance the interpretability of metrics and facilitate more informed decision-making based on our analytical insights. + +3. **Alignment with User Feedback**: Feedback from users and stakeholders often informs our decisions to rename metrics, addressing concerns or confusion surrounding existing terminology. By incorporating user input, we strive to optimize the usability and relevance of our metrics, ensuring that they effectively meet the needs of our diverse user base. + +## Benefits of Renaming Metrics + +While metrics undergo name changes, their underlying definitions and calculations remain consistent, ensuring continuity and comparability in our analytical outputs. By staying informed about renamed metrics and updating documentation and training materials accordingly, users can seamlessly transition to using the updated terminology without disrupting their analytical workflows. Embracing renamed metrics supports our commitment to clarity, consistency, and alignment with industry standards, enhancing the effectiveness and relevance of our data analysis processes. + +## List Of Renamed Metrics + + + +- [Age Consumed Metrics](/metrics/age-consumed) - Renamed from **age_destroyed\[..]** to **age_consumed\[..]** +- [Weighted Sentiment Metrics](/metrics/sentiment-metrics/weighted-sentiment-metrics) - Renamed from **sentiment_volume_consumed\_\[..]** to **sentiment_weighted\_\[..]** +- [Exchange Inflow/Outflow Metrics](/metrics/exchange-funds-flow) - Renamed from **inflow_per_label_and_owner** to **exchange_inflow_per_exchange** and **outflow_per_label_and_owner** to **exchange_outflow_per_exchange** + + + diff --git a/src/content/docs/resources/metrics/rsi/index.mdx b/src/content/docs/resources/metrics/rsi/index.mdx new file mode 100644 index 000000000..2698c32cb --- /dev/null +++ b/src/content/docs/resources/metrics/rsi/index.mdx @@ -0,0 +1,86 @@ +--- +title: RSI +author: Filip +description: Relative Strength Index +datePublished: 2023-11-29 +dateModified: 2025-04-30 +--- + +## Description +The Relative Strength Index (RSI) is a popular momentum oscillator used in technical +analysis to assess the magnitude and speed of price movements. RSI is typically applied to +identify overbought or oversold conditions in a financial instrument, helping traders gauge +potential trend reversals. The metric is calculated using the average gains and losses over a +specified period, often 14 days, and is expressed as a numerical value between 0 and 100. + +A reading above 70 on the RSI suggests that an asset may be overbought, indicating a potential +reversal or correction, while a reading below 30 suggests oversold conditions, signaling a possible +upward price movement. Traders commonly use RSI in conjunction with other technical indicators to +make informed decisions about entering or exiting positions in financial markets. + + +RSI metric is available for 3 different time periods +* `rsi_4h` - RSI for a 4-hour time frame +* `rsi_1d` - RSI for a 1-day time frame +* `rsi_7d` - RSI for a 7-day time frame + +> Note: Even though metrics are available for 5-minute intervals, the recommendation is to use them +> within their designated time frame. For instance, consider using a 1-day interval for `rsi_1d`. + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Numerical value between 0 and 100 + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +> Note: All metrics are available for the same set of assets + +--- + +### SanAPI + +Available under names: `rsi_4h`, `rsi_1d` and `rsi_7d` + + +```graphql explorer +{ + getMetric(metric: "rsi_1d"){ + timeseriesDataJson( + slug: "bitcoin" + from: "2023-11-01T00:00:00Z" + to: "2023-12-01T00:00:00Z" + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/sentiment-metrics/bullish-bearish-sentiment-metrics/index.mdx b/src/content/docs/resources/metrics/sentiment-metrics/bullish-bearish-sentiment-metrics/index.mdx new file mode 100644 index 000000000..68c1f345b --- /dev/null +++ b/src/content/docs/resources/metrics/sentiment-metrics/bullish-bearish-sentiment-metrics/index.mdx @@ -0,0 +1,187 @@ +--- +title: Bullish/Bearish/Neutral Sentiment Metrics +author: Santiment Team +description: The bullish, neutral, and bearish sentiment metrics show the part of the total social volume that has bullish, neutral, or bearish sentiment +datePublished: 2025-10-07 +dateModified: 2025-10-07 +--- + + +## Definition + +The Sentiment Bullish, Sentiment Bearish, and Sentiment Neutral metrics represent the sum of [Sentiment Bullish Bearish Score](/metrics/sentiment-metrics/#bullish-bearish-sentiment-score) values. + +- `sentiment_bullish_` metrics are computed by taking the sum of the bullish sentiment scores. +- `sentiment_neutral_` metrics are computed by taking the sum of the neutral sentiment scores. +- `sentiment_bearish_` metrics are computed by taking the sum of the bearish sentiment scores. + +### Available Sources + +[List of available sources](/metrics/details/social-data/#available-data-sources) + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Sum of sentiment scores + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Social Data Latency](/metrics/details/latency#social-data-latency) + +--- + +## Available Assets + +All metrics have the same set of [available assets]() + +--- + +## SanAPI + +Fetch timeseries data for `sentiment_bullish_total` for a single asset: + +```graphql explorer +{ + getMetric(metric: "sentiment_bullish_total") { + timeseriesDataJson( + slug: "ethereum" + from: "utc_now-90d" + to: "utc_now-30d" + interval: "7d" + ) + } +} +``` + +--- + +Fetch timeseries data for `sentiment_neutral_total` for multiple assets at the same time: + +```graphql explorer +{ + getMetric(metric: "sentiment_neutral_total") { + timeseriesDataPerSlugJson( + selector: { slugs: ["ethereum", "bitcoin"] } + from: "utc_now-60d" + to: "utc_now-55d" + interval: "1d" + ) + } +} +``` + +--- + +Fetch timeseries data for `sentiment_bearish_total` for multiple assets at the same time: + +```graphql explorer +{ + getMetric(metric: "sentiment_bearish_total") { + timeseriesDataPerSlugJson( + selector: { slugs: ["ethereum", "bitcoin"] } + from: "utc_now-60d" + to: "utc_now-55d" + interval: "1d" + ) + } +} +``` + +--- + +Fetch aggregated daily values for many assets: + +```graphql explorer +{ + allProjects(page: 1, pageSize: 50) { + slug + sentimentBullish: aggregatedTimeseriesData( + metric: "sentiment_bullish_total" + from: "utc_now-7d" + to: "utc_now" + ) + sentimentNeutral: aggregatedTimeseriesData( + metric: "sentiment_neutral_total" + from: "utc_now-7d" + to: "utc_now" + ) + sentimentBearish: aggregatedTimeseriesData( + metric: "sentiment_bearish_total" + from: "utc_now-7d" + to: "utc_now" + ) + } +} +``` + +--- + +## Full list of metrics + +The full list of Bullish/Neutral/Bearish sentiment metrics is: + +
    + +Open bullish Sentiment Metrics List + +- sentiment_bullish_4chan +- sentiment_bullish_bitcointalk +- sentiment_bullish_reddit +- sentiment_bullish_telegram +- sentiment_bullish_twitter +- sentiment_bullish_youtube_videos +- sentiment_bullish_farcaster +- sentiment_bullish_total + +
    + +
    + +Open neutral Sentiment Metrics List + +- sentiment_neutral_4chan +- sentiment_neutral_bitcointalk +- sentiment_neutral_reddit +- sentiment_neutral_telegram +- sentiment_neutral_twitter +- sentiment_neutral_youtube_videos +- sentiment_neutral_farcaster +- sentiment_neutral_total + +
    + +
    + +Open bearish Sentiment Metrics List + +- sentiment_bearish_4chan +- sentiment_bearish_bitcointalk +- sentiment_bearish_reddit +- sentiment_bearish_telegram +- sentiment_bearish_twitter +- sentiment_bearish_youtube_videos +- sentiment_bearish_farcaster +- sentiment_bearish_total + +
    diff --git a/src/content/docs/resources/metrics/sentiment-metrics/index.mdx b/src/content/docs/resources/metrics/sentiment-metrics/index.mdx new file mode 100644 index 000000000..6b1a43270 --- /dev/null +++ b/src/content/docs/resources/metrics/sentiment-metrics/index.mdx @@ -0,0 +1,98 @@ +--- +title: Sentiment metrics +author: Santiment Team +datePublished: 2019-10-19 +dateModified: 2025-10-24 +--- + +import Resource from '$components/markdown/Resource.svelte' +import Notebox from '$components/markdown/Notebox.svelte' + +## Our Sentiment Metrics + + + +- [Positive/Negative Sentiment](/metrics/sentiment-metrics/positive-negative-sentiment-metrics) - Shows how many mentions of a term/asset are expressed in a + positive/negative manner. +- [Bullish/Bearish Sentiment](/metrics/sentiment-metrics/bullish-bearish-sentiment-metrics) - Shows how many mentions of a term/asset are expressed in a + bullish/bearish manner. +- [Sentiment Balance](/metrics/sentiment-metrics/positive-negative-sentiment-metrics) - The difference between Positive Sentiment and Negative Sentiment +- [Sentiment Weighted](/metrics/sentiment-metrics/weighted-sentiment-metrics) - An improved version of the Sentiment Balance that adjusts the values by considering the number of mentions, standardizing data to make diverse asset sentiments comparable. + + + +## What is Sentiment? + +**Sentiment** is the attitude, thought or judgement that people have which is +based on their feelings. + +**Positive sentiment** is an attitude that is hopeful, confident, and considering +of the good aspects of a situation or a subject. In the context of cryptocurrencies +this can manifest as optimism about the future of a coin, hope that the price will +increase, belief in the success of a token, and many more. + +**Negative sentiment** is an attitude that is critical, disapproving, and +considering of the bad aspects of a situation or a subject. In the context of +cryptocurrencies this can manifest as expressing the opinion that a token is a scam, +belief that a coin will fail, and many more. + +**Sentiment Analysis** is the problem of computationally identifying and +categorizing emotions, opinions and subjective information in a given piece of +text. + + + +We constantly update our labels +which helps us to keep labels as fresh as possible but result historical data +changes. Any modifications to labels, social sources, or relevant jobs will +prompt recalculation for the previous month's data. Within a 12 hour period, +metric can be supplemented with new data. + + + +## Sentiment Score + +We trained a machine learning model on a large Twitter dataset that contains +over 1.6 million tweets, each labelled as either **positive** or **negative**. +The model is then used to evaluate the sentiment of each single document in the +[Social Data](/metrics/details/social-data) set $-$ it assigns a positive and negative +**sentiment score** to each message/post/comment/etc. + +The score is the probability that the content of the text is positive or +negative respectively. Therefore both the **positive** and **negative** sentiment +scores fall in a range between 0 (not positive/negative at all) and 1 (extremely +positive/negative). Moreover, the sum of these two scores always equals 1. + +Example: + +> I'm really excited about the new Libra currency! + +This message has a **positive** score of **0.75** and a **negative** score of +**0.25**. + +We use this approach for messages and comments from social networks +conversations because the structure of the text there is usually more or less +the same: short messages with a single and/or simple idea behind them. + +But this is not the case for all the messages: some of them might be long and +complicated, some might be just neutral or contain spam or other irrelevant +information. These kind of messages usually have a pretty vanished pair of +sentiment scores: both **positive** and **negative** scores are close to 0.5. +We don't include these kind of messages while calculating the **Sentiment +Metrics**: they are filtered out by a certain threshold. + +## Bullish Bearish Sentiment Score + +We are using `ElKulako/cryptobert` model from [Hugging Face](https://huggingface.co/) 🤗. This model was trained on crypto related tweets, reddit comments, and telegram posts. + +Model returns three probability scores: `bullish`, `neutral`, `bearish`. Each probability score is fall in a range between 0 and 1. Sum of all three scores equals to 1. + +Because it is based on the BERT model, it better understands the context of the text. + +## Metrics Calculation + +To ensure relevance and accuracy, only text with a sentiment score above a +certain threshold is considered in our sentiment metrics. This approach filters +out neutral, spam, or irrelevant messages, focusing on the most impactful data. +Our sentiment metrics are recalculated monthly to account for any changes in +our models or data sources, providing you with the most up-to-date insights. diff --git a/src/content/docs/resources/metrics/sentiment-metrics/positive-negative-sentiment-metrics/index.mdx b/src/content/docs/resources/metrics/sentiment-metrics/positive-negative-sentiment-metrics/index.mdx new file mode 100644 index 000000000..2a363816f --- /dev/null +++ b/src/content/docs/resources/metrics/sentiment-metrics/positive-negative-sentiment-metrics/index.mdx @@ -0,0 +1,244 @@ +--- +title: Positive/Negative Sentiment Metrics +author: Santiment Team +description: The postive and negative sentiment metrics show the part of the total social volume that has positive or negative sentiment +datePublished: 2024-04-05 +dateModified: 2025-10-24 +--- + + +## Definition + +The Sentiment Positive and Sentiment Negative metrics represnt the sum of [Sentiment Score](/metrics/sentiment-metrics/#sentiment-score) values. + +- `sentiment_positive_` metrics are computed by taking the sum of the positive sentiment scores that are over 0.7. +- `sentiment_negative_` metrics are computed by taking the sum of the negative sentiment scores that are over 0.7. +- `sentiment_balance_` metrics show the difference between `sentiment_positive_` and `sentiment_negative_`. + +### Available Sources + +[List of available sources](/metrics/details/social-data/#available-data-sources) + +### Example + +Thare are 10 messages in telegram that mention `bitcoin`. Below is a table that shows +the sentiment scores of those 10 messages. The messages with the same sentiment score +are grouped together (messages count bigger than 1). + +| Messages count | Positive Sentiment Score | Negative Sentiment Score | +| -------------- | ------------------------ | ------------------------ | +| 3 | 0.7 | 0.3 | +| 2 | 1.0 | 0.0 | +| 3 | 0.2 | 0.8 | +| 2 | 0.55 | 0.45 | + +Using this data we can compute: + +- `sentiment_positive_telegram`: $3 * 0.7 + 2 * 1.0 = 4.1$ +- `sentiment_negative_telegram`: $3 * 0.8 = 2.4$ +- `sentiment_balance_telegram`: $4.1 - 2.4 = 1.7$ + +### Positive and Negative Sentiment Bitcoin Chart + + + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Sum of sentiment scores + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Social Data Latency](/metrics/details/latency#social-data-latency) + +--- + +## Change Metrics + +[Change Metrics:](/metrics/details/change_metrics) + +- sentiment_balance_total_change_1d +- sentiment_balance_total_change_7d +- sentiment_balance_total_change_30d + +--- + +## Available Assets + +All metrics have the same set of [available assets]() + +--- + +## SanAPI + +Fetch timeseries data for `sentiment_positive_total` for a single asset: + +```graphql explorer +{ + getMetric(metric: "sentiment_positive_total") { + timeseriesDataJson( + slug: "ethereum" + from: "utc_now-90d" + to: "utc_now-30d" + interval: "7d" + ) + } +} +``` + +--- + +Fetch timeseries data for `sentiment_negative_telegram` for multiple assets at the same time: + +```graphql explorer +{ + getMetric(metric: "sentiment_negative_telegram") { + timeseriesDataPerSlugJson( + selector: { slugs: ["ethereum", "bitcoin"] } + from: "utc_now-60d" + to: "utc_now-55d" + interval: "1d" + ) + } +} +``` + +--- + +Fetch aggregated daily values for many assets: + +```graphql explorer +{ + allProjects(page: 1, pageSize: 50) { + slug + sentimentPositive: aggregatedTimeseriesData( + metric: "sentiment_positive_total" + from: "utc_now-7d" + to: "utc_now" + ) + sentimentNegative: aggregatedTimeseriesData( + metric: "sentiment_negative_total" + from: "utc_now-7d" + to: "utc_now" + ) + sentimentBalance: aggregatedTimeseriesData( + metric: "sentiment_balance_total" + from: "utc_now-7d" + to: "utc_now" + ) + } +} +``` + +### Market Sentiment Positive / Negative + +There is an option to get Market Sentiment Positive Negative + +```graphql explorer +{ + getMetric(metric: "sentiment_positive_telegram") { + timeseriesDataJson( + selector: { slug: "crypto_market" } + from: "utc_now-60d" + to: "utc_now-55d" + interval: "1d" + ) + } +} +``` + +--- + +```graphql explorer +{ + getMetric(metric: "sentiment_negative_telegram") { + timeseriesDataJson( + selector: { slug: "crypto_market" } + from: "utc_now-60d" + to: "utc_now-55d" + interval: "1d" + ) + } +} +``` + +--- + +## Full list of metrics + +The full list of Positive/Negative/Balance sentiment metrics is: + +
    + +Open Positive Sentiment Metrics List + +- sentiment_positive_4chan +- sentiment_positive_bitcointalk +- sentiment_positive_reddit +- sentiment_positive_telegram +- sentiment_positive_twitter +- sentiment_positive_youtube_videos +- sentiment_positive_farcaster +- sentiment_positive_total + +
    + +
    + +Open Negative Sentiment Metrics List + +- sentiment_negative_4chan +- sentiment_negative_bitcointalk +- sentiment_negative_reddit +- sentiment_negative_telegram +- sentiment_negative_twitter +- sentiment_negative_youtube_videos +- sentiment_negative_farcaster +- sentiment_negative_total + +
    + +
    + +Open Balance Sentiment Metrics List + +- sentiment_balance_4chan +- sentiment_balance_bitcointalk +- sentiment_balance_reddit +- sentiment_balance_telegram +- sentiment_balance_twitter +- sentiment_balance_youtube_videos +- sentiment_balance_farcaster +- sentiment_balance_total +- sentiment_balance_total_change_1d +- sentiment_balance_total_change_7d +- sentiment_balance_total_change_30d + +
    diff --git a/src/content/docs/resources/metrics/sentiment-metrics/weighted-sentiment-metrics/index.mdx b/src/content/docs/resources/metrics/sentiment-metrics/weighted-sentiment-metrics/index.mdx new file mode 100644 index 000000000..fb945a16c --- /dev/null +++ b/src/content/docs/resources/metrics/sentiment-metrics/weighted-sentiment-metrics/index.mdx @@ -0,0 +1,229 @@ +--- +title: Weighted Sentiment Metrics +author: Santiment Team +description: The postive and negative sentiment metrics show the part of the total social volume that has positive or negative sentiment +datePublished: 2024-04-08 +dateModified: 2025-11-18 +--- + +import Notebox from '$components/markdown/Notebox.svelte' + +## Definition + +The **Sentiment Weighted** is an improved version of the [Sentiment +Balance](/metrics/sentiment-metrics/positive-negative-sentiment-metrics) that also takes into account the [Unique Social Volume](/metrics/unique-social-volume). + +### Why Sentiment Balance needs improvement? + +Sentiment Positive/Negative/Balance metrics' values are in the interval `[-social_volume; +social_volume]` +where `social_volume` is the number of messages that mention a given coin. + +This makes the values of different assets hard to compare, as the mentions of Bitcoin are magnitutes higher compared to the mentions of a small token. + +### Sentiment Weighted Intuitive Definition + +**Sentiment Weighted** adjusts the values by considering the number of mentions, standardizing data to make diverse asset sentiments comparable. + +This means that spikes/dips in the metric will be seen when there is: + +- a lot of mentions for a coin +- most of the mentions are expressing the same sentiment -- most are positive or most are negative + +If the sentiment is mixed, or the asset is not mentioned a lot, there will be no spikes/dips. + +### Sentiment Weighted Technical Definition + +The metric is defined as a rolling Z-score of the term X, where: + +$$ +X = \mathrm{Unique Social Volume} \times \mathrm{Average Sentiment} +$$ + +More precisely we choose a duration $d$ which will be the length of our sliding +window. Then for any timestamp $t$ we consider the population $X(t,d)$ +consisting of all values of $X(t')$ for all timestamps $t'$ between $t-d$ and +$t$. If we use $\mu$ and $\sigma$ to denote mean and standard deviation, then we +define **Sentiment Weighted** as: + +$$ +Sentiment Weighted(t,d) = \frac{X(t) - \mu(X(t,d))}{\sigma(X(t,d))} +$$ + +This score can be explained as a _social-volume-weighted sentiment +balance_ $-$ it spikes when the social volume is really high and +the vast majority of the messages in it are very positive at the same time. Dips +will occur when the social volume again is high, but the overall sentiment is +negative. In case the volume is high but the sentiment is mixed, or the +sentiment has a strong positive (negative) polarity but with a low volume, the +**Sentiment Weighted** metric won't have significant changes and will +stay around 0. + +We have `5m`, `1h`, and `1d` weighted sentiment metrics. The difference between them is in the metrics that we use to calculate them. + +- for sentiment_weighted (5m) we use sentiment_balance (5m) and unique_social_volume (5m) +- for sentiment_weighted_1h we use sentiment_balance (1h) and unique_social_volume_1h +- for sentiment_weighted_1d we use sentiment_balance (1d) and unique_social_volume_1d + +The difference between base metrics lies in the interval on which we aggregate these metrics. +In case of `5m` aggregated metrics when we calculate standard deviation and average for a window $d$ we take $d$ 5m's datapoints. + +In case of `1h` aggregated metrics -- we take $d$ 1h's datapoints. + +In case of `1d` aggregated metrics -- we take $d$ 1d's datapoints. + + + +The `5m` interval sentiment volume consumed metrics are highly sensitive to short-term fluctuations and external events, which can introduce significant noise into the data. This can make it difficult to accurately assess underlying sentiment trends. To mitigate this, we recommend utilizing metrics +aggregated over longer intervals: + +- **`1h` (one-hour) metrics:** These provide a more stable and smoothed representation of sentiment. +- **`1d` (one-day) metrics:** These offer a broader perspective on sentiment, reducing the impact of daily noise. + +Using these longer intervals helps to capture more sustained sentiment patterns. + + + +### Available Sources + +[List of available sources](/metrics/details/social-data/#available-data-sources) + +### Weighted Sentiment Bitcoin Chart + +## + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Sum of sentiment scores + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Social Data Latency](/metrics/details/latency#social-data-latency) + +--- + +## Change Metrics + +[Change Metrics:](/metrics/details/change_metrics) + +- sentiment_weighted_total_change_1d +- sentiment_weighted_total_change_7d +- sentiment_weighted_total_change_30d + +--- + +## Available Assets + +All metrics have the same set of [available assets]() + +--- + +## SanAPI + +Fetch timeseries data for `sentiment_weighted_total` for a single asset: + +```graphql explorer +{ + getMetric(metric: "sentiment_weighted_total") { + timeseriesDataJson( + slug: "ethereum" + from: "utc_now-90d" + to: "utc_now-60d" + interval: "1d" + ) + } +} +``` + +--- + +Fetch timeseries data for `sentiment_weighted_telegram` for multiple assets at the same time: + +```graphql explorer +{ + getMetric(metric: "sentiment_weighted_telegram") { + timeseriesDataPerSlugJson( + from: "utc_now-60d" + to: "utc_now-55d" + interval: "1d" + selector: { slugs: ["ethereum", "bitcoin"] } + ) + } +} +``` + +--- + +Fetch aggregated daily values for many assets: + +```graphql explorer +{ + allProjects(page: 1, pageSize: 50) { + slug + sentimentWeighted: aggregatedTimeseriesData( + metric: "sentiment_weighted_total" + from: "utc_now-7d" + to: "utc_now" + ) + } +} +``` + +--- + +## Full list of metrics + +The full list of weighted sentiment metrics is: + +
    + +Open Weighted Sentiment Metrics List + +- sentiment_weighted_4chan +- sentiment_weighted_bitcointalk +- sentiment_weighted_reddit +- sentiment_weighted_telegram +- sentiment_weighted_twitter +- sentiment_weighted_youtube_videos +- sentiment_weighted_farcaster +- sentiment_weighted_total +- sentiment_weighted_4chan_1h +- sentiment_weighted_bitcointalk_1h +- sentiment_weighted_reddit_1h +- sentiment_weighted_telegram_1h +- sentiment_weighted_twitter_1h +- sentiment_weighted_youtube_videos_1h +- sentiment_weighted_farcaster_1h +- sentiment_weighted_total_1d +- sentiment_weighted_4chan_1d +- sentiment_weighted_bitcointalk_1d +- sentiment_weighted_reddit_1d +- sentiment_weighted_telegram_1d +- sentiment_weighted_twitter_1d +- sentiment_weighted_youtube_videos_1d +- sentiment_weighted_farcaster_1d +- sentiment_weighted_total_1d +- sentiment_weighted_total_change_1d +- sentiment_weighted_total_change_7d +- sentiment_weighted_total_change_30d + +
    diff --git a/src/content/docs/resources/metrics/sky-savings/index.mdx b/src/content/docs/resources/metrics/sky-savings/index.mdx new file mode 100644 index 000000000..357c200ab --- /dev/null +++ b/src/content/docs/resources/metrics/sky-savings/index.mdx @@ -0,0 +1,107 @@ +--- +title: Sky Savings +author: Filip +description: Sky Savings Metrics +datePublished: 2024-10-01 +dateModified: 2025-04-30 +--- + +## Description +Sky Savings is a feature of the decentralized Sky Protocol that allows users to access +the Sky Savings Rate module by supplying USDS, a stablecoin. There is no minimum supply +amount required, and users can withdraw their funds at any time, ensuring they remain +in control of their savings. The Sky Savings Rate is a dynamic, variable mechanism that +accumulates additional USDS in real time, determined by governance decisions within the +Sky ecosystem rather than market factors. When users supply USDS, they receive sUSDS +tokens, which serve as a digital record of their interaction and the value accrued. As +USDS tokens automatically accumulate in the pool every few seconds, users benefit from +increased savings when they redeem their sUSDS back to USDS. + +Sky Savings metrics: +* `sky_savings_deposits` - Amount of USDS deposited into the savings contract +* `sky_savings_withdrawals` - Amount of USDS withdrawn from the savings contract +* `sky_savings_total_supplied` - Total supply of USDS in the savings contract +* `sky_savings_apy` - Interest rate paid for depositing USDS + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +* `sky_savings_deposits`, `sky_savings_withdrawals` and `sky_savings_total_supplied`- Amount of USDS +* `sky_savings_apy` - Percentage + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for `usds` + +--- + +### SanAPI + +Deposit and withdraw metrics: `sky_savings_deposits` and `sky_savings_withdrawals` + +```graphql explorer +{ + getMetric(metric: "sky_savings_deposits"){ + timeseriesDataJson( + slug: "usds" + from: "2024-10-01T00:00:00Z" + to: "2024-10-07T00:00:00Z" + interval: "1d") + } +} +``` + +Total supplied metric: `sky_savings_total_supplied` + +```graphql explorer +{ + getMetric(metric: "sky_savings_total_supplied"){ + timeseriesDataJson( + slug: "usds" + from: "2024-10-01T00:00:00Z" + to: "2024-10-07T00:00:00Z" + interval: "1d") + } +} +``` + +Savings APY metric: `sky_savings_apy` + +```graphql explorer +{ + getMetric(metric: "sky_savings_apy"){ + timeseriesDataJson( + slug: "usds" + from: "2024-10-01T00:00:00Z" + to: "2024-10-07T00:00:00Z" + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/social-dominance/index.mdx b/src/content/docs/resources/metrics/social-dominance/index.mdx new file mode 100644 index 000000000..4697ae40a --- /dev/null +++ b/src/content/docs/resources/metrics/social-dominance/index.mdx @@ -0,0 +1,210 @@ +--- +title: Social Dominance +author: Santiment Team +description: Share of the crypto discussions that refer to an asset/phrase +# REF metrics-hub/metricshub/social_dominance.py +datePublished: 2020-04-13 +dateModified: 2025-10-24 +--- + + +## Definition + +Social Dominance shows the share of the discussions in crypto media that is referring +to a particular asset or phrase. + +The metric is build on top of the [Social Data](/metrics/details/social-data). + +We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. + +### Social Dominance for an Asset + +Social Dominance for an asset compares the [Social +Volume](/metrics/social-volume) of that asset to the combined social volume of the +100 largest assets by marketcap. + +Social Dominance of 50% for an asset means that the number of messages/posts that discuss +this asset equal half the number of messages/posts that discuss the Top 100 assets. + +> This definition allows the social dominance of an asset to exceed 100%. +> This can happen for assets whose name and/or ticker is a very common English word. + +### Social Dominance for a text phrase + +Social Dominance for an arbitrary text phrase compares the [Social +Volume](/metrics/social-volume) of that search term to the total number of +documents available. This essentially computes the percentage of all documents +that match this search term. + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Number - % between 0 and 100 + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Social Data Latency](/metrics/details/latency#social-data-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +> Note: `social_dominance_total` metric and all metrics for a specific source are +> available for the same set of assets. + +--- + +## Sanbase + +Combined Social Dominance from all sources for an asset can be seen on a +[project's page](https://app.santiment.net/projects/santiment?from=2019-10-12T21%3A00%3A00.000Z&interval=12h&isAnomalyActive=false&isCartesianGridActive=false&isICOPriceActive=true&isLogScale=false&isMultiChartsActive=false&metrics=price_usd,social_dominance_total&projectId=101605&slug=santiment&ticker=SAN&timeRange=6m&title=Santiment%20%28SAN%29&to=2020-04-13T21%3A00%3A00.000Z). + +Social Dominance for arbitrary search terms can be viewed from the [trends +page](https://app.santiment.net/social-trends) ![trends page](trends-page.png) + +and enabling the Social Dominance toggle on the next page that shows the result. + +The combined social dominance from all sources is displayed +![social dominance search term](social-dominance-search-term.png) + +## SanAPI + +Available under the `social_dominance_total` and `social_dominance_total_` +names, where the available sources are: + +- 4chan +- telegram +- reddit +- twitter +- bitcointalk +- youtube_videos +- farcaster +- total (combines all sources) + +### Social Dominance for an asset + +```graphql explorer +{ + getMetric(metric: "social_dominance_total") { + timeseriesDataJson( + selector: { slug: "santiment" } + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +--- + +### Social Dominance for arbitrary search term + +```graphql explorer +{ + getMetric(metric: "social_dominance_telegram") { + timeseriesDataJson( + selector: { text: "btc AND 1?k" } + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +The full list of Social Dominance metrics is: + +
    + +Open Metrics List + +- social_dominance_4chan +- social_dominance_ai_total +- social_dominance_bitcointalk +- social_dominance_reddit +- social_dominance_telegram +- social_dominance_total +- social_dominance_twitter +- social_dominance_youtube_videos +- social_dominance_farcaster + +
    + +
    + +Open Change Metrics List + +- social_dominance_total_change_1d +- social_dominance_total_change_30d +- social_dominance_total_change_7d + +
    + +
    + +Open Moving Average Metrics List + +- social_dominance_4chan_1h_moving_average +- social_dominance_4chan_24h_moving_average +- social_dominance_ai_total_1h_moving_average +- social_dominance_ai_total_24h_moving_average +- social_dominance_bitcointalk_1h_moving_average +- social_dominance_bitcointalk_24h_moving_average +- social_dominance_reddit_1h_moving_average +- social_dominance_reddit_24h_moving_average +- social_dominance_telegram_1h_moving_average +- social_dominance_telegram_24h_moving_average +- social_dominance_total_1h_moving_average +- social_dominance_total_24h_moving_average +- social_dominance_twitter_1h_moving_average +- social_dominance_twitter_24h_moving_average +- social_dominance_youtube_videos_1h_moving_average +- social_dominance_youtube_videos_24h_moving_average +- social_dominance_farcaster_1h_moving_average +- social_dominance_farcaster_24h_moving_average + +
    + +
    + +Open Moving Average Change Metrics List + +- social_dominance_total_1h_moving_average_change_1d +- social_dominance_total_1h_moving_average_change_30d +- social_dominance_total_1h_moving_average_change_7d +- social_dominance_total_24h_moving_average_change_1d +- social_dominance_total_24h_moving_average_change_30d +- social_dominance_total_24h_moving_average_change_7d + +
    diff --git a/src/docs/metrics/social-dominance/social-dominance-search-term.png b/src/content/docs/resources/metrics/social-dominance/social-dominance-search-term.png similarity index 100% rename from src/docs/metrics/social-dominance/social-dominance-search-term.png rename to src/content/docs/resources/metrics/social-dominance/social-dominance-search-term.png diff --git a/src/docs/metrics/social-dominance/trends-page.png b/src/content/docs/resources/metrics/social-dominance/trends-page.png similarity index 100% rename from src/docs/metrics/social-dominance/trends-page.png rename to src/content/docs/resources/metrics/social-dominance/trends-page.png diff --git a/src/content/docs/resources/metrics/social-volume-ai/index.mdx b/src/content/docs/resources/metrics/social-volume-ai/index.mdx new file mode 100644 index 000000000..ca14f1e5f --- /dev/null +++ b/src/content/docs/resources/metrics/social-volume-ai/index.mdx @@ -0,0 +1,90 @@ +--- +title: Social Volume AI +author: Ilya +description: The amount of messages/documents that relate to given assert found by NLP model +datePublished: 2024-01-26 +dateModified: 2025-08-11 +--- + + +## Definition + +Social Volume is build on top of our [Social Data](/metrics/details/social-data). + +The **Social Volume AI** metric finds the relation of text to the given asset through the use of NLP(Named Entity Recognition) and NEL(Named Entity Linking) models. Similarly as in [Social Volume](/metrics/social-volume/#definition). + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Amount of distinct related to the given asset documents extracted by NLP model. + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) +[One-Hour Intervals](/metrics/details/frequency#hourly-frequency) + +--- + +## Latency + +[Social Data Latency](/metrics/details/latency#social-data-latency) + +--- + +## Available Assets + +Available for [these assets]() + +> Note: `social_volume_ai_total` metric is available for the same set of assets. + +--- + +## Sanbase + +Social Volume AI for an asset can be seen on a a [project's page](https://app.santiment.net/charts). + +## SanAPI + +Available under the `social_volume_ai_total` name. + +### Social Volume AI for an asset + +```graphql explorer +{ + getMetric(metric: "social_volume_ai_total") { + timeseriesDataJson( + selector: { slug: "santiment" } + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +The full list of Social Volume metrics is: + +
    + +Open Change Metrics List + +- social_volume_ai_total + +
    diff --git a/src/content/docs/resources/metrics/social-volume/index.mdx b/src/content/docs/resources/metrics/social-volume/index.mdx new file mode 100644 index 000000000..15ccdf9e6 --- /dev/null +++ b/src/content/docs/resources/metrics/social-volume/index.mdx @@ -0,0 +1,211 @@ +--- +title: Social Volume +author: Ivan +description: The amount of messages/documents containing a given search term +datePublished: 2019-10-04 +dateModified: 2025-10-24 +--- + + +## Definition + +Social Volume is build on top of the [Social Data](/metrics/details/social-data). + +The total number of [social data text documents](/metrics/details/social-data) that +contain the given search term at least once. Examples of documents are telegram +messages and reddit posts. If a single short telegram message includes the word +`crypto` more than once, this message will increase the social volume of the +word `crypto` by 1. If a long reddit post contains the word `crypto` 10 times, +this again will increase the social volume of the word `crypto` by 1. + +Social Volume can be computed for an [asset](/glossary#asset) or for arbitrary +search terms. When an asset is used, a special search term is constructed. For +example querying the social volume for `santiment` will result in a search term +similar to: + +> (SAN OR santiment OR santoken OR santimentnet OR sancoin OR sansan OR sancoin) +> AND NOT ((san AND francisco) OR (san AND fran) OR (san AND diego) OR (san AND +> marino) OR (san AND jose)) + +which includes documents containg `santiment` or `san` but excludes documents +that contain common phrases containing `san` like `San Francisco`. + +The arbitrary search term can be: + +- One particular word like `bitcoin`, `crypto` or `blockchain`. +- An exact phrase (surrounded by double quotation marks) like `"when moon"`, + `"buy high sell low"` or `"btc rekt"`. +- [Lucene Query](http://www.lucenetutorial.com/lucene-query-syntax.html) - a + search term that allows for logical operators. Examples: + - `OR` - The union of two search results. `btc OR bitcoin` returns the + documents that contain at least one of the words `btc` and `bitcoin` + - `AND` - The intersection of two search results. `btc AND moon` returns the + documents that contain both of the words `btc` and `moon` at the same time. + - `NOT` - Filter out documents that contain a given search term. `btc NOT lambo` + returns the documents that contain the word `btc` and does not + contain the word `lambo` + - `?` - A wildcard search. `?` in the search term means that it can match any + character. For example the query `btc AND 1?k` will be the combined result + of `btc AND 10k`, `btc AND 11k`, ..., `btc AND 19k` (but also nonsense like + `btc AND 1sk`, `btc AND 1Ak`, etc. will be matched) + - Many other operators can be used, documentation for which can be found in + the lucene query syntax documentation. + +The operators can be combined and higher precedence can be expressed by using +parentheses `(btc OR bitcoin) AND moon NOT lambo` - it will result in all the +documents that contain either the words `btc` and `moon` or the words `bitcoin` +and `moon` in one document, excluding any documents that contain the word +`lambo`. + +We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Amount of documents that mention the given text pattern. + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Social Data Latency](/metrics/details/latency#social-data-latency) + +--- + +## Available Assets + +Available for [these assets]() + +> Note: `social_volume_total` metric and all metrics for a specific source are +> available for the same set of assets. + +--- + +## Sanbase + +Combined Social Volume from all sources for an asset can be seen on a [project's page](https://app.santiment.net/charts). + +Social Volume for arbitrary search terms can be viewed from the [trends page](https://app.santiment.net/social-trends) ![trends page](trends-page.png) + +The combined social volume from all sources is displayed. From the bottom of the +page social volume for a specific source can be displayed, too. ![social volume +search term](social-volume-search-term.png) + +## SanAPI + +Available under the `social_volume_total` and `social_volume_` +names, where the available sources are: + +- 4chan +- telegram +- reddit +- twitter +- bitcointalk +- youtube_videos +- farcaster +- total (combines all sources) + +### Social Volume for an asset + +```graphql explorer +{ + getMetric(metric: "social_volume_total") { + timeseriesDataJson( + selector: { slug: "santiment" } + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +--- + +### Social Volume for arbitrary search term + +```graphql explorer +{ + getMetric(metric: "social_volume_telegram") { + timeseriesDataJson( + selector: { text: "btc AND 1?k" } + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +--- + +### Market Social Volume + +There is an option to get Market Social Volume + +```graphql explorer +{ + getMetric(metric: "social_volume_telegram") { + timeseriesDataJson( + selector: { slug: "crypto_market" } + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +The full list of Social Volume metrics is: + +
    + +Open Metrics List + +- social_volume_4chan +- social_volume_bitcointalk +- social_volume_reddit +- social_volume_telegram +- social_volume_total +- social_volume_twitter +- social_volume_youtube_videos +- social_volume_farcaster + +
    + +
    + +Open Change Metrics List + +- social_volume_total_change_1d +- social_volume_total_change_30d +- social_volume_total_change_7d + +
    diff --git a/src/docs/metrics/social-volume/social-volume-search-term.png b/src/content/docs/resources/metrics/social-volume/social-volume-search-term.png similarity index 100% rename from src/docs/metrics/social-volume/social-volume-search-term.png rename to src/content/docs/resources/metrics/social-volume/social-volume-search-term.png diff --git a/src/docs/metrics/social-volume/trends-page.png b/src/content/docs/resources/metrics/social-volume/trends-page.png similarity index 100% rename from src/docs/metrics/social-volume/trends-page.png rename to src/content/docs/resources/metrics/social-volume/trends-page.png diff --git a/src/content/docs/resources/metrics/spent-coins-age-band/index.mdx b/src/content/docs/resources/metrics/spent-coins-age-band/index.mdx new file mode 100644 index 000000000..6fbd9bcc5 --- /dev/null +++ b/src/content/docs/resources/metrics/spent-coins-age-band/index.mdx @@ -0,0 +1,120 @@ +--- +title: Spent Coins Age Band +author: Ante +description: The distribution by age of coins spend on a given day +datePublished: 2022-06-01 +dateModified: 2025-04-30 +--- + + +## Definition + +Spent Coins Age Band is a set of metrics that represent the distribution of coins +spent on a given day by the age of coins. In addition to absolute values, there +is percentage type of this metric, which shows the relative share of coins in a +given interval in relation to total amount of coins spent on a given day. +Assigning age to coin/tokens is done according to the [coin-age model](/metrics/details/stack-coin-age-model). + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Timebound + +[Interval Timebound Metrics](/metrics/details/interval_timebound) available + +--- + +## Measuring Unit + +Token/Coin amount and % between 0 and 100 + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +## SanAPI + +Available under `spent_coins_age_band_` and `percent_of_spent_coins_age_band_` names. + +```graphql explorer +{ + getMetric(metric: "spent_coins_age_band_0d_to_1d") { + timeseriesDataJson( + slug: "santiment" + from: "2022-05-25T00:00:00Z" + to: "2022-06-01T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +
    + +Spent Coins Age Band Metrics + +- spent_coins_age_band_0d_to_1d +- spent_coins_age_band_1d_to_7d +- spent_coins_age_band_7d_to_30d +- spent_coins_age_band_30d_to_60d +- spent_coins_age_band_60d_to_90d +- spent_coins_age_band_90d_to_180d +- spent_coins_age_band_180d_to_365d +- spent_coins_age_band_365d_to_2y +- spent_coins_age_band_2y_to_3y +- spent_coins_age_band_3y_to_5y +- spent_coins_age_band_5y_to_7y +- spent_coins_age_band_7y_to_10y +- spent_coins_age_band_10y_to_inf + +
    + +
    + +Percent of Spent Coins Age Band Metrics + +- percent_of_spent_coins_age_band_0d_to_1d +- percent_of_spent_coins_age_band_1d_to_7d +- percent_of_spent_coins_age_band_7d_to_30d +- percent_of_spent_coins_age_band_30d_to_60d +- percent_of_spent_coins_age_band_60d_to_90d +- percent_of_spent_coins_age_band_90d_to_180d +- percent_of_spent_coins_age_band_180d_to_365d +- percent_of_spent_coins_age_band_365d_to_2y +- percent_of_spent_coins_age_band_2y_to_3y +- percent_of_spent_coins_age_band_3y_to_5y +- percent_of_spent_coins_age_band_5y_to_7y +- percent_of_spent_coins_age_band_7y_to_10y +- percent_of_spent_coins_age_band_10y_to_inf + +
    diff --git a/src/content/docs/resources/metrics/stock-to-flow/index.mdx b/src/content/docs/resources/metrics/stock-to-flow/index.mdx new file mode 100644 index 000000000..f3b1cdc1c --- /dev/null +++ b/src/content/docs/resources/metrics/stock-to-flow/index.mdx @@ -0,0 +1,95 @@ +--- +title: Stock To Flow ratio +author: Tsetso + +headline: "Stock To Flow Ratio (S2F): How It's Used and Calculated" +description: "Discover how to calculate and apply the stock to flow ratio in your trading strategy. Understand the balance between the supply and production rate of an asset to make trading decisions." +datePublished: 2019-11-21 +dateModified: 2025-04-30 +--- + +## Definition +The Stock To Flow (S2F) ratio is a vital indicator provided by Santiment. Defined in the simplest terms, it's a measure of the scarcity or abundance of a specific asset. The stock-to-flow ratio is fundamentally a relationship between the total supply of an asset (the stock) and its production rate (the flow). We measure the stock-to-flow ratio for a given asset as the ratio between the [Total Circulation](/metrics/circulation) of the asset and the daily minted coins multiplied by days in one year. + +The 'stock' aspect relates to the existing supply of the asset in circulation, while the 'flow' portion refers to the newly produced assets, usually measured annually. + +![Stock to Flow](https://github.com/santiment/academy/assets/24714957/29871977-a860-4fa6-a2e0-a691058a83ff) +Source: https://app.santiment.net/charts/stock-to-flow-ratio-btc-22307 + +## Applying the Stock to Flow Ratio to Trading + +In the trading world, how does the stock-to-flow ratio come into play? A high S2F ratio implies scarcity, meaning there's less production compared to the existing supply. This scarcity could signify a potential price increase due to the limited new supply making its way to the market. On the opposite end, a low stock-to-flow ratio indicates a larger new supply but a smaller demand, possibly leading to a depreciation in the asset's value. + +## Making Informed Trading Decisions with the S2F Ratio + +As a trader, a high stock-to-flow ratio could be viewed as a buying signal, as the high scarcity could mean potential price appreciation. However, a low S2F might be a selling cue to prevent potential losses from the predicted oversupply. + +However, the stock-to-flow ratio shouldn't be the only tool you use when deciding to buy or sell. It should be used alongside other indicators and market analysis methods. Remember to assess overall market sentiment, global economic trends, and particular news or events that could affect price changes of your chosen asset. + +In essence, the stock-to-flow should be one tool in a collection used to formulate a comprehensive and robust trading strategy. + +--- + +## Access + +Stock To Flow ratio metric is available only in `Custom` plans. + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Timebound + +[Timebound Metrics](/metrics/details/timebound) available + +--- + +## Measuring Unit + +Token/Coin amount + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +> Note: `stock_to_flow` metric is available only for assets that mint new coins on a regular basis. + +--- + +## SanAPI + +Available under the `stock_to_flow` name. + +```graphql explorer +{ + getMetric(metric: "stock_to_flow") { + timeseriesDataJson( + slug: "bitcoin" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/supply-distribution/amount-of-holders/index.mdx b/src/content/docs/resources/metrics/supply-distribution/amount-of-holders/index.mdx new file mode 100644 index 000000000..869c64b79 --- /dev/null +++ b/src/content/docs/resources/metrics/supply-distribution/amount-of-holders/index.mdx @@ -0,0 +1,240 @@ +--- +title: Amount of Holders Metrics +author: Santiment Team +datePublished: 2024-04-01 +dateModified: 2025-04-30 +--- + + +## Definition + +The Amount of Holders Metric quantifies the number of distinct addresses holding a token +across predefined balance intervals, offering insight into ownership distribution. This analysis +aids in evaluating decentralization levels and understanding the diversity of holders within the +ecosystem. + +Amount of Holders Metrics: + +- `holders_distribution_` - The number of addresses holding tokens within a specified balance [interval](/metrics/details/supply_distribution_parameters#available-intervals) +- `percent_of_holders_distribution_` - The percentage of addresses within a specified balance [interval](/metrics/details/supply_distribution_parameters#available-intervals) +- `holders_distribution_over_` - The number of addresses with balances exceeding a specified balance [threshold](/metrics/details/supply_distribution_parameters#available-thresholds) + +#### Supply Distribution (by number of addresses) Bitcoin Chart + + + +> Additionally, the above metrics can only be calculated for active holders - holders who have moved coins in the +> past year. To include only active holders add `active_` prefix (for example: `active_holders_distribution_`) + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +- `holders_distribution_` and `holders_distribution_over_` - Number of addresses +- `percent_of_holders_distribution_` - Percentage + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these assets]() + +> Note: All of the metrics are available for the same set of assets. + +--- + +## API + +Holders distribution metrics: `holders_distribution_` + +```graphql explorer +{ + getMetric(metric: "holders_distribution_1_to_10") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +Percent of holders distribution metrics: `percent_of_holders_distribution_` + +```graphql explorer +{ + getMetric(metric: "percent_of_holders_distribution_10k_to_100k") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +Holders distribution over metrics: `holders_distribution_over_` + +```graphql explorer +{ + getMetric(metric: "active_holders_distribution_over_1k") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +--- + +## Full list of metrics + +### Amount of holders metrics + +
    + +Holders distribution metrics + +- holders_distribution_0_to_0.001 +- holders_distribution_0.001_to_0.01 +- holders_distribution_0.01_to_0.1 +- holders_distribution_0.1_to_1 +- holders_distribution_1_to_10 +- holders_distribution_10_to_100 +- holders_distribution_100_to_1k +- holders_distribution_1k_to_10k +- holders_distribution_10k_to_100k +- holders_distribution_100k_to_1M +- holders_distribution_1M_to_10M +- holders_distribution_10M_to_100M +- holders_distribution_100M_to_1B +- holders_distribution_1B_to_inf +- holders_distribution_total + +
    + +
    + +Percent of holders distribution metrics + +- percent_of_holders_distribution_0_to_0.001 +- percent_of_holders_distribution_0.001_to_0.01 +- percent_of_holders_distribution_0.01_to_0.1 +- percent_of_holders_distribution_0.1_to_1 +- percent_of_holders_distribution_1_to_10 +- percent_of_holders_distribution_10_to_100 +- percent_of_holders_distribution_100_to_1k +- percent_of_holders_distribution_1k_to_10k +- percent_of_holders_distribution_10k_to_100k +- percent_of_holders_distribution_100k_to_1M +- percent_of_holders_distribution_1M_to_10M +- percent_of_holders_distribution_10M_to_100M +- percent_of_holders_distribution_100M_to_1B +- percent_of_holders_distribution_1B_to_inf + +
    + +
    + +Holders distribution over metrics + +- holders_distribution_over_1 +- holders_distribution_over_10 +- holders_distribution_over_100 +- holders_distribution_over_1k +- holders_distribution_over_10k +- holders_distribution_over_100k +- holders_distribution_over_1M + +
    + +### Amount of active holders metrics + +
    + +Active holders distribution metrics + +- active_holders_distribution_0_to_0.001 +- active_holders_distribution_0.001_to_0.01 +- active_holders_distribution_0.01_to_0.1 +- active_holders_distribution_0.1_to_1 +- active_holders_distribution_1_to_10 +- active_holders_distribution_10_to_100 +- active_holders_distribution_100_to_1k +- active_holders_distribution_1k_to_10k +- active_holders_distribution_10k_to_100k +- active_holders_distribution_100k_to_1M +- active_holders_distribution_1M_to_10M +- active_holders_distribution_10M_to_inf +- active_holders_distribution_total + +
    + +
    + +Active percent of holders distribution metrics + +- percent_of_active_holders_distribution_0_to_0.001 +- percent_of_active_holders_distribution_0.001_to_0.01 +- percent_of_active_holders_distribution_0.01_to_0.1 +- percent_of_active_holders_distribution_0.1_to_1 +- percent_of_active_holders_distribution_1_to_10 +- percent_of_active_holders_distribution_10_to_100 +- percent_of_active_holders_distribution_100_to_1k +- percent_of_active_holders_distribution_1k_to_10k +- percent_of_active_holders_distribution_10k_to_100k +- percent_of_active_holders_distribution_100k_to_1M +- percent_of_active_holders_distribution_1M_to_10M +- percent_of_active_holders_distribution_10M_to_inf + +
    + +
    + +Active holders distribution over metrics + +- active_holders_distribution_over_1 +- active_holders_distribution_over_10 +- active_holders_distribution_over_100 +- active_holders_distribution_over_1k +- active_holders_distribution_over_10k +- active_holders_distribution_over_100k +- active_holders_distribution_over_1M + +
    + diff --git a/src/content/docs/resources/metrics/supply-distribution/amount-of-labeled-holders/index.mdx b/src/content/docs/resources/metrics/supply-distribution/amount-of-labeled-holders/index.mdx new file mode 100644 index 000000000..4f9c40ea8 --- /dev/null +++ b/src/content/docs/resources/metrics/supply-distribution/amount-of-labeled-holders/index.mdx @@ -0,0 +1,149 @@ +--- +title: Amount of Labeled Holders Metrics +author: Santiment Team +datePublished: 2024-04-01 +dateModified: 2025-04-30 +--- + + +## Definition + +The Amount of Labeled Holders Metric quantifies the number of distinct addresses with a specific label holding a token +across predefined balance intervals. By quantifying the number of distinct addresses with +designated labels such as exchange, infrastructure, miner, whale, or all, this metric provides insights into +the composition and activities of various participant groups. Whether tracking the influence of exchanges, the +backbone support of infrastructure holders, the mining community, or the presence of large-scale holders (whales), +this metric enables stakeholders to assess the diversity and concentration of ownership. By analyzing these +labeled holders across predefined balance intervals, it becomes possible to discern trends, identify patterns, +and inform strategic decision-making within the cryptocurrency space. + +There are two sets of metrics: holders labeled distribution metrics and holders labeled negative distribution +metrics. Holders labeled distribution metrics encompass all addresses with a specific label, while holders +labeled negative distribution metrics exclude all addresses with a specific label. + +Amount of Labeled Holders Metrics: + +- `holders_labeled_distribution_` - The number of addresses with a specific [label](/metrics/details/supply_distribution_parameters#available-labels) + holding tokens within a specified balance [interval](/metrics/details/supply_distribution_parameters#available-intervals) +- `holders_labeled_negative_distribution_` - The number of addresses that do not contain a specific + [negative label](/metrics/details/supply_distribution_parameters#available-negative-labels), holding tokens within a specified balance [interval](/metrics/details/supply_distribution_parameters#available-intervals) + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Number of addresses + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these assets]() + +> Note: All of the metrics are available for the same set of assets. + +--- + +## API + +Holders labeled distribution metrics: `holders_labeled_distribution_` + +```graphql explorer +{ + getMetric(metric: "holders_labeled_distribution_1_to_10") { + timeseriesDataJson( + selector: { + slug: "ethereum" + label: "miner" + } + from: "2024-01-01T00:00:00Z" + to: "2024-01-10T00:00:00Z" + interval: "1d" + ) + } +} +``` + +Holders labeled negative distribution metrics: `holders_labeled_negative_distribution_` + +```graphql explorer +{ + getMetric(metric: "holders_labeled_negative_distribution_10_to_100") { + timeseriesDataJson( + selector: { + slug: "ethereum" + label: "nonExchange" + } + from: "2024-01-01T00:00:00Z" + to: "2024-01-10T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +
    + +Holders labeled distribution metrics + +- holders_labeled_distribution_0_to_0.001 +- holders_labeled_distribution_0.001_to_0.01 +- holders_labeled_distribution_0.01_to_0.1 +- holders_labeled_distribution_0.1_to_1 +- holders_labeled_distribution_1_to_10 +- holders_labeled_distribution_10_to_100 +- holders_labeled_distribution_100_to_1k +- holders_labeled_distribution_1k_to_10k +- holders_labeled_distribution_10k_to_100k +- holders_labeled_distribution_100k_to_1M +- holders_labeled_distribution_1M_to_10M +- holders_labeled_distribution_10M_to_inf +- holders_labeled_distribution_total + +
    + +
    + +Holders labeled negative distribution metrics + +- holders_labeled_negative_distribution_0_to_0.001 +- holders_labeled_negative_distribution_0.001_to_0.01 +- holders_labeled_negative_distribution_0.01_to_0.1 +- holders_labeled_negative_distribution_0.1_to_1 +- holders_labeled_negative_distribution_1_to_10 +- holders_labeled_negative_distribution_10_to_100 +- holders_labeled_negative_distribution_100_to_1k +- holders_labeled_negative_distribution_1k_to_10k +- holders_labeled_negative_distribution_10k_to_100k +- holders_labeled_negative_distribution_100k_to_1M +- holders_labeled_negative_distribution_1M_to_10M +- holders_labeled_negative_distribution_10M_to_inf +- holders_labeled_negative_distribution_total + +
    diff --git a/src/content/docs/resources/metrics/supply-distribution/combined-balance-of-holders/index.mdx b/src/content/docs/resources/metrics/supply-distribution/combined-balance-of-holders/index.mdx new file mode 100644 index 000000000..bbce37576 --- /dev/null +++ b/src/content/docs/resources/metrics/supply-distribution/combined-balance-of-holders/index.mdx @@ -0,0 +1,240 @@ +--- +title: Combined Balance of Holders Metrics +author: Santiment Team +datePublished: 2024-04-01 +dateModified: 2025-04-30 +--- + + +## Definition + +The Combined Balance of Holders metric provides a comprehensive overview of the total tokens held by all +addresses within a specified balance interval. By summing up the token balances across every individual +address within the designated interval, this metric offers valuable insights into the collective ownership +concentration or dispersion within the cryptocurrency ecosystem. + +Combined Balance of Holders Metrics: + +- `holders_distribution_combined_balance_` - Total tokens held by all addresses within a + specified balance [interval](/metrics/details/supply_distribution_parameters#available-intervals) +- `percent_of_holders_distribution_combined_balance_` - The percentage of tokens held by + all addresses within a specified balance [interval](/metrics/details/supply_distribution_parameters#available-intervals) +- `holders_distribution_combined_balance_over_` - Total tokens held by all addresses with balances + exceeding a specified balance [threshold](/metrics/details/supply_distribution_parameters#available-thresholds) + +#### Supply Distribution (by balance of addresses) Bitcoin Chart + + + +> Additionally, the above metrics can only be calculated for active holders - holders who have moved coins in the +> past year. To include only active holders add `active_` prefix (for example: `active_holders_distribution_combined_balance_`) + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +- `holders_distribution_combined_balance_` and `holders_distribution_combined_balance_over_` - Amount in token +- `percent_of_holders_distribution_combined_balance_` - Percentage + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these assets]() + +> Note: All of the metrics are available for the same set of assets. + +--- + +## API + +Holders distribution combined balance metrics: `holders_distribution_combined_balance_` + +```graphql explorer +{ + getMetric(metric: "holders_distribution_combined_balance_1_to_10") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +Percent of holders distribution combined balance metrics: `percent_of_holders_distribution_combined_balance_` + +```graphql explorer +{ + getMetric(metric: "percent_of_holders_distribution_combined_balance_10k_to_100k") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +Holders distribution combined balance over metrics: `holders_distribution_combined_balance_over_` + +```graphql explorer +{ + getMetric(metric: "active_holders_distribution_combined_balance_over_1k") { + timeseriesDataJson( + slug: "santiment" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +### Combined balance of holders metrics + +
    + +Holders distribution combined balance metrics + +- holders_distribution_combined_balance_0_to_0.001 +- holders_distribution_combined_balance_0.001_to_0.01 +- holders_distribution_combined_balance_0.01_to_0.1 +- holders_distribution_combined_balance_0.1_to_1 +- holders_distribution_combined_balance_1_to_10 +- holders_distribution_combined_balance_10_to_100 +- holders_distribution_combined_balance_100_to_1k +- holders_distribution_combined_balance_1k_to_10k +- holders_distribution_combined_balance_10k_to_100k +- holders_distribution_combined_balance_100k_to_1M +- holders_distribution_combined_balance_1M_to_10M +- holders_distribution_combined_balance_10M_to_100M +- holders_distribution_combined_balance_100M_to_1B +- holders_distribution_combined_balance_1B_to_inf +- holders_distribution_combined_balance_total + +
    + +
    + +Percent of holders distribution combined balance metrics + +- percent_of_holders_distribution_combined_balance_0_to_0.001 +- percent_of_holders_distribution_combined_balance_0.001_to_0.01 +- percent_of_holders_distribution_combined_balance_0.01_to_0.1 +- percent_of_holders_distribution_combined_balance_0.1_to_1 +- percent_of_holders_distribution_combined_balance_1_to_10 +- percent_of_holders_distribution_combined_balance_10_to_100 +- percent_of_holders_distribution_combined_balance_100_to_1k +- percent_of_holders_distribution_combined_balance_1k_to_10k +- percent_of_holders_distribution_combined_balance_10k_to_100k +- percent_of_holders_distribution_combined_balance_100k_to_1M +- percent_of_holders_distribution_combined_balance_1M_to_10M +- percent_of_holders_distribution_combined_balance_10M_to_100M +- percent_of_holders_distribution_combined_balance_100M_to_1B +- percent_of_holders_distribution_combined_balance_1B_to_inf + +
    + +
    + +Holders distribution combined balance over metrics + +- holders_distribution_combined_balance_over_1 +- holders_distribution_combined_balance_over_10 +- holders_distribution_combined_balance_over_100 +- holders_distribution_combined_balance_over_1k +- holders_distribution_combined_balance_over_10k +- holders_distribution_combined_balance_over_100k +- holders_distribution_combined_balance_over_1M + +
    + +### Combined balance of active holders metrics + +
    + +Active holders distribution combined balance metrics + +- active_holders_distribution_combined_balance_0_to_0.001 +- active_holders_distribution_combined_balance_0.001_to_0.01 +- active_holders_distribution_combined_balance_0.01_to_0.1 +- active_holders_distribution_combined_balance_0.1_to_1 +- active_holders_distribution_combined_balance_1_to_10 +- active_holders_distribution_combined_balance_10_to_100 +- active_holders_distribution_combined_balance_100_to_1k +- active_holders_distribution_combined_balance_1k_to_10k +- active_holders_distribution_combined_balance_10k_to_100k +- active_holders_distribution_combined_balance_100k_to_1M +- active_holders_distribution_combined_balance_1M_to_10M +- active_holders_distribution_combined_balance_10M_to_inf +- active_holders_distribution_combined_balance_total + +
    + +
    + +Percent of active holders distribution combined balance metrics + +- percent_of_active_holders_distribution_combined_balance_0_to_0.001 +- percent_of_active_holders_distribution_combined_balance_0.001_to_0.01 +- percent_of_active_holders_distribution_combined_balance_0.01_to_0.1 +- percent_of_active_holders_distribution_combined_balance_0.1_to_1 +- percent_of_active_holders_distribution_combined_balance_1_to_10 +- percent_of_active_holders_distribution_combined_balance_10_to_100 +- percent_of_active_holders_distribution_combined_balance_100_to_1k +- percent_of_active_holders_distribution_combined_balance_1k_to_10k +- percent_of_active_holders_distribution_combined_balance_10k_to_100k +- percent_of_active_holders_distribution_combined_balance_100k_to_1M +- percent_of_active_holders_distribution_combined_balance_1M_to_10M +- percent_of_active_holders_distribution_combined_balance_10M_to_inf + +
    + +
    + +Active holders distribution combined balance over metrics + +- active_holders_distribution_combined_balance_over_1 +- active_holders_distribution_combined_balance_over_10 +- active_holders_distribution_combined_balance_over_100 +- active_holders_distribution_combined_balance_over_1k +- active_holders_distribution_combined_balance_over_10k +- active_holders_distribution_combined_balance_over_100k +- active_holders_distribution_combined_balance_over_1M + +
    diff --git a/src/content/docs/resources/metrics/supply-distribution/combined-balance-of-labeled-holders/index.mdx b/src/content/docs/resources/metrics/supply-distribution/combined-balance-of-labeled-holders/index.mdx new file mode 100644 index 000000000..2dc8a704c --- /dev/null +++ b/src/content/docs/resources/metrics/supply-distribution/combined-balance-of-labeled-holders/index.mdx @@ -0,0 +1,144 @@ +--- +title: Combined Balance of Labeled Holders Metrics +author: Santiment Team +datePublished: 2024-04-01 +dateModified: 2025-04-30 +--- + +## Definition + +The Combined Balance of Labeled Holders provides a comprehensive overview of the total tokens held by all addresses +with a specific label holding a token across predefined balance intervals. By summing up the token balances of addresses +with designated labels such as exchange, infrastructure, miner, whale, or all, this metric provides insights into +the composition and activities of various participant groups. Whether tracking the influence of exchanges, the +backbone support of infrastructure holders, the mining community, or the presence of large-scale holders (whales), +this metric enables stakeholders to assess the diversity and concentration of ownership. By analyzing these +labeled holders across predefined balance intervals, it becomes possible to discern trends, identify patterns, +and inform strategic decision-making within the cryptocurrency space. + +There are two sets of metrics: holders labeled distribution combined balance and holders labeled negative distribution combined balance +metrics. Holders labeled distribution combined balance metrics encompass all addresses with a specific label, while +holders labeled negative distribution combined balance metrics exclude all addresses with a specific label. + +Combined Balance of Labeled Holders Metrics: + +- `holders_labeled_distribution_combined_balance_` - Total tokens held by all addresses with a specific [label](/metrics/details/supply_distribution_parameters#available-labels) + within a specified balance [interval](/metrics/details/supply_distribution_parameters#available-intervals) +- `holders_labeled_negative_distribution_combined_balance_` - Total tokens held by all addresses that do not contain a specific + [negative label](/metrics/details/supply_distribution_parameters#available-negative-labels), within a specified balance [interval](/metrics/details/supply_distribution_parameters#available-intervals) + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Amount in token + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these assets]() + +> Note: All of the metrics are available for the same set of assets. + +--- + +## API + +Holders labeled distribution combined balance metrics: `holders_labeled_distribution_combined_balance_` + +```graphql explorer +{ + getMetric(metric: "holders_labeled_distribution_combined_balance_1_to_10") { + timeseriesDataJson( + selector: { slug: "ethereum", label: "miner" } + from: "2024-01-01T00:00:00Z" + to: "2024-01-10T00:00:00Z" + interval: "1d" + ) + } +} +``` + +Holders labeled negative distribution combined balance metrics: `holders_labeled_negative_distribution_combined_balance_` + +```graphql explorer +{ + getMetric( + metric: "holders_labeled_negative_distribution_combined_balance_10_to_100" + ) { + timeseriesDataJson( + selector: { slug: "ethereum", label: "nonExchange" } + from: "2024-01-01T00:00:00Z" + to: "2024-01-10T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +
    + +Holders labeled distribution combined balance metrics + +- holders_labeled_distribution_combined_balance_0_to_0.001 +- holders_labeled_distribution_combined_balance_0.001_to_0.01 +- holders_labeled_distribution_combined_balance_0.01_to_0.1 +- holders_labeled_distribution_combined_balance_0.1_to_1 +- holders_labeled_distribution_combined_balance_1_to_10 +- holders_labeled_distribution_combined_balance_10_to_100 +- holders_labeled_distribution_combined_balance_100_to_1k +- holders_labeled_distribution_combined_balance_1k_to_10k +- holders_labeled_distribution_combined_balance_10k_to_100k +- holders_labeled_distribution_combined_balance_100k_to_1M +- holders_labeled_distribution_combined_balance_1M_to_10M +- holders_labeled_distribution_combined_balance_10M_to_inf +- holders_labeled_distribution_combined_balance_total + +
    + +
    + +Holders labeled negative distribution combined balance metrics + +- holders_labeled_negative_distribution_combined_balance_0_to_0.001 +- holders_labeled_negative_distribution_combined_balance_0.001_to_0.01 +- holders_labeled_negative_distribution_combined_balance_0.01_to_0.1 +- holders_labeled_negative_distribution_combined_balance_0.1_to_1 +- holders_labeled_negative_distribution_combined_balance_1_to_10 +- holders_labeled_negative_distribution_combined_balance_10_to_100 +- holders_labeled_negative_distribution_combined_balance_100_to_1k +- holders_labeled_negative_distribution_combined_balance_1k_to_10k +- holders_labeled_negative_distribution_combined_balance_10k_to_100k +- holders_labeled_negative_distribution_combined_balance_100k_to_1M +- holders_labeled_negative_distribution_combined_balance_1M_to_10M +- holders_labeled_negative_distribution_combined_balance_10M_to_inf +- holders_labeled_negative_distribution_combined_balance_total + +
    diff --git a/src/content/docs/resources/metrics/supply-distribution/index.mdx b/src/content/docs/resources/metrics/supply-distribution/index.mdx new file mode 100644 index 000000000..add3aaccb --- /dev/null +++ b/src/content/docs/resources/metrics/supply-distribution/index.mdx @@ -0,0 +1,36 @@ +--- +title: Supply Distribution +author: Santiment Team +datePublished: 2020-08-24 +dateModified: 2024-04-08 +--- + +import Resource from '$components/markdown/Resource.svelte' + +## Our Supply Distribution Metrics + + + +- [Amount of Holders](/metrics/supply-distribution/amount-of-holders) $-$ The number of unique + addresses holding tokens within predefined balance intervals +- [Combined Balance of Holders](/metrics/supply-distribution/combined-balance-of-holders) $-$ The sum + of tokens held across all addresses within a specified balance interval +- [Amount of Labeled Holders](/metrics/supply-distribution/amount-of-labeled-holders) $-$ The number of unique + addresses with a specific label, holding tokens within predefined balance intervals +- [Combined Balance of Labeled Holders](/metrics/supply-distribution/combined-balance-of-labeled-holders) $-$ The sum + of tokens held across all addresses with a specific label within a specified balance interval + + + +## Description + +The supply distribution metric offers a comprehensive view of how the holdings of a particular +token are distributed among its user base across different balance intervals. These +intervals represent predefined ranges of token balances held by individual users. By +examining this metric, observers can identify trends such as whether a significant portion of +the supply is concentrated among a small number of large holders or if the distribution is more +evenly spread across a wider user base. Such insights are valuable for stakeholders, as they +provide crucial information about the level of decentralization within the cryptocurrency network, +potential market liquidity dynamics, and overall ecosystem health. Moreover, understanding supply +distribution aids in assessing the potential impact of large holders on price volatility and market +sentiment, offering valuable insights for investors and analysts. diff --git a/src/content/docs/resources/metrics/supply-on-or-outside-exchanges/index.mdx b/src/content/docs/resources/metrics/supply-on-or-outside-exchanges/index.mdx new file mode 100644 index 000000000..58efa83e4 --- /dev/null +++ b/src/content/docs/resources/metrics/supply-on-or-outside-exchanges/index.mdx @@ -0,0 +1,128 @@ +--- +title: Supply On/Outside Exchanges +author: Ivan +description: Amount and percent of the total supply of coins/tokens held by exchange and non-exchange wallets +datePublished: 2020-04-07 +dateModified: 2025-04-30 +--- + +## Definition + +Supply on or outside exchanges is a measure of the amount of a certain token or cryptocurrency being held on centralized exchanges (CEX) or decentralized exchanges (DEX), and outside exchanges. This metric tracks each part of the token's total supply that is either being circulated or hoarded by the market participants. To do this, we need to monitor and record wallet addresses for each CEX and DEX that holds the token, as well as the rest of the addresses not associated with any exchange. + +This metric showcases the distribution of a specific token or cryptocurrency, indicating its demand as well as the overall market sentiment. It is useful for identifying significant events, like whale accumulation or an increase in the ratio of tokens held on exchanges – which could signal potential sell-offs. + +The following metrics are provided: + +- `Percent of total supply on exchange` - What percent of the coin/token total supply is stored in known centralized exchange (CEX) and decentralized exchange (DEX) wallets +- `Supply on exchanges` - What amount of coins/tokens are stored in known CEX and DEX wallets +- `Supply outside exchange` - What amount of coins/tokens are stored outside known CEX and DEX wallets + +> **Note:** The metrics are computed on the set of publicly known exchange wallets +> and the exchange wallets that Santiment has found by doing analysis. + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +- Percent of total supply on exchanges is measured in `percentage between 0 and 100` +- Supply On/Outside Exchanges is measured in `amount of coins/tokens` + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Change Metrics + +[Change Metrics:](/metrics/details/change_metrics) + +* `percent_of_total_supply_on_exchanges_change_1d` +* `percent_of_total_supply_on_exchanges_change_7d` +* `percent_of_total_supply_on_exchanges_change_30d` + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +- Percent of total supply on exchange is available for [these + assets]() +- Supply on exchanges is available for [these + assets]() + +- Supply outside exchanges is available for [these + assets]() + +--- + +## SanAPI + +Available under the names: + +- `percent_of_total_supply_on_exchanges` +- `supply_on_exchanges` +- `supply_outside_exchanges` + +```graphql explorer +{ + getMetric(metric: "percent_of_total_supply_on_exchanges") { + timeseriesDataJson( + slug: "santiment" + from: "2019-01-01T00:00:00Z" + to: "2019-09-01T00:00:00Z" + interval: "7d" + ) + } +} +``` + +--- + +```graphql explorer +{ + getMetric(metric: "supply_on_exchanges") { + timeseriesDataJson( + slug: "santiment" + from: "2019-01-01T00:00:00Z" + to: "2019-09-01T00:00:00Z" + interval: "7d" + ) + } +} +``` + +--- + +```graphql explorer +{ + getMetric(metric: "supply_outside_exchanges") { + timeseriesDataJson( + slug: "santiment" + from: "2019-01-01T00:00:00Z" + to: "2019-09-01T00:00:00Z" + interval: "7d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/thermocap/index.mdx b/src/content/docs/resources/metrics/thermocap/index.mdx new file mode 100644 index 000000000..3554beca4 --- /dev/null +++ b/src/content/docs/resources/metrics/thermocap/index.mdx @@ -0,0 +1,92 @@ +--- +title: Thermocap +author: Filip +description: Thermocap Metric +datePublished: 2025-11-01 +dateModified: 2025-11-26 +--- + +## Description + +Thermocap is a metric that tracks the total value of coins paid to miners, offering a +clear view of how much a blockchain network spends on its own security. By multiplying +all historical coinbase rewards by their USD value at the time they were mined, thermocap +reflects the real capital that has flowed into sustaining mining operations. Because +miners are responsible for maintaining and securing the network, this aggregated spend +effectively represents the network’s total security budget. + +Thermocap Metrics: + +- `thermocap` - Total historical value of all mining rewards paid to miners +- `mctc` - The ratio comparing a network’s market capitalization to its thermocap + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +- `thermocap` - Amount in USD +- `mctc` - Ratio + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +Available for `bitcoin` + +--- + +### SanAPI + +Available under names: `thermocap` + +```graphql explorer +{ + getMetric(metric: "thermocap") { + timeseriesDataJson( + slug: "bitcoin" + from: "2025-11-01T00:00:00Z" + to: "2025-11-10T00:00:00Z" + interval: "1d" + ) + } +} +``` + +Available under name: `mctc` + +```graphql explorer +{ + getMetric(metric: "mctc") { + timeseriesDataJson( + slug: "bitcoin" + from: "2025-11-01T00:00:00Z" + to: "2025-11-10T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/docs/metrics/top-holders/29_top_holders_options.png b/src/content/docs/resources/metrics/top-holders/29_top_holders_options.png similarity index 100% rename from src/docs/metrics/top-holders/29_top_holders_options.png rename to src/content/docs/resources/metrics/top-holders/29_top_holders_options.png diff --git a/src/docs/metrics/top-holders/30_top_holders_balance.png b/src/content/docs/resources/metrics/top-holders/30_top_holders_balance.png similarity index 100% rename from src/docs/metrics/top-holders/30_top_holders_balance.png rename to src/content/docs/resources/metrics/top-holders/30_top_holders_balance.png diff --git a/src/docs/metrics/top-holders/31_top_holders_percentof.png b/src/content/docs/resources/metrics/top-holders/31_top_holders_percentof.png similarity index 100% rename from src/docs/metrics/top-holders/31_top_holders_percentof.png rename to src/content/docs/resources/metrics/top-holders/31_top_holders_percentof.png diff --git a/src/docs/metrics/top-holders/32_top_holders_changes.png b/src/content/docs/resources/metrics/top-holders/32_top_holders_changes.png similarity index 100% rename from src/docs/metrics/top-holders/32_top_holders_changes.png rename to src/content/docs/resources/metrics/top-holders/32_top_holders_changes.png diff --git a/src/docs/metrics/top-holders/33_top_holders_details.png b/src/content/docs/resources/metrics/top-holders/33_top_holders_details.png similarity index 100% rename from src/docs/metrics/top-holders/33_top_holders_details.png rename to src/content/docs/resources/metrics/top-holders/33_top_holders_details.png diff --git a/src/content/docs/resources/metrics/top-holders/index.mdx b/src/content/docs/resources/metrics/top-holders/index.mdx new file mode 100644 index 000000000..35d96c492 --- /dev/null +++ b/src/content/docs/resources/metrics/top-holders/index.mdx @@ -0,0 +1,126 @@ +--- +title: Top Holders +author: Santiment Team + +headline: 'Top Token Holders: Track 100 Addresses With the Highest Balances' +description: 'Top token holders metric tracks the accumulated balance of the biggest holders of a certain asset, indicating potential market shifts based on their transactions.' +datePublished: 2019-12-03 +dateModified: 2024-01-22 +--- + +`Top Holders` describes a set of up to 100 Ethereum addresses which +have the highest balances at a given time, either in Ether or in a +specific ERC-20 token. The amount of addresses can be reduced, but 100 +is the maximum. So one could analyse the 20 top holders for BAT, as well +as the 100 top holders for ETH. + +Top Holders metrics are calculated daily. + +The top holder metrics can be found under `ETH Top Holders` for Ether +(ETH) itself. To find top holder information about a specific ERC-20 +token, look for `Overview. All ERC-20 tokens`, which will lead you to +a list of all ERC-20 tokens Santiment is currently including in its +calculations. Find the needed token and select `Open Dashboard` in the +very last column, which should be named `Top Holders`. + +As all top holder metrics are shown in the same overview, they share a +set of options: + +![](29_top_holders_options.png) + +- **_`Currency`_** - lets you switch the price from being displayed in + USD to BTC +- **_`HoldersCount`_** - sets the amount of top holders to include, + maximum is 100 +- **_`Hide "remains" status in details`_** - refers only to the fourth + metric listed below and hides specific table rows. See its article for + more information +- **_`Balance in USD`_** - display the top holders balances in amount of + tokens or converted to USD + +### Our current metrics for top holders + +## Top Holders - Balance + +This graph shows the sum of all the top holders balances plotted against +the asset`s price. + +![](30_top_holders_balance.png) + +As you can see, we also display the total balance split by exchange- and +non-exchange wallets. + +The amount of top holders addresses included in the calculation can be +chosen at the top by selecting `HoldersCount`. The HoldersCount in the +above screenshot of BAT's top holders balances is set to 50. +The assets's price can be displayed in USD or BTC, which can be +selected through the `Currency` field at the top. The `Balance in +USD` field lets you switch between displaying the balances in amount of +tokens and displaying them converted to USD. + +## Top Holders - Percent of Total Supply + +This graph shows the relative amount of tokens held by all the top +holders compared to the total amount of tokens in existence, as well as +the asset`s price. + +![](31_top_holders_percentof.png) + +As you can see, we also display the top holder`s share of the total +supply split by exchange- and non-exchange wallets. + +The amount of top holders addresses included in the calculation can be +chosen at the top by selecting `HoldersCount`. The HoldersCount in the +above screenshot of BAT\`s top holders percentage of total supply is set +to 50. +The assets\`s price can be displayed in USD or BTC, which can be +selected through the `Currency` field at the top. + +## Top Holders - Changes + +This graph shows the total number of new addresses entering the top +holders list. + +![](32_top_holders_changes.png) + +The amount of top holders addresses included in the calculation can be +chosen at the top by selecting `HoldersCount`. The HoldersCount in the +above screenshot of BAT`s changes to the top holders list is set to 50. +So at the day shown in the screenshot, three out of 50 addresses where +not in the 50 top holders list the day before. + +The assets\`s price can be displayed in USD or BTC, which can be +selected through the `Currency` field at the top. + +## Top Holders - Details + +It shows detailed data for the top holders for the selected period, sorted by +date (the current day compared to the previous day). + +![](33_top_holders_details.png) + +The **status** column specifies whether the address either (was) + +1. `added` +2. `removed` +3. `remained` unchanged + +from that particular spot in the top holders list on the given day. +Select `Hide "remains" status in details` to toggle on showing the +`remains` status, which will make it easier to see the full list of top +holders accounts for a particular day. + +Along with the rank among the top holders, the table shows **balance** +(the balance of that particular account, in amount of tokens or USD) and +**% of total** (the share of the total token supply this specific top +holders address holds) - both for the day listed and the previous one. + +In case you are having trouble finding specific data points in this +potentially very long list, please consider reducing the time frame - +either by using the options in the upper right corner of the screen or +by selecting a time frame straight in the graph by clicking and dragging +your mouse. The Details list will only show data from the selected time +frame. + +Clicking any top holders address will lead you to its details on +[https://etherscan.io](https://etherscan.io). diff --git a/src/content/docs/resources/metrics/top-transfers/index.mdx b/src/content/docs/resources/metrics/top-transfers/index.mdx new file mode 100644 index 000000000..91ad6f024 --- /dev/null +++ b/src/content/docs/resources/metrics/top-transfers/index.mdx @@ -0,0 +1,73 @@ +--- +title: Top Transfers +author: Yury +description: Get top transfers for a chain address +datePublished: 2022-04-21 +dateModified: 2024-06-25 +--- + +## Definition + +Get top transfers for a chain address +[Example of usage **Top transfers** on Sanbase](https://app.santiment.net/labs/balance?address=0x876eabf441b2ee5b5b0554fd502a8e0600950cfa&assets[]=shiba-inu&from=2021-10-20T19%3A00%3A00.000Z&isLog=false&priceMetrics[]=shiba-inu&to=2022-04-21T18%3A59%3A59.999Z) + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## API + +Available under the `topTransfers` name: + +```graphql +query topTransfers($addressSelector: AddressSelector, $from: DateTime!, $to: DateTime!, $slug: String!, $page: Int, $pageSize: Int = 20) { + transactions: topTransfers( + addressSelector: $addressSelector + page: $page + pageSize: $pageSize + from: $from + to: $to + slug: $slug + ) { + datetime + fromAddress { + address + labels { + name + origin + } + } + toAddress { + address + labels { + name + origin + } + } + trxValue + trxHash + } +} +``` + +Query variables: +```json +{ + "addressSelector": { + "address": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", + "transactionType": "ALL" + }, + "from": "2022-01-17T21:00:00.000Z", + "infrastructure": "ETH", + "page": 1, + "pageSize": 20, + "slug": "ethereum", + "to": "2022-04-18T20:59:59.999Z" +} +``` + +[**Run in explorer**](https://api.santiment.net/graphiql?query=query%20topTransfers(%24addressSelector%3A%20AddressSelector%2C%20%24from%3A%20DateTime!%2C%20%24to%3A%20DateTime!%2C%20%24slug%3A%20String!%2C%20%24page%3A%20Int%2C%20%24pageSize%3A%20Int%20%3D%2020)%20%7B%0A%20%20transactions%3A%20topTransfers(%0A%20%20%20%20addressSelector%3A%20%24addressSelector%0A%20%20%20%20page%3A%20%24page%0A%20%20%20%20pageSize%3A%20%24pageSize%0A%20%20%20%20from%3A%20%24from%0A%20%20%20%20to%3A%20%24to%0A%20%20%20%20slug%3A%20%24slug%0A%20%20)%20%7B%0A%20%20%20%20datetime%0A%20%20%20%20fromAddress%20%7B%0A%20%20%20%20%20%20address%0A%20%20%20%20%20%20labels%20%7B%0A%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20origin%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20toAddress%20%7B%0A%20%20%20%20%20%20address%0A%20%20%20%20%20%20labels%20%7B%0A%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20origin%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20trxValue%0A%20%20%20%20trxHash%0A%20%20%7D%0A%7D%0A&variables=%20%7B%0A%09%09%22addressSelector%22%3A%20%7B%0A%09%09%09%22address%22%3A%20%220xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d%22%2C%0A%09%09%09%22transactionType%22%3A%20%22ALL%22%0A%09%09%7D%2C%0A%09%09%22from%22%3A%20%222022-01-17T21%3A00%3A00.000Z%22%2C%0A%09%09%22infrastructure%22%3A%20%22ETH%22%2C%0A%09%09%22page%22%3A%201%2C%0A%09%09%22pageSize%22%3A%2020%2C%0A%09%09%22slug%22%3A%20%22ethereum%22%2C%0A%09%09%22to%22%3A%20%222022-04-18T20%3A59%3A59.999Z%22%0A%09%7D) diff --git a/src/content/docs/resources/metrics/total-supply/index.mdx b/src/content/docs/resources/metrics/total-supply/index.mdx new file mode 100644 index 000000000..73d615b2d --- /dev/null +++ b/src/content/docs/resources/metrics/total-supply/index.mdx @@ -0,0 +1,130 @@ +--- +title: Total Supply +author: Ante +description: Total Supply Metrics +datePublished: 2023-12-07 +dateModified: 2025-04-30 +--- + + +## Definition + +Total Supply is the total amount of coins or tokens belonging to a particular cryptocurrency +that have been created or mined, and are currently in circulation, including those that may +be locked or reserved. + +Supply in Profit metric is computed by summing all token amounts that were last transferred when +the price of token was less then the current price. + +Percent of Supply in Profit represents the ratio between Supply in Profit and +[Circulation Supply](/metrics/circulation). This metric measures weather the market is in +depression or euphoria stage. If token is breaking all time highs every holder is in profit, +so the metric value is 100%. On the other side, in the bear markets there are usually more then +half of tokens are in loss, so the metric value drops below 50%. + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +- `total_supply` and `total_supply_in_profit` - Token/Coin amount +- `percent_of_total_supply_in_profit` - Percentage + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for for [these assets]() + +> Note: All metrics are available for the same set of assets. + +--- + +## SanAPI + +Total Supply is available under the `total_supply` name. + +```graphql explorer +{ + getMetric(metric: "total_supply") { + timeseriesDataJson( + selector: { + slug: "ethereum" + } + from: "2023-11-01T00:00:00Z" + to: "2023-12-01T00:00:00Z" + interval: "1d" + ) + } +} +``` + +Supply in Profit is available under the `total_supply_in_profit` name. + +```graphql explorer +{ + getMetric(metric: "total_supply_in_profit") { + timeseriesDataJson( + selector: { + slug: "ethereum" + } + from: "2023-11-01T00:00:00Z" + to: "2023-12-01T00:00:00Z" + interval: "1d" + ) + } +} +``` + +Percent of Supply in Profit is available for `percent_of_total_supply_in_profit` name. + +```graphql explorer +{ + getMetric(metric: "percent_of_total_supply_in_profit") { + timeseriesDataJson( + selector: { + slug: "ethereum" + } + from: "2023-11-01T00:00:00Z" + to: "2023-12-01T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +The full list of Total Supply metrics is: + +
    + +Open Metrics List + +- percent_of_whale_stablecoin_total_supply + +
    + diff --git a/src/content/docs/resources/metrics/trading-volume/index.mdx b/src/content/docs/resources/metrics/trading-volume/index.mdx new file mode 100644 index 000000000..d4a3902de --- /dev/null +++ b/src/content/docs/resources/metrics/trading-volume/index.mdx @@ -0,0 +1,101 @@ +--- +title: Trading Volume in USD +author: Ivan +description: Trading Volume in USD +datePublished: 2020-04-07 +dateModified: 2025-04-30 +--- + + +## Definition + +The Trading Volume is the volume in USD traded on exchanges. +The metric is taking into consideration all the trading pairs. The trading pairs that +are not pegged to USD are multiplied by the USD price of the asset. + +Trading Volume in USD metrics: + +- `volume_usd` - 24-hour sliding window trading volume across centralized and decentralized exchanges. + All transactions are converted to USD. The data is sourced from a 3rd party provider. +- `volume_usd_5m` - The same as `volume_usd`, but the data points are aligned at 5 minute intervals and + any gaps are filled with the last known value + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Amount in dollars/usdt/bitcoins + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[Price Latency](/metrics/details/latency#price-latency) + +--- + +## Available Assets + +Available assets for [volume_usd](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22volume_usd%22%29%7B%0A++++metadata%7B%0A++++++availableSlugs%0A++++%7D%0A++%7D%0A%7D) + +--- + +## SanAPI + +### Volume USD + +Available under `volume_usd` and `volume_usd_5m` names + +```graphql explorer +{ + getMetric(metric: "volume_usd") { + timeseriesDataJson( + slug: "ethereum" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +## Full list of metrics + +The full list of GitHub Activity metrics is: + +
    + +Open Metrics List + +- volume_usd +- volume_usd_5m +- volume_usd_change_1d +- volume_usd_change_30d +- volume_usd_change_7d + +
    + diff --git a/src/content/docs/resources/metrics/transacted-coin-acquisition-cost/index.mdx b/src/content/docs/resources/metrics/transacted-coin-acquisition-cost/index.mdx new file mode 100644 index 000000000..a4f4740a5 --- /dev/null +++ b/src/content/docs/resources/metrics/transacted-coin-acquisition-cost/index.mdx @@ -0,0 +1,123 @@ +--- +title: Transacted Coin Acquisition Cost +author: Ivan +description: Track from what price range are coming the coins/tokens moved on a given day +datePublished: 2021-11-19 +dateModified: 2021-11-22 +--- + +## Definition + +For the coins/tokens transacted on a given day, get the price they were acquired +at. Any movement of coins/tokens on-chain is treated as an acquisition. The +metric does not include: + +- Minting/mining/uncle rewards. +- Transactions of coins/tokens that were acquired on the same day. This would + handle most situation with deposit/withdrawal addresses. + - Example: There are two transactions on the same day: `A - 10ETH -> B` and `B + -> 10ETH C` - `B` moves the coins on the same day that they were received. + This second transaction is not counted. + +The total number of coins/tokens that are counted is equal to the [1-day +circulation](/metrics/circulation) (**not** the [transaction +volume](/metrics/transaction-volume)) **minus** the block rewards/uncle +rewards/mints. + +The metric returns a list of prices ranges and a number of coins/tokens that +were last time moved when the price was in that range. The ranges have even +length with the exception of the range that contains the queried day price. This +range is split around that price, resulting in two ranges. This has the benefit +of knowing exactly how many coins/tokens were last time moved when the price was +above or below the queried day price. + +### Example + +Let's take a look at what prices were aquired the bitcoins transacted on 09 November 2021 when bitcoin reached an all time high of over $68,000: + +- `[$low - $high]` - `number of bitcoins` +- `[$0 - $16,886.13]` - ` 9,497.95 ` +- `[$16,886.13 - $33,772.26]` - `1290.67` +- `[$33,772.26 - $50,658.39]` - `14,159.67` +- `[$50,658.39 - $59,987.51]` - `2711.52` +- `[$59,987.51 - ∞]` - `178,339.76` + +It is clear that when the price is at its all time high all of the sellers are profiting but some are profiting much more than others. The majority of the bitcoins were last time moved when the price was in the range $59.9k-$57.5k. But there are 9,497.95 bitcoins that moved last when the price was under $16.9k. + +### Example + +Let's take a look at what prices were aquired the bitcoins transacted on 20 July 2021 when bitcoin reached a local minimum of around $29,000, after reaching to over $64,000 just 3 months before that: +- `[$low - $high]` - `number of bitcoins` +- `[$0 - $15880.41]` - `13586.16` +- `[$15880.41 - $29842.86]` - `694.53` +- `[$29842.86 - $31760.82]` - `52818.93` +- `[$31760.82 - $47641.23]` - `41785.33` +- `[$47641.23 - $63521.64]` - `4693.35` +- `[$63521.64 - ∞]` - `146.27` + +Looking at this data we concule that majority of the bitcoins, around 99.9k or around 87% of all bitcoins transacted, were last moved when the price was higher. This would mean that most of transactions on that day resulted in a loss. + +## Access + +[Restricted Access](/metrics/details/access#restricted-access) + +--- + +## Measuring Unit + +Number coins/tokens per price range + +--- + +## Data Type + +[Histogram Data](/metrics/details/data-type#histogram-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these assets]() + +--- + +## SanAPI + +Available under `price_histogram` and `spent_coins_cost` metric names. Both metrics return exactly the same data. + +```graphql +{ + getMetric(metric: "spent_coins_cost") { + histogramData( + slug: "santiment" + from: "2020-04-07T00:00:00Z" + to: "2020-04-08T00:00:00Z" + interval: "1d" + limit: 10 + ) { + values { + ... on FloatRangeFloatValueList { + data { + range + value + } + } + } + } + } +} +``` + +**[Run in Explorer]()** diff --git a/src/content/docs/resources/metrics/transaction-count/index.mdx b/src/content/docs/resources/metrics/transaction-count/index.mdx new file mode 100644 index 000000000..ae3c757d4 --- /dev/null +++ b/src/content/docs/resources/metrics/transaction-count/index.mdx @@ -0,0 +1,91 @@ +--- +title: Transaction count +author: Boris +description: Amount of transactions on-chain. +datePublished: 2023-03-13 +dateModified: 2025-04-30 +--- + +## Description + +The Transaction Count metric indicates the number of unique transactions occurring on the network +within a specific day. + +As an alternative to the transaction count metric, there's the Payments Count metric, which reflects +the number of individual payments made on the network within a specific day. + +The difference between Transaction Count and Payments Count lies in the scenario where a single +transaction includes multiple transfers. In such cases, the Transaction Count registers this as a single +transaction, while the Payments Count registers each individual transfer within that transaction. + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Amount of transactions + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Interval](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22transactions_count%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) + +> Note: All metrics are available for the same set of assets + +--- + +### SanAPI + +Available under the `transactions_count` name. + +```graphql explorer +{ + getMetric(metric: "transactions_count") { + timeseriesDataJson( + slug: "santiment" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` + +Available under the `payments_count` name. + +```graphql explorer +{ + getMetric(metric: "payments_count") { + timeseriesDataJson( + slug: "santiment" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/transaction-size/index.mdx b/src/content/docs/resources/metrics/transaction-size/index.mdx new file mode 100644 index 000000000..9f1a7b72f --- /dev/null +++ b/src/content/docs/resources/metrics/transaction-size/index.mdx @@ -0,0 +1,74 @@ +--- +title: Transaction Size +author: Filip +description: Transaction Size Metrics +datePublished: 2024-04-01 +dateModified: 2025-04-30 +--- + +## Description + +The Transaction Size Metric calculates the average size and the median size of transactions over a specific +time period. If the average transfer size is increasing, it could suggest that whales are beginning +to move their tokens, either buying or selling. + +Transaction Size Metrics: +- `average_transfer_5m`: Average transaction size over five-minute intervals +- `median_transfer_5m`: Median transaction size over five-minute intervals + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Token/Coin amount + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these assets]() + +> Note: All metrics are available for the same set of assets + +--- + +### SanAPI + +Available under names: `average_transfer_5m` and `median_transfer_5m` + + +```graphql explorer +{ + getMetric(metric: "average_transfer_5m"){ + timeseriesDataJson( + slug: "ethereum" + from: "2024-03-01T00:00:00Z" + to: "2024-03-03T00:00:00Z" + interval: "5m") + } +} +``` diff --git a/src/content/docs/resources/metrics/transaction-volume-in-profit-or-loss/index.mdx b/src/content/docs/resources/metrics/transaction-volume-in-profit-or-loss/index.mdx new file mode 100644 index 000000000..49ec77bde --- /dev/null +++ b/src/content/docs/resources/metrics/transaction-volume-in-profit-or-loss/index.mdx @@ -0,0 +1,101 @@ +--- +title: Transaction Volume In Profit Or Loss +author: Santiment Team +description: Amount of coin/tokens moved on-chain that are in profit or in loss and the ratio between them. +datePublished: 2022-03-30 +dateModified: 2025-05-13 +--- + +## Description + +Those metrics show the aggregate amount of coins/tokens across all transactions on +the network that moved in profit or loss for a given asset in an interval. +There is also a metric which shows the ratio between transaction volume in profit +and transaction volume in loss. + + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Amount of coins/tokens + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +## SanAPI + +Available under the `transaction_volume_in_profit` name. + +```graphql explorer +{ + getMetric(metric: "transaction_volume_in_profit") { + timeseriesDataJson( + slug: "bitcoin" + from: "2025-03-01T00:00:00Z" + to: "2025-03-30T00:00:00Z" + interval: "1d" + ) + } +} +``` + +Available under the `transaction_volume_in_loss` name. + +```graphql explorer +{ + getMetric(metric: "transaction_volume_in_loss") { + timeseriesDataJson( + slug: "bitcoin" + from: "2025-03-01T00:00:00Z" + to: "2025-03-30T00:00:00Z" + interval: "1d" + ) + } +} +``` + +Available under the `transaction_volume_profit_loss_ratio` name. + +```graphql explorer +{ + getMetric(metric: "transaction_volume_profit_loss_ratio") { + timeseriesDataJson( + slug: "bitcoin" + from: "2025-03-01T00:00:00Z" + to: "2025-03-30T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/transaction-volume/index.mdx b/src/content/docs/resources/metrics/transaction-volume/index.mdx new file mode 100644 index 000000000..cd89ac440 --- /dev/null +++ b/src/content/docs/resources/metrics/transaction-volume/index.mdx @@ -0,0 +1,97 @@ +--- +title: Transaction Volume +author: Santiment Team +description: Amount of coin/tokens moved on-chain. +datePublished: 2019-11-21 +dateModified: 2025-05-13 +--- + + +## Description + +The `transaction_volume` metric shows total on-chain amount of coins/tokens transacted for a given asset in a given time interval. + +The `transaction_volume_usd` metric shows the total on-chain amount of coins/tokens in USD transacted for a given asset in a given time interval. +To compute it, the amount of coins/tokens in each transaction is multiplied by the price in USD of the asset at that moment. + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Amount of coins/tokens + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +## Frequency + +- transaction_volume - [Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) +- transaction_volume_usd - [Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +## SanAPI + +Available under the `transaction_volume` name. + +```graphql explorer +{ + getMetric(metric: "transaction_volume") { + timeseriesDataJson( + slug: "bitcoin" + from: "2025-04-01T00:00:00Z" + to: "2025-04-07T00:00:00Z" + interval: "1h" + ) + } +} +``` + +## Full list of metrics + +The full list of Transaction Volume metrics is: + +
    + +Open Metrics List + +- transaction_volume +- transaction_volume_usd +- transaction_volume_change_1d +- transaction_volume_change_30d +- transaction_volume_change_7d +- transaction_volume_usd_change_1d +- transaction_volume_usd_change_30d +- transaction_volume_usd_change_7d + +
    diff --git a/src/content/docs/resources/metrics/trending-words-rank/index.mdx b/src/content/docs/resources/metrics/trending-words-rank/index.mdx new file mode 100644 index 000000000..eb7924c0a --- /dev/null +++ b/src/content/docs/resources/metrics/trending-words-rank/index.mdx @@ -0,0 +1,74 @@ +--- +title: Trending Words Rank +author: Filip +description: Rank of asset in top trending words +datePublished: 2022-06-01 +dateModified: 2025-04-30 +--- +## Definition + +Trending Words Rank is build on top of the [Social Data](/metrics/details/social-data). + +Trending Words Rank for an asset represents position of that asset based on top +trending words score. +Data for asset and some time interval only appears if asset for that time +interval is in top trending words. + +Please note that metrics may undergo changes in historical values due to automated recalculations triggered monthly. We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. + + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Ordinal number + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + + +--- + +## Latency + +[Social Data Latency](/metrics/details/latency#social-data-latency) + +--- + +## Available Assets + +Available for [these +assets]() + + +--- + +## SanAPI + +Available under the `trending_words_rank` name. + +```graphql explorer +{ + getMetric(metric: "trending_words_rank") { + timeseriesDataJson( + slug: "santiment" + from: "2022-05-01T00:00:00Z" + to: "2022-05-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/unique-social-volume/index.mdx b/src/content/docs/resources/metrics/unique-social-volume/index.mdx new file mode 100644 index 000000000..ca6d82609 --- /dev/null +++ b/src/content/docs/resources/metrics/unique-social-volume/index.mdx @@ -0,0 +1,134 @@ +--- +title: Unique Social Volume +author: Ivan +description: The amount of messages/documents containing a given search term without spam +# REF metrics-hub/metricshub/unique_social_volume.py +datePublished: 2021-07-14 +dateModified: 2025-07-10 +--- + +## Definition + +Unique Social Volume is build on top of the [Social Data](/metrics/details/social-data). + +The **Unique Social Volume** is the same type of aggregation on top of the +social data as the **Social Volume**, but it takes into account only the unique +text documents for each interval, i.e. completely duplicated messages will be +excluded from the calculations, which results in a slightly lower and to some +degree cleaner way to measure the volume of mentions for a given asset or word. + +There are two separate metrics for the unique social volume: + +- unique_social_volume_total_5m +- unique_social_volume_total_1h +- unique_social_volume_total_1d + +The `5m`, `1h` and `1d` control what range of data is used. If some spam messages are +posted in the span of 30 minutes, then every one of the six 5-minute buckets would have +one copy of that message. In the case of `1h` all these messages would be reduced +to a single one, thus providing more aggresive spam filtering. + +When comparing `unique_social_volume_total_1h` and +`unique_social_volume_total_5m` aggregated at `1h` intervals, the +`unique_social_volume_total_1h` will always have less or equal values. + +We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Amount of distinct documents that mention the given text pattern. + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) +[One-Hour Intervals](/metrics/details/frequency#hourly-frequency) + +--- + +## Latency + +[Social Data Latency](/metrics/details/latency#social-data-latency) + +--- + +## Available Assets + +Available for [these assets]() + +> Note: All the unique social volume metrics are available for the same set of assets. + +--- + +## SanAPI + +Available under the: +- unique_social_volume_total_5m +- unique_social_volume_total_1h +- unique_social_volume_total_1d +- unique_social_volume_telegram_5m +- unique_social_volume_telegram_1h +- unique_social_volume_telegram_1d +- unique_social_volume_reddit_5m +- unique_social_volume_reddit_1h +- unique_social_volume_reddit_1d +- unique_social_volume_twitter_5m +- unique_social_volume_twitter_1h +- unique_social_volume_twitter_1d +- unique_social_volume_bitcointalk_5m +- unique_social_volume_bitcointalk_1h +- unique_social_volume_bitcointalk_1d +- unique_social_volume_4chan_5m +- unique_social_volume_4chan_1h +- unique_social_volume_4chan_1d +- unique_social_volume_farcaster_5m +- unique_social_volume_farcaster_1h +- unique_social_volume_farcaster_1d + + +### Unique Social Volume computed on 5 minute intervals + +```graphql explorer +{ + getMetric(metric: "unique_social_volume_total_5m") { + timeseriesDataJson( + selector: { slug: "santiment" } + from: "2017-11-01T00:00:00Z" + to: "2020-12-31T00:00:00Z" + interval: "1w" + ) + } +} +``` + +--- + +### Unique Social Volume computed on 1 hour intervals + +```graphql explorer +{ + getMetric(metric: "unique_social_volume_total_1h") { + timeseriesDataJson( + selector: { slug: "santiment" } + from: "2017-11-01T00:00:00Z" + to: "2020-12-31T00:00:00Z" + interval: "1w" + ) + } +} +``` diff --git a/src/docs/metrics/velocity/bitcoin-velocity.png b/src/content/docs/resources/metrics/velocity/bitcoin-velocity.png similarity index 100% rename from src/docs/metrics/velocity/bitcoin-velocity.png rename to src/content/docs/resources/metrics/velocity/bitcoin-velocity.png diff --git a/src/docs/metrics/velocity/ethereum-velocity.png b/src/content/docs/resources/metrics/velocity/ethereum-velocity.png similarity index 100% rename from src/docs/metrics/velocity/ethereum-velocity.png rename to src/content/docs/resources/metrics/velocity/ethereum-velocity.png diff --git a/src/content/docs/resources/metrics/velocity/index.mdx b/src/content/docs/resources/metrics/velocity/index.mdx new file mode 100644 index 000000000..3ec429218 --- /dev/null +++ b/src/content/docs/resources/metrics/velocity/index.mdx @@ -0,0 +1,90 @@ +--- +title: Velocity +author: Santiment Team +description: Average number of times a coin/token changes wallets each day +datePublished: 2019-11-21 +dateModified: 2025-04-30 +--- + +> For a more in-depth explanation of `Velocity`, please click +> [here](/metrics/velocity/velocity-technical). + +--- + +## Definition + +The metric shows the average number of times that a coin/token changes wallets +each day. + +Simply put, a higher velocity means that a coin/token is used in transactions +more often within a set time frame. + +Velocity can be used to explain various noteworthy events in the life of a +project. For example, here's Ethereum: + +![ethereum-velocity](./ethereum-velocity.png) + +Notice the steep drop off? + +The increased activity (and subsequent dip) correlates squarely to a huge ETH +mixer that operated between March 2017 and March 2018. During that time, coins +were moved a lot between addresses which lead to big velocity spikes. + +Once the mixer was liquidated, token velocity toppled back to 'normal' levels, +where it's remained ever since. + +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +A non-negative number of times coin/token changes wallet + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily Intervals](/metrics/details/frequency#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +## SanAPI + +Available under the `velocity` name. + +```graphql explorer +{ + getMetric(metric: "velocity") { + timeseriesDataJson( + slug: "santiment" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/velocity/velocity-technical.mdx b/src/content/docs/resources/metrics/velocity/velocity-technical.mdx new file mode 100644 index 000000000..4b9ad9011 --- /dev/null +++ b/src/content/docs/resources/metrics/velocity/velocity-technical.mdx @@ -0,0 +1,57 @@ +--- +title: Velocity - Technical +author: Valentin +datePublished: 2020-04-08 +dateModified: 2022-12-14 +--- + +`Velocity` is a metric which estimates the average frequency at which the +tokens change hands during some period of time. It mimics to a large extent the +[Money Velocity](https://en.wikipedia.org/wiki/Velocity_of_money) metric. +å In order to understand how we +compute this metric, let's see an example in which Alice, Bob and Charlie +exchange tokens. Let's assume that Alice gives Bob 10 tokens at block 1 and Bob +gives Charlie 10 tokens at block 2. The total transaction volume which is +generated for block 1 and 2 is $10 + 10 = 20$, but we can easily see that the +same 10 tokens have been transacted, so the amount of tokens being in +circulation is actually $10$. We can say that the `Token Velocity` for blocks 1 +and 2 is $20 / 10 = 2$, which means that the transacted tokens have changes +hands twice during these blocks. + +_In order to understand how all this can be tracked, you should read [the article about the token age consumed](/metrics/age-consumed/age-consumed-technical)._ + +## Formal definition + +In order to define this metric formally we need to establish some definitions: + +- $vol(a, t)$ - amount of tokens going **out** of address $a$ at block $t$ +- $vol(t) = \sum_{a} vol(a,t)$ - amount of tokens going out of all addresses in + block $t$ +- $blocks(d) = {t_1, t_2, ..., t_n}$ - the set of all blocks produced during day + $d$. For ETH these are usually 5760 blocks + +We also need a metric to measure the amount of tokens that are in circulation +for a given day. To compute this we will use the metric describe here: +[/metrics/details/stack-coin-age-model/](/metrics/details/stack-coin-age-model/). In this +article we have a definition for $token\_circulation(t,1\ hour, token)$, let's +not specify the $token$ as this is something which we assume is fixed. Let's +define the token circulation for a given day, as the circulation in the last +block of the day: + +$$ +last\_block(d) = max_{t_i \in blocks(d)}(t_i) +$$ + +$$ +token\_circulation(d, timespan) = token\_circulation(last\_block(d), timespan) +$$ + +Now we can define the `Token Velocity` at day $d$ as: + +$$ +vel(d) = \frac{\sum_{t \in blocks(d)} vol(t)}{token\_circulation(d, 1\ day)} +$$ + +Which is the total token volume divided by the amount of tokens in circulation +during that day. A similar approach can be taken if we want to compute the +metric on a weekly or monthly basis. diff --git a/src/content/docs/resources/metrics/whale-transaction-count/index.mdx b/src/content/docs/resources/metrics/whale-transaction-count/index.mdx new file mode 100644 index 000000000..0b70fb7a6 --- /dev/null +++ b/src/content/docs/resources/metrics/whale-transaction-count/index.mdx @@ -0,0 +1,85 @@ +--- +title: Whale Transaction Count +author: Santiment Team +description: Amount of coin/tokens moved on-chain by whales. +datePublished: 2022-07-27 +dateModified: 2025-04-30 +--- + +## Description + +This metric shows the number of transactions whose value in USD is above a given threhsold. +There are two metrics available: +- `whale_transaction_count_100k_usd_to_inf` - The count of all transactions whose USD value is above $100,000 +- `whale_transaction_count_1m_usd_to_inf` - The count of all transactions whose USD value is above $1,000,000 +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +Count of transactions + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Change Metrics + +[Change Metrics](/metrics/details/change_metrics) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +## SanAPI + +The metrics are available under the following names: +- `whale_transaction_count_100k_usd_to_inf` +- `whale_transaction_count_1m_usd_to_inf` + +In addition, there following change metrics are available: +- `whale_transaction_count_100k_usd_to_inf_change_1d` +- `whale_transaction_count_100k_usd_to_inf_change_7d` +- `whale_transaction_count_100k_usd_to_inf_change_30d` +- `whale_transaction_count_1m_usd_to_inf_change_1d` +- `whale_transaction_count_1m_usd_to_inf_change_7d` +- `whale_transaction_count_1m_usd_to_inf_change_30d` + +```graphql explorer +{ + getMetric(metric: "whale_transaction_count_100k_usd_to_inf") { + timeseriesDataJson( + slug: "santiment" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/whale-transaction-volume/index.mdx b/src/content/docs/resources/metrics/whale-transaction-volume/index.mdx new file mode 100644 index 000000000..c4c156207 --- /dev/null +++ b/src/content/docs/resources/metrics/whale-transaction-volume/index.mdx @@ -0,0 +1,70 @@ +--- +title: Whale Transaction Volume +author: Santiment Team +description: USD Volume of coin/tokens moved on-chain by whales. +datePublished: 2024-12-06 +dateModified: 2025-04-30 +--- + +## Description + +This metric shows the total volume of transactions whose value in USD is above a given threhsold. +There are two metrics available: +- `whale_transaction_volume_100k_usd_to_inf` - The volume of all transactions whose USD value is above $100,000 +- `whale_transaction_volume_1m_usd_to_inf` - The volume of all transactions whose USD value is above $1,000,000 +--- + +## Access + +[Restricted Access](/metrics/details/access#restricted-access). + +--- + +## Measuring Unit + +USD + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [these +assets]() + +--- + +## SanAPI + +The metrics are available under the following names: +- `whale_transaction_volume_100k_usd_to_inf` +- `whale_transaction_volume_1m_usd_to_inf` + +```graphql explorer +{ + getMetric(metric: "whale_transaction_volume_100k_usd_to_inf") { + timeseriesDataJson( + slug: "bitcoin" + from: "2020-04-01T00:00:00Z" + to: "2020-04-07T00:00:00Z" + interval: "1d") + } +} +``` diff --git a/src/content/docs/resources/metrics/xrpl-metrics/assets-issued/index.mdx b/src/content/docs/resources/metrics/xrpl-metrics/assets-issued/index.mdx new file mode 100644 index 000000000..bbc3f835f --- /dev/null +++ b/src/content/docs/resources/metrics/xrpl-metrics/assets-issued/index.mdx @@ -0,0 +1,86 @@ +--- +title: Assets Issued Metrics +author: Boris +description: Descriptions about the assets issued metrics +datePublished: 2023-03-13 +dateModified: 2025-04-30 +--- + +## Description + +We track the issued assets under two metrics: + +- **Total assets issued** - total number of issued assets through time +- **Number of new assets issued** - tracks only the new assets issued per day + +We would count an asset as part of this metric only if the issuer has more than 100 active trustlines at the time the asset is issued. + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Amount of assets + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily frequency](/metrics/details/frequency/#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for: +- `total_assets_issued` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22total_assets_issued%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) +- `daily_assets_issued` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22daily_assets_issued%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) + +--- + +### SanAPI + +Available under the `total_assets_issued` name. + +```graphql explorer +{ + getMetric(metric: "total_assets_issued") { + timeseriesDataJson( + slug: "xrp" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + ) + } +} +``` + +Available under the `daily_assets_issued` name. + +```graphql explorer +{ + getMetric(metric: "daily_assets_issued") { + timeseriesDataJson( + slug: "xrp" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/xrpl-metrics/dex-volume/index.mdx b/src/content/docs/resources/metrics/xrpl-metrics/dex-volume/index.mdx new file mode 100644 index 000000000..3c2aa293d --- /dev/null +++ b/src/content/docs/resources/metrics/xrpl-metrics/dex-volume/index.mdx @@ -0,0 +1,75 @@ +--- +title: DEX volume +author: Boris +description: XRPL DEX trading volume +datePublished: 2023-03-13 +dateModified: 2025-04-30 +--- + +## Description + +DEX volume tracks the exchange volume at the XRPL Decentralized Exchange. The volume includes all trades where at least one of the assets in the pair have recently traded against XRP. + +`dex_volume_in_usd_5m` measures CLOB volume in USD equivalent. + +`dex_volume_in_xrp_5m` measures CLOB volume in XRP coins. + +`dex_amm_volume_in_xrp_5min` measures AMM volume in XRP coins. + +`dex_amm_volume_in_usd_5min` measures AMM volume in USD coins. + +All four metrics are available only for the `xrp` asset. + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +XRP tokens and USD + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for [xrp only](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22dex_volume_in_usd_5m%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) + +--- + +### SanAPI + +Available under the `dex_volume_in_usd_5m`, `dex_volume_in_xrp_5m`, `dex_amm_volume_in_xrp_5min` and `dex_amm_volume_in_usd_5min` names. + +```graphql explorer +{ + getMetric(metric: "dex_volume_in_usd_5m") { + timeseriesDataJson( + slug: "xrp" + from: "2024-07-01T00:00:00Z" + to: "2024-07-07T00:00:00Z" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/xrpl-metrics/index.mdx b/src/content/docs/resources/metrics/xrpl-metrics/index.mdx new file mode 100644 index 000000000..27b0a92f3 --- /dev/null +++ b/src/content/docs/resources/metrics/xrpl-metrics/index.mdx @@ -0,0 +1,27 @@ +--- +title: XRPL Chain metrics +headline: "XRP Analysis & Metrics: The Only XRPL Blockchain Data Provider" +description: "Discover XRP analysis and metrics from Santiemnt, the only XRPL blockchain data provider who partnered with the Ripple team. Gain in-depth insights into XRP performance." +author: Boris +datePublished: 2023-03-13 +dateModified: 2025-09-03 +--- + +## XRPL Metrics + +The [XRP Ledger (XRPL)](https://xrpl.org/) is a decentralized, public blockchain led by a global developer community. + +Santiment provides key metrics about the XRPL Chain which are listed below: + +### Holder Metrics + +- [Number of accounts](/metrics/xrpl-metrics/number-of-accounts) +- [Number of new accounts created](/metrics/network-growth/) + +### Activity Metrics + +- [DEX Volume](/metrics/xrpl-metrics/dex-volume) +- [Number of transactions](/metrics/transaction-count) +- [Number of assets issued](/metrics/xrpl-metrics/assets-issued) +- [Number of active trustlines](/metrics/xrpl-metrics/trustline-count) +- [Liquidity in XRPL AMM Pools](/metrics/xrpl-metrics/liquidity-amm-pools) diff --git a/src/content/docs/resources/metrics/xrpl-metrics/liquidity-amm-pools/index.mdx b/src/content/docs/resources/metrics/xrpl-metrics/liquidity-amm-pools/index.mdx new file mode 100644 index 000000000..5ccf6b81a --- /dev/null +++ b/src/content/docs/resources/metrics/xrpl-metrics/liquidity-amm-pools/index.mdx @@ -0,0 +1,91 @@ +--- +title: Liquidity in XRPL AMM Pools +author: Ante +description: XRPL AMM liquidity metrics +datePublished: 2024-07-29 +dateModified: 2025-04-30 +--- + +## Description + +We track two metrics related to AMM liquidity: + +- **Liquidity in XRPL AMM Pool by Pair** - the total amount of liquidity for specific asset in pool. +- **Liquidity in XRPL AMM Pool by Asset** - the total amount of tokens in all AMM pools for specific asset. + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Amount of tokens. + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily frequency](/metrics/details/frequency/#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for: +- `liquidity_in_amm_pools_by_pair` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22liquidity_in_amm_pools_by_pair%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) +- `liquidity_in_amm_pools_by_asset` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22liquidity_in_amm_pools_by_asset%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) + +--- + +### SanAPI + +Available under `liquidity_in_amm_pools_by_pair` name. + +```graphql explorer +{ + getMetric(metric: "liquidity_in_amm_pools_by_pair") { + timeseriesDataJson( + selector: { + slug: "xrp" + owner: "XRP" + label: "XRP-rXmagwMmnFtVet3uL26Q2iwk287SRvVMJ/MAG" + } + from: "2024-07-01T00:00:00Z" + to: "2024-07-07T00:00:00Z" + ) + } +} +``` + +Available under the `liquidity_in_amm_pools_by_asset` name. + +```graphql explorer +{ + getMetric(metric: "liquidity_in_amm_pools_by_asset") { + timeseriesDataJson( + selector: { + slug: "xrp" + owner: "XRP" + } + from: "2024-07-01T00:00:00Z" + to: "2024-07-07T00:00:00Z" + ) + } +} +``` diff --git a/src/content/docs/resources/metrics/xrpl-metrics/number-of-accounts/index.mdx b/src/content/docs/resources/metrics/xrpl-metrics/number-of-accounts/index.mdx new file mode 100644 index 000000000..250a178dc --- /dev/null +++ b/src/content/docs/resources/metrics/xrpl-metrics/number-of-accounts/index.mdx @@ -0,0 +1,120 @@ +--- +title: Number of accounts +author: Boris +description: Metrics related to accounts +datePublished: 2023-03-13 +dateModified: 2025-04-30 +--- + +## Description + +- **Total number of accounts** - Counts all addresses which hold XRP token across time. It is computed by summing all holder distribution metrics. Holder distribution metrics are computed on top of balances table. +- **Number of active accounts** - Tracks the number of addresses which have either sent or received XRP token in a previous 30, 60 or 90 days. It is computed on top of balances table. +- **Number of accounts with minimum reserves** - computed by summing all holder distribution metrics except the following groups: + - 0-0.001 + - 0.001-0.01 + - 0.01-0.1 + - 0.1-1 + - 1-10 + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Amount of accounts + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +- **Total number of accounts** - [Daily frequency](/metrics/details/frequency/#daily-frequency) +- **Number of active accounts** - [Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) +- **Number of accounts with minimum reserves** - [Daily frequency](/metrics/details/frequency/#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for: +- `holders_distribution_total` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric:%20%22holders_distribution_total%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) +- `active_addresses_30d` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric:%20%22active_addresses_30d%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) +- `active_addresses_60d` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22active_addresses_60d%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) +- `active_addresses_90d` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22active_addresses_90d%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) + +--- + +### SanAPI + +Available under the `holders_distribution_total` name. + +```graphql explorer +{ + getMetric(metric: "holders_distribution_total") { + timeseriesDataJson( + slug: "xrp" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + ) + } +} +``` + +Available under the `active_addresses_30d` name. + +```graphql explorer +{ + getMetric(metric: "active_addresses_30d") { + timeseriesDataJson( + slug: "xrp" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + ) + } +} +``` + +Available under the `active_addresses_60d` name. + +```graphql explorer +{ + getMetric(metric: "active_addresses_60d") { + timeseriesDataJson( + slug: "xrp" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + ) + } +} +``` + +Available under the `active_addresses_90d` name. + +```graphql explorer +{ + getMetric(metric: "active_addresses_90d") { + timeseriesDataJson( + slug: "xrp" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + ) + } +} +``` \ No newline at end of file diff --git a/src/content/docs/resources/metrics/xrpl-metrics/trustline-count/index.mdx b/src/content/docs/resources/metrics/xrpl-metrics/trustline-count/index.mdx new file mode 100644 index 000000000..d3ea54990 --- /dev/null +++ b/src/content/docs/resources/metrics/xrpl-metrics/trustline-count/index.mdx @@ -0,0 +1,84 @@ +--- +title: Trustline Count Metrics +author: Boris +description: Descriptions about the trustline count metrics +datePublished: 2023-03-13 +dateModified: 2025-04-30 +--- + +## Description + +We track two metrics related to trustline count: + +- **Total number of trustlines** - the total amount of active trustline through time. +- **Net trustlines created** - change in number of active trustlines on a daily basis. + +--- + +## Access + +[Free Access](/metrics/details/access#free-access) + +--- + +## Measuring Unit + +Amount of trustlines + +--- + +## Data Type + +[Timeseries Data](/metrics/details/data-type#timeseries-data) + +--- + +## Frequency + +[Daily frequency](/metrics/details/frequency/#daily-frequency) + +--- + +## Latency + +[On-Chain Latency](/metrics/details/latency#on-chain-latency) + +--- + +## Available Assets + +Available for: +- `total_trustlines_count` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22total_trustlines_count%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) +- `daily_trustlines_count_change` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22daily_trustlines_count_change%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) + +--- + +### SanAPI + +Available under the `total_trustlines_count` name. + +```graphql explorer +{ + getMetric(metric: "total_trustlines_count") { + timeseriesDataJson( + slug: "xrp" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + ) + } +} +``` + +Available under the `daily_trustlines_count_change` name. + +```graphql explorer +{ + getMetric(metric: "daily_trustlines_count_change") { + timeseriesDataJson( + slug: "xrp" + from: "2020-01-01T00:00:00Z" + to: "2020-01-07T00:00:00Z" + ) + } +} +``` diff --git a/src/docs/changelog/legacy-changelog/dd_chart_layouts_sort.gif b/src/docs/changelog/legacy-changelog/dd_chart_layouts_sort.gif deleted file mode 100644 index 635bf83db..000000000 Binary files a/src/docs/changelog/legacy-changelog/dd_chart_layouts_sort.gif and /dev/null differ diff --git a/src/docs/changelog/legacy-changelog/index.md b/src/docs/changelog/legacy-changelog/index.md deleted file mode 100644 index 2053bf760..000000000 --- a/src/docs/changelog/legacy-changelog/index.md +++ /dev/null @@ -1,1366 +0,0 @@ ---- -title: Legacy Development changelog -description: Keep track of development updates, new product features and other items from our changelog -author: Santiment Team -date: 2022-04-20 ---- - -Keep track of development updates, new product features and other items from our changelog. -We update this page every two weeks or more frequently. - -## February 2024 - -**General** - -- The winners of the New Year Campaign had a chance to learn alpha in private calls with Santiment founder and market analysts. -- Affiliate program is relaunched, -- BTC ETF volumes dashboard is live, -- Gini Index and Annual Inflation Rate dashboard is live, -- Santiment daily metrics framework gets 10x faster. -- BNB-chain-based tokens data pipeline is fixed, Santiment is providing BNB chain data again. Limitations apply. -- Santiment Feed expands to Google News: -- Active SanR validator nodes count increased to 30, -- An application for creating manual signals for buying and selling, SanR, has been upgraded to a completely new version. SanR v2 is live on - -**New assets** - -- On Arbitrum: KUJI, SPA, XAI. -- On Avalanche: COQ, HEC. -- On BNB Chain: AI, BABYBONK, ELDA, GTAI, KICKS, MF, NFP, OFN, PALM, SQR, TLC. -- On Ethereum: ALT, BANANA, BBANK, BEAM, BOTTO, CAH, CHEQ, DEL, DMTR, FLIP, GHX, IMPT, KUJI, LMWR, MAVIA, MEME, ML, OGV, ONDO, OVR, PAAL, PEPE2.0, POL, PORK, SAVM, SHRAP, STFX, TET, TLOS, TOKEN, TRVL, VIC, ZKB. -- On Polygon: ASK, CPR, FAR, FYN, KASTA, WIFI. -- Other: 1000SATS, AFC, ANALOS, CETUS, CLEG, DYM, ERG, EXFI, FEVR, FLIX, GMMT, GRUM, IOT, ISLM, JOY, JTO, JUP, KLEVA, KMA, KYVE, LING, MANTA, MNDE, MOBILE, MPLX, MYRO, NAP, OMAX, PROP, PYTH, PZP, SEI, SILLY, SSWP, STIK, TRA, UX, WEN, WIF, WLKN, ZETA. - -## December 2023 - -**Sanbase** - -- The explorer page now has more advanced filtering capabilities, including recently viewed items, likes, and your own creations. -- The feed can be filtered by the projects you specify -- A more comprehensive explorer page, backed by robust filtering options, is now fully supported on our mobile version. -- We are constantly looking to enhance our analytics. We invite you to suggest a Twitter account at -- Our updated Social Trends feature now includes an AI-generated summary of a chosen trend. -- Additional Social Trends updates include Trending Tokens and Alpha Narratives -- We have added support for Apple Pay and Google Pay -- The issue with the profile picture upload has been fixed - -**Charts** - -- We have expanded the metrics interval setting by adding more intervals -- We have added these new chart metrics: Total Supply in profit, Percent of Total Supply in profit, RSI 4h, RSI 1d, and RSI 7d - -**New assets** - -- On Arbitrum: arb-arbdoge-ai, arb-frax, arb-magic-internet-money, arb-pendle -- On BNB Chain: bnb-asta, bnb-binance-idr, bnb-cyberconnect, bnb-first-digital-usd, bnb-planettoken, bnb-tokpie, bnb-altura, bnb-avalanche, bnb-benft-solutions, bnb-chaingpt, bnb-cheelee, Bnb-open-campus, bnb-floki-inu, bnb-frax, bnb-hello-labs, bnb-lovely-inu, bnb-magic-internet-money, bnb-milc-platform, bnb-paxos-standard, bnb-strikecoin, bnb-trueusd, bnb-usdd -- On Ethereum: katana-inu, gho, lootbot, moonbot, paypal-usd, wagie-bot, turbo, grok-erc, symbiosis-finance, leisuremeta, across-protocol, propchain, wagmi-game-2, cere-network, crustnetwork, cyberconnect, elysia, planettoken, echelon-prime, pointpay, radworks, harrypotterobamapacman8inu, maverick-protocol, mantle, pendle, quiztok, rollbit-coin, render, stader, unibot-eth, worldcoin-org, mongcoin, 0x0-ai-ai-smart-contract, adreward, arkham, airtor-protocol, bad-idea-ai, harrypotterobamasonic10inu-eth, combo-network, crvusd, coinweb, dacxi, dione-protocol, first-digital-usd, hippocrat, l, milady-meme-coin, lybra-finance, doge-killer, smardex, shib-original-vision, tamadoge, wall-street-bet, delysium, akita-inu, ava, big-time, dora-factory-new, fasttoken, havah, izumi-finance, myria, rektcoin, wall-street-memes -- On Optimism: o-cyberconnect, o-frax, o-worldcoin-org, o-kwenta -- On Polygon: p-orbcity, p-binance-usd, p-frax, p-dust-protocol, p-nakamoto-games, p-sportx, p-dimo, p-rebel-bots, p-carrieverse -- On Avalanche: a-binance-usd, a-multi-collateral-dai, a-frax, a-magic-internet-money, a-trueusd, a-usd-coin, a-tether -- Other: statter-network, pip, gari, defi-kingdoms, access-protocol, as-roma-fan-token, atletico-de-madrid-fan-token, galatasaray-fan-token, gleec, bald, bricks, lukso-network, moon, xdc-network, alex-lab, aleph-zero, dynex, neon, cannation, finschia, memetic, onomy-protocol, neutron-ntrn, ordinals, oxbt, planetwatch, snek, sui, alephium, bonk1, comtech-gold, evadore, superwalk, indigo-protocol, inter-milan-fan-token, minswap, ordi, roa-core, celestia - -## April 2022 - -`06.04.22 - 20.04.22` - -**Sanbase** - -- New assets: ATOLO, INSUR, MV, SENATE, STANDARD, STG, WMT, XCN, XDEFI -- Fix creating alerts from Watchlists / Screeners / Charts / Balance pages - -**Alerts** - -- Update Alert’s Explore page -- Update Alert’s Preview -- Alert’s matching metrics conditions fix -- Update alert’s notification flow - -**Charts** - -- Main selector supports chain addresses -- Add recently shown assets -- 2 new metrics: Contract Interacting Addreses, Contract Transactions Count - -Last 2 weeks we made many fixes for our Alerts. Our Alerts notifications and preview work better now. - -🎉🎉🎉 Finally We have added new selector for our Charts tool. You can remember our Charts as a great analytics tool for ERC20 or many other type of assets, but now it’s much advanced tool. You can do a research of any chain addresses on supported blockchains In the closed future we will add social metrics for some type of smart contracts like erc721. - -Example: - -1. [https://app.santiment.net/s/rk-8It-D](https://app.santiment.net/s/rk-8It-D) (BoredApeYachtClub (BAYC) Contract) - -You can see 2 available metrics: - -- Contract Interecting Addresses -- Contract Transactions Count - -Actually it’s not only for contract, it works for any address. -I am really appreciate any feedback. -Disclaimer new 2 metrics for our addresses have slow performance. -Loaded time can be up to 1 minute. Sorry. - -### `30.03.22 - 6.04.22` - -**Sanbase** - -- New assets: ALI, FRTS, GENE, TT, ZIG -- New TopBar added to Watchlists / Screeners / Addresses -- Add comments and likes to Watchlists / Screeners / Addresses -- Fix Alert’s creating issues -- Fix treemap chart issues - -**Charts** - -- Embedded chart live preview -- Embedded chart shared data access - -**Academy** - -- Update cookies preferences -- Add Alerts use cases - -![Embed chart dialog](https://user-images.githubusercontent.com/25135650/162019025-e3aecb38-c1cb-4abc-a281-4e45084c8894.jpg) - -## March 2022 - -**Sanbase** - -- New assets: 1ECO, ALPINE, GMT, LAZIO, MCONTENT, THG, TREEB, XFL, WTRX, APE, HI, RPG, POLC -- Alert creation bug fixed -- Add Cardano Onchain Metrics () - -**Charts** - -- Combined metrics section in the sidebar -- “Top Transaction Table” sorting fixed -- “Smoothing” sharing fixed -- Fullscreen-freeze bug fixed -- Asset’s market cap and rank info in the top header -- New master asset selector -- New metrics: - - Daily On-Chain Transaction Volume in Profit - - Daily On-Chain Transaction Volume in Loss - - The Ratio of Daily On-Chain Transaction Volume in Profit to Loss - -- Add Master selector blockchains’ filter -- Ctrl+K (Cmd+K) shortcut for opening master selector - -**Insights/Charts** - -- Performance improvements -- New comments features: - - Bold, italic, links - - Type \$ for assets suggestions - - Type @ to mention an user - - Type # to link a trend - -**Screeners/Watchlists** - -- New Screener's Filters: Mvrv 7d, 60d, 90d -- You can like and comment any public watchlist or screener. One more step for our community. - -## February 2022 - -**Sanbase** - -- New assets added: ASTR, CCX, WRLD, XCAD -- User info added to profile dropdown -- Create alert bug fixed -- Profile page fixed -- Watchlist Addresses bugs fix -- Updated Cookies policy dialog -- Follow/Unfollow inside profile page bug fixed -- NEW Metric on Sanbase - Social Volume AI. - -**Charts** - -- Fix empty data issue when Exchanges 2.0 metrics were combined -- Combined metrics’ project locking fix -- Open Edit/Save dialog by clicking on the layout name in the header -- Displaying amount of available metrics - -We exited to announce our new social metric - Social Volume AI. This metric is alternative to Social Volume. For old metric we have a simple algorythm to detect an asset per message. New metric computed using Natural Language Processing (NLP) technique such as Named Entity Recognition (NER). Our trained NER model can process large amount of social data and extract from it mentions about crypto assets. -Look at [https://app.santiment.net/s/0UQIX6NU](this metric) - -## December 2021 and January 2022 - -**Sanbase** - -- New assets: APX, BTT, CBK, CUBE, DESO, DG, DOBO, FORM, GF, GFI, GLMR, HERO, HOO, HYDRA, ISP, KILT, LOOKS, MAGIC, ONUS, OOKI, OUSD, POSI, RISE, SHILL, SIDUS, SOS, THN, YIME, TONCOIN, VADER, VOXEL, VR, ZUM -- Updated Create chart layout link -- NFT metrics (NFT Harbor) -- added on-chain data for Dogecoin DOGE - -**Watchlist** - -- "Copy", "Save as", "Clear all" action buttons added to Watchlists - -**Alerts** - -- New Fresh UI of Alerts Master 🤡 -- Updated Share modal for alerts -- Updated notifications channels. You can set up any public channel as a notification source. -- Added new type selector for alert modal -- Added asset categories tabs -- Added ability to create Social trends alert with any word -- Fixed Social trends alert creation -- Fixed creating different types of alert -- Fixed Edit button on a signal card -- Fixed signal card title when a user is not logged in - -**Academy** - -- Navigation from Academy to Sanbase become better. - -## November 2021 - -### `17.11.21 - 26.11.21` - -**Watchlist** - -- Quick action `delete` button with `undo` added. -- `Save as` menu item changed to `Duplicate` with new icon (Also in `Screener`) - -**Sanbase** - -- New assets: ASM, BANANA, BLCT, BSW,, CUSD, DDX, DERC, DOGEDASH, EURT, HAI, KAR, LGCY, METIS, MPL, NFT, PLSPAD, SFUND, SGB, SHFT, SNL, SPS, SSV, SSX, TKING, USDX, WHALE, WNCG, XSGD -- Nightmode styles fixes - -**Alerts** - -- Fixed some bugs on Alerts page - -**Charts** - -- Add Layout comments -- Charts header tool bar is updated. We make it more compact - -### `10.11.21 - 17.11.21` - -**Sanbase** - -- New assets: ALT, BLOK, BNX, DAR, DPR, DVI, GAFI, IMX, KLV, LAT, LN, MC, OOE, PEAK, PSP, RMRK, RVP, SAFE, SAMO, SAPP, SPH, STARL, SUN, TABOO, TOKE, WILD -- Main navigation items resorted, "Signals" and "Explore screeners" moved (internal update) - -**Screener** - -- Add one more filter option - Weighted Sentiment (Total) -- Bar chart, X-axis label position centered - -**Charts** - -- New sidebar open/close toggle -- `Insights` category -- All derivative metrics made public - -## October 2021 - -### `14.10.21 - 10.11.21` - -**Sanbase** - -- New assets: AI, ARV, ATLAS, BETA, BRY, BTRST, CFG, CFI, CIRUS, DHV, DOE, ENS, FLUX, FONT, GODS, HERO, JOE, KLIMA, LSS, MIM, PDEX, PHB, POLIS, PYR, QRDO, RACA, RBC, SDN, TFL, WEMIX, XIO -- Fixed Screener performance issues -- Fixed 404/Broken pages -- Fixed Charts small bugs -- Added new metric Santiment - -**Weighted Sentiment Total** - -(eg.[https://app.santiment.net/s/lE6Y9IjH](https://app.santiment.net/s/lE6Y9IjH)) - -- Added more derivatives! New FTX Funding Rate (Available for _beta_) - -### `07.10.21 - 13.10.21` - -**Sanbase** - -- New assets: DORA, NWC, KOK, IF, RBN, YLD - -**Insights** - -- Embedding charts in the article - -## September 2021 - -### `30.09.21 - 06.10.21` - -**Charts** - -- Sticky notes - -**Insights** - -- Make better search experience -- Add new Search Results Page - -**Sanbase** - -- Fresh Home page - -### `23.09.21 - 29.09.21` - -**Charts** - -- Adding emojis to chart; -- Drawings' visibility toggle - -### `16.09.21 - 22.09.21` - -**Sanbase** - -- New assets: DAFI, PPAY, YGG, RAZE, ZLW, LUSD, FAB, XCH, XPRT - -**Charts** - -- `Transacted Coin Acquisition Cost` available for all users -- New bitcoin metrics: `Exchanges v2.0` - -### `09.09.21 - 15.09.21` - -**Sanbase** - -- New assets: DYDX, SENSO, TTT, EGR, YOUC, URUS, ORC, XEC, DFI - -**Charts** - -- Combining project locked metrics -- Metric's axis max/min settings -- Saving `Shared axis` state -- [Beta only] `Spent Coin Cost` histogram on chart - -### `02.09.21 - 08.09.21` - -**Sanbase** - -- New assets: MOBX, O3, PLA, DG, BIT, AGLD, NPX, VEGA, BIFI, MOVR - -**Charts** - -- Layouts stability improvements -- Layout's sidebar items quick actions: `edit` and `Save to my library` -- "Embed chart" available for all users - -### `26.08.21 - 01.09.21` - -**Sanbase** - -- New assets: BIN, SLIM, SLRS, TULIP, MNGO -- Enhanced webinars widget - -**Charts** - -We've enhanced our Charts layout. It is more compact, clean and powerful. - -- Better sidebar's search -- Updated shortcuts dialog with more useful shortcuts -- Sidebar layouts explorer -- "Combine metrics" has passed beta testing, it's available for all users -- "Reapply metric" action in metric's options menu - -## August 2021 - -`19.08.21 - 25.08.21` - -**Sanbase** - -- New assets: FEI, TRIBE, RARE, CHART, JULD - -**Charts** - -- `Average Gas Used in Gwei` metric -- \[Beta only\] Embed chart - ![](https://user-images.githubusercontent.com/24521041/131119924-412b0f73-7d0f-4c79-bbad-78815aae9a45.gif) -- \[Beta only\] `Binance Exchange Funding Rates (USDT)`, `Binance Exchange Funding Rates (BUSD)` metrics - -`12.08.21 - 18.08.21` - -**Charts** - -- `Top holders` setting for `Supply held by … addresses` metrics -- Highlighting metric with opened settings - -`05.08.21 - 11.08.21` - -**Sanbase** - -- New assets: PIPT, HYVE, GMEE, GALA, CGG, CLV, EFI, FCL, FEAR, C98 - -**Charts** - -#### Combined metrics - -\[Beta only\] -![](https://user-images.githubusercontent.com/24521041/131119917-cd8c36d0-bc47-49d5-9f9a-db758f23c340.gif) - -- `My chart layouts` sorted by the edit date - -`29.07.21 - 04.08.21` - -Migrated [neuro.santiment.net](https://neuro.santiment.net) —> [api.santiment.net](https://api.santiment.net) - -**Sanbase** - -- Screener: enhance ALL/ANY combinators in filters - -**Charts** - -- Stability improvements -- Closing fullscreen chart with the `Esc` key -- Supply distribution merged metrics' compact labels -- `Active Addresses` values' domain adjusted - -## July 2021 - -`14.07.21 - 28.07.21` - -**Sanbase** - -- New assets: SKILL, STEP, FOX, MVI, WSG, DPET, MIST, ALPACA -- Exchanges filter in Screener: `ANY` selector by default -- `Explore address watchlists` category in watchlists navigation dropdown - -**Sanbase Charts** - -- Offsetting tooltip position when it blocks the hovered area -- Displaying values' difference in tooltip when selecting area and holding Shift key - ![](https://user-images.githubusercontent.com/24521041/127341368-602cd1cb-c9e1-4e7e-81ad-c3d93002c01d.gif) - -`07.07.21 - 14.07.21` - -**Sanbase** - -- New assets: DAWN, TOTM, DEXE, ILV -- Exchange filter in Screener - -**Sanbase Charts** - -- Updated mapview UI -- Increased granularity for Active Deposits, Deposit Transactions, Withdrawal Transactions metrics -- New metric: Active Withdrawals -- Positive/Negative Bars style option for BitMEX Perpetual Contract Funding Rate metric -- “Recent Chart Layouts" bug fix - -`30.06.21 - 07.07.21` - -**Sanbase** - -- Labels for sender/receiver in Latest transactions and Top transactions table in Wallet Balance tool -- Live This Week In Crypto Widget - -**Sanbase Charts** - -- Automatic short/live links -- Supporting drawings in the downloaded png -- "Project in Trends" signal as a subitem of the "Social Volume" metric (for non BTC/ETH assets) -- Candles' width fix - -## June 2021 - -`23.06.21 - 30.06.21` - -**Sanbase** - -- New assets: MINA, CQT, SLP, PNY, TIME, RNO, NDX -- Update webinars section -- Fix ATH signals -- Notifications & Profile Page UI improvements - -**Sanbase Charts** - -- Undoing changes by pressing CMD/CTRL + Z -- Redoing changes by pressing CMD/CTRL + SHIFT + Z - ![](https://user-images.githubusercontent.com/24521041/127341515-a57498b0-6dcb-4dc1-85a6-a3e2214edd8c.gif) -- Supply Distribution labeled by number of addresses widget - ![](https://user-images.githubusercontent.com/24521041/127335518-d2116a4a-62d1-4452-a818-6be52e2bc7db.png) - -`16.06.21 - 23.06.21` - -**Sanbase** - -- Fix trx hash link in Recent transactions -- Add Top transactions table to the Wallet Address Tool - ![](https://user-images.githubusercontent.com/24521041/123233913-25b1b500-d4e3-11eb-9ed2-49aaef15f9a7.png) - -**Sanbase Charts** - -- Color picker HEX input -- Smoothing setting for all Social metrics; -- MVRV USD intraday renamed to MVRV Ratio Intraday - -`09.06.21 - 16.06.21` - -**Sanbase** - -- Home page UI improvements - -**Sanbase Charts** - -- New color picker -- "Weighted sentiment" metrics' smoothing -- “Download as PNG” button in chart's controls bar - -`02.06.2021 - 09.06.2021` - -**Sanbase** - -- New coins: GTC, ATA, CVX, HAPI -- Support datetime on Social Trends Page: [/labs/trends?datetime=2021-06-04T12:04:21Z](https://app.santiment.net/labs/trends?datetime=2021-06-04T12:04:21Z) - -**Sanbase Charts** - -- Stability improvements -- "Stablecoins" asset - ![](https://media.giphy.com/media/XTX186r2ZeQkUBNcfk/source.gif) -- "Keyboard Shortcuts" panel - ![](https://user-images.githubusercontent.com/24521041/123233337-a8864000-d4e2-11eb-8e06-a8b9165c5687.png) -- Metric's loading indicator -- "Presenter mode" for a clean chart view - ![](https://media.giphy.com/media/zF9cLlvalQWkrvCDku/source.gif) -- Labelling metrics with tickers in downloaded PNG -- "Supply Distribution" merged metrics’ MA indicators support -- \[Beta only\] Reordering chart’s metrics by using drag and drop - ![](https://media.giphy.com/media/uoy6WD4LIvjCVMzNUo/source.gif) - -`26.05.2021 - 02.06.2021` - -**Sanbase** - -- New coins: BRG, WEST, CSPR, LOWB, TRU, UNCX, RAY, ID, TRIAS -- New Sessions control panel [https://app.santiment.net/account#sessions](https://app-stage.santiment.net/account#sessions) -- Add Shared axis toggle on Social Tool page -- Add `Social tool` and `Social Trends` to the Navigation → Dashboards -- `Notifications` dropdown in header - ![image](https://user-images.githubusercontent.com/522287/120511618-3d5db800-c3d3-11eb-9f02-968fa4277de1.png) - -**Screener** - -Add new filter option -`Rank` -![Untitled-2](https://user-images.githubusercontent.com/522287/120509618-582f2d00-c3d1-11eb-8644-e4736512c015.png) - -**Charts** - -- Notable metrics - ![image](https://user-images.githubusercontent.com/522287/120517024-a85dbd80-c3d8-11eb-8440-74264108008c.png) -- Auto-update toggle - ![image](https://user-images.githubusercontent.com/522287/120516795-6af93000-c3d8-11eb-9148-729ebce8360f.png) -- “Holdings on the top exchanges" widget -- Searching metrics by group name - ![image](https://user-images.githubusercontent.com/522287/120516208-c840b180-c3d7-11eb-8dc0-f32ffcbee3ae.png) -- New metrics: “Circulation NVT”, “Percent of Stablecoin Total Supply held by Whales with more than 5 million USD” -- Normalizing “'MVRV USD intraday” values -- **Fix:** preserving metric’s settings after un/lock - -**Sanbase Mobile** - -- Add recently used metrics - ![image](https://user-images.githubusercontent.com/522287/120517317-01c5ec80-c3d9-11eb-8182-be12eb48968a.png) - -## May 2021 - -`19.05.2021 - 26.05.2021` - -**Sanbase** - -Introducing **Charts v3** 📈👋 - -- Better performance -- Displaying search suggestions in the sidebar -- Mark metric as a favorite directly in the sidebar -- Metrics’ compact layout -- Quick settings access by clicking on the metric - ![](https://media.giphy.com/media/2cQiNEFfdy4tIKztHf/source.gif) - ![](https://media.giphy.com/media/PJFgKCfAuH1U6GBhjP/source.gif) - -`12.05.2021 - 19.05.2021` - -**Sanbase** - -- Fix historical balance page crash from top claimers table -- Fix watchlist & screener loader for anon user -- Fix stories crash on mobile app -- Minor changes of Keystakeholder Signals -- 2 more mini charts on Screener/Watchlists 1d/30d Price Changes - ![image](https://user-images.githubusercontent.com/522287/118840637-424d4280-b8d0-11eb-8668-398f2bd8d476.png) - -`28.04.2021 - 12.05.2021` - -**Sanbase** - -- New coins: NFY, BOSON, ICE, MIST, MTHD, SMTY, SAKE, URQA, MOB, BAKE, SPORE - -## April 2021 - -`21.04 - 28.04` - -**Sanbase** - -- New coins: DOGEFI, FORTH, KISHU, XEND, ELON, OHM, OMI -- Home page: updated recents block, conversations feed. -- Signals in widget 'Key Stakeholder Signals' are sorted by marketcap. - -**Hunters** - -**_Welcome to our new DApp _** - -What is Hunters app? -> [https://www.notion.so/santiment/Introducing-Wallet-Hunters-A-decentralized-platform-for-crowdsourced-market-intelligence-777586562ced436682125816eb206c63](https://www.notion.so/santiment/Introducing-Wallet-Hunters-A-decentralized-platform-for-crowdsourced-market-intelligence-777586562ced436682125816eb206c63) - -How distribution reward works? -> [https://www.notion.so/santiment/WalletHunters-Reward-Distribution-14c7ad8f39684024970814fa051631a7](https://www.notion.so/santiment/WalletHunters-Reward-Distribution-14c7ad8f39684024970814fa051631a7) - ---- - -Hunters App is **BETA**. When you are trying the SAN hunters app that you agree with BETA behavior. Some of the features can work with bugs, lags or some of them can be changed completely in the Release version. - -`14.04 - 21.04` -Sanbase - -- New coins: K21, TLM, EPNS, VISR, SRK, GS, ZCX -- New header navigation -- Home page “Conversations” widget -- Top Holders Table: “Part of Total” values as percentages -- Screener: Allowing to save the whole table as a .csv -- Charts: Loading and performance optimizations for big chart layouts -- Charts: Adjusted "Weighted Sentiment" metrics' auto-interval -- Fix: Watchlist links "/assets/all" & "/assets/erc20” -- Fix: Screener column save -- Fix: Alerts bugfixes for some metrics/watchlists - -`07.04 - 14.04` -Sanbase - -- New coins: CFX, MDX, TKO, SHOPX, RAGE, BLANK, AIOZ, 10SET, NFTX, LQTY, KTN -- Address watchlist: More assets columns in table, Asset distribution column - ![image](https://user-images.githubusercontent.com/24521041/115566326-d1ac0980-a2c2-11eb-8828-5ed2ac9f5bb6.png) -- Add [Key Stakeholder Signals](https://app.santiment.net/#stakeholders) widget - ![image](https://user-images.githubusercontent.com/24521041/115566435-e9838d80-a2c2-11eb-9ede-571f368c0770.png) -- Update 'Quick start guide' -- Move metrics from beta state (labeled holders widget is still in beta) -- Fix trial subscription status -- Fix labels on Historical balance tool -- Fix 1d resolution on mobile charts - -`31.03 - 07.04` - -Sanbase - -- New coins added: EPS, ATD, FMG, USDF, TIDAL, RAMP, QIUCK, CONV, POLK, MARSH, CELL, FST, STN, BLES, GLQ -- Screener new filters and columns: Network Realized Profit/Loss, Whale transaction count -- Fix bug for empty watchlist screen, update infographics after screener filter changes -- Add labeled holders widget(for ETH/ERC20) -- Alerts: Add more metrics - -## March 2021 - -`24.03 - 31.03` - -Sanbase - -- New coins added: STR, L3P, KONO, PKF, COVER, BAMBOO, PROPS, VRA, BANK, NFT, ERN, KLAY -- New in Watchlists: dynamic columns (as in screener), server-side pagination, horizontal scroll -- Increased speed of 'eth spent overview' table ('Key stats' tab on ETH chart page) -- Address watchlist: fixed bug with dublicates in addresses -- Add table 'Top Holders' table -- Add metrics 'whale_transaction_count_100k_usd_to_inf' and 'whale_transaction_count_1m_usd_to_inf' -- Add anchor(link) for sheets templates on home page - -`17.03 - 24.03` - -Sanbase - -- 'Fees Distribution' in metrics sidebar for Ethereum -- You can save notes for any addresses in your watchlists. Addresses watchlist table: 'Notes' column, horizontal scroll -- Charts: Price metric new visualisation type – [Candles](https://app.santiment.net/s/YCt8Wk0R) - ![image](https://user-images.githubusercontent.com/24521041/115565626-32871200-a2c2-11eb-8c05-305d81786870.png) - -`10.03 - 17.03` - -Sanbase - -- Social: show social volume for last day, fix asset's detection -- Screener: 'Explore watchlists' category as new Screener's entry point -- Charts: update the structure of metrics tree -- DEXes dashboard: chart shows price of selected asset -- Historical Balance: "Assets USD distribution" and "Current balance" widgets - -`03.03 - 10.03` - -Sanbase - -- Add `BTC/ETH` infographics in screener -- `Create alert` button in feed -- Move `Edit assets/Addresses` to table header -- Open watchlist after creation -- User's favorite chart metrics category -- Axis values readability improved - -`25.02 - 03.03` - -Sanbase - -- Add sharing link for cabinet section: [https://app.santiment.net/#cabinet](https://app.santiment.net/#cabinet) -- Reset 'Error' view on page change -- Add metric 'mvrv_usd_z_score' -- Chart's stability improved - -SanSheets - -- Added a new function for marketcap (`SAN_MARKETCAP`) which uses the `marketcap_` getMetric metric - -## February 2021 - -`17.02 - 24.02` - -Sanbase - -- Add metric: Whale Transaction Count - Number of Transactions Transferring More Than 100k USD -- 'Explore screeners' category in Navigation Header Dropdown -- Charts - - Metrics’ stability improved - - Customizable axes - - New auto-hide/lock sidebar flow -- Bugfixes - - Alerts with wrong settings - - Infographics loading on screener - -SanSheets - -- Social volume metric: Add twitter as a source, add TOTAL source - -`11.02 - 17.02` - -Sanbase - -- Alerts: - - Absolute/percent settings for wallet's alert - - LTC/BCH/XRP addresses in wallet's tracker -- Screener: Enhance share popup, horizontal scroll for big tables -- Beta: Dashboard "ETH Token Trading Analysis" - -`04.02 - 10.02` - -SanSheets - -- SAN_PRICES will be deprecated in the future -- New functions: SAN_PRICE_VOLUME, SAN_PRICE - -Sanbase - -- Alerts has new available metrics: - - - Holders distributions - - Whale transaction count - - Bitmex - - Mean age - - Mean dollar invested age - - NVT - - Withdrawal transactions - -- Home page: Show percent changes for recent watchlists/screeners -- Screener: reorder columms ability, saving table sorting, fix flow metrics names - -`27.01 - 03.02` - -Sanbase - -- Add zero step app's new version upgrade -- Add new ETH 2.0 ROI widget -- New category "addresses" in "My watchlists" -- Drag and drop chart rearrangement in the Mapview - ![d&d_chart_layouts_sort](dd_chart_layouts_sort.gif) -- Allowing to draw on chart for non-beta users - -Screener: - -- 200+ new columns (all metrics that supported in filter) -- Fix "Circulation 180 \$" filter + percent filter for that - -## January 2021 - -`20.01 - 27.01` - -- Historical balance: New Money Flow chart -- Mobile & Tablet & Laptop styles many fixes -- Bug fix: dashboard's charts - -`14.01 - 20.01` - -**Sanbase** - -Charts & Dashboards - -- New metric "MVRV USD intraday" -- New dashboard [Ethereum 2.0 Staking Analytics](https://app.santiment.net/eth2) -- Custom interval selector for dashboard charts - -Screener & Watchlists - -- "Newest first" my watchlists & screeners sorting in navigation dropdown -- Screener table loading improvements: server-side pagination and sorting -- /watchlists and /assets pages stability improved -- Watchlists and Screener pages SEO links - -Santrends - -- Trends table stability improved - -Fixes - -- Metamask login -- Dashboards: mobile & tablet versions improvements - -`24.12 - 13.01` - -**Sanbase** - -Alerts - -- Add MVRV metrics -- Add Network Profit Loss - -Screener - -- Autorefresh toggle in Screener and Watchlist table -- Bug fix: Correct sorting for percent columns in Screener - -- Bug fix: Social_active_users, miners_balance metrics -- Bug fix: Chart Layout with empty title(?) -- Bug fix: Checkout form night mode styles -- Bug fix: Show the latest price on social tool - -**Sansheets | Santiment plugin for Google sheets** - -- Add SAN_HOLDERS_DISTRIBUTION (projectSlug, from, to, balance, interval) -- Add SAN_BITMEX_PERPETUAL_CONTRACT_FUNDING_RATE (projectSlug, from, to, interval) -- Add SAN_NETWORK_PROFIT_LOSS (projectSlug, from, to, interval) - -## December 2020 - -`17.12 - 23.12` - -Screener - -- Ability to filter assets through your watchlists - -Santrends - -- New design for trends page/table - -Alerts - -- New metric 'Network profit/loss' - -Account settings - -- Show monthly usage of API calls - -Historical balance - -- Address’ labels, comments and latest transactions -- Recently viewed “Chart layouts” on home page -- Lookup wallets using global search -- Watchlists for addresses - -`10.12 - 16.12` - -New home page for the Sanbase app is here! -Now you can easily navigate to your personal watchlists, screeners, exclusive PRO features and more, directly from our home page. - -Charts: - -- “Exchange Balance” settings added -- Data from Coinbase wallets added to Exchange metrics (Inflow/Outflow/Flow Balance) for ETH and ERC20 projects - -Screener & Watchlists - -- New "save as" button for community watchlists + description field -- Added settings for alert frequency -- Fixed a Firefox bug with small Infographics -- Two-way table scrolling -- Saving indicator in the header - -Historical balance - -- Fixed project infrastructure - -Sanbase - -More data on Santiment -We start tracking Coinbase erc20 wallets. - -Charts - -- Chart layouts stores the color settings -- New MVRV visualisation -- More contrast axes in the night mode -- Assets selector has a new category "DeFi" -- Add Recents Chart Layouts to desktop navigation dropdown - -## November 2020 - -Sanbase - -- Added 'sign in with Google' option -- New topics added to Social Trends widgets on the home page -- Watchlist & Screener | 'Recent' category added to desktop navigation dropdown - -Charts - -- Draw straight lines on the chart by holding “Shift” while using the draw tool -- Fixed the “Spent Coin Cost” widget - -Mobile - -- Watchlists & Screener | Added a mini price chart next to each asset, supports 24h, 7d and 30d range - ---- - -Charts - -- Allowing to draw on charts for beta users -- Cursor mode toggle -- New share flow - -![](./how-to-draw.gif) - ---- - -Charts: - -- New metrics: average/median fees (only for ethereum) -- Small fixes - ---- - -Sanbase has a New Plan! This Plan is the perfect for **Crypto Lords**! - -What's inside? - -- All in PRO and -- Dedicated account manager -- Basic API 300k API calls -- Closed Webinars with Santiment Analytics -- Closed chat with Santiment market analysts -- Custom education & onboarding - ---- - -Watchlist & Screener page: - -- Rename & save as actions -- Copy assets to watchlist & save as watchlist table actions -- Price graph 7 days column -- Infographics available for watchlists. -- Screener has new one infographic: Volume and Marketcap -- Screener has a new 'Age consumed' filter - -Charts: - -- Labelling all metrics with a project’s ticker -- Select project’s metrics for comparison in a sidebar -- New Metric 'Dev. Activity Contributors Count' - -Sanbase: - -- Historical balance/Alerts now has support BTC/LTC and other wallets -- Uni Dashboard New Navigation and charts -- Add help&feedback button - -Fixes: - -- Fixed responsive mode of home page - ---- - -- Charts | Allowing to change metric’s style -- Charts | Moving Average indicators for bar metrics -- Charts | Supporting BTC addresses in Top Transactions Table -- Watchlist | Full-width layout -- Screener | Outside percent filter -- “BTC locked on ETH” dashboard - -## October 2020 - -- Account Settings | Limit of notification per day setting; -- Historical Balance | Performance and loading speed improved; -- Stablecoins Dashboard | Exchange inflow/outflow chart added; -- Uniswap Dashboard | 30d period setting for the Top claimers table; -- Stablecoins and Uniswap Dashboard | Top exchanges table added; -- Charts | Moving average indicators for line metrics; -- Charts | Displaying MVRV as % -- Charts and Screener | Supporting short URL sharing -- Charts | Studio’s chart performance improved -- Charts | Displaying MVRV timebounds as % -- Charts | Correctly displaying alerts on different scales -- Charts | Unlocked cursor when holding “Alt” -- Charts | Add metric Dormant Circulation -- Insights | (For authors) Manual selection of minichart’s project -- Dashboards | Add 'Sushiswap' to DEXs list on DEX dashboard, add 'ctrl+click' for metrics for dashboards charts -- Insights and Sanbase | Fresh insight's card design and likes logic -- Screener | Optimize loading data for infographics -- Alerts | Add mvrv 365d/180d metrics support -- Halloween event is coming -- Fees distribution: Ability to see distribution for selected day -- Top holders on exchanges: More readable balances -- Bug fixes. - -## September 2020 - -- New Uniswap Dashboard -- Uniswap Dashboard | Date selection for the “UNI Flow Balances” widget; -- Uniswap Dashboard | Update top claimers table: transaction volume inflow/outflow; -- Several app bug fixes. -- New global search. Simultaneous lookup for assets, trending words, insights and popular users -- Move all metrics from API Custom plan to Pro -- Add BTC top transactions table -- New metric SAN_ACTIVE_ADDRESSES_24H available for SanSheets -- Charts | “Top Token Transactions” table now supports BTC; -- Charts | “Price DAA Divergence” and “Adjusted Price DAA Divergence” widgets (available only for beta users); -- Charts | Supporting negative bars visualization (e.g. Price DAA Divergence) -- Charts | Add more labels for transactions table(this table also works for BTC) -- Charts | Add new Active Addresses 1h & 24h metrics -- Charts | MVRV is displayed using a gradient line -- Charts | “Exchange Inflow/Outflow” metrics’ exchange setting now has exchanges divided into 2 categories: CEX and DEX -- Charts | Add Dex Volume and Trade Amount metrics -- Charts | Add new Price-DAA Divergence metrics: `price_daa_divergence`, `adjusted_price_daa_divergence` -- Charts | Search submetrics(Twitter Followers 24h, Socail active users, etc) in metrics search, -- Charts | New metric Social Active Users -- Charts | "Exchange Inflow" and "Exchange Outflow", You can choose specific exchange -- Charts | More sanfam users added to the “Sanfam Insights” -- Charts | Chart performance improved -- Charts | Supply Distribution Combined Balance widget -- Charts | Supply Distribution percentage metric’s label and value are appended with the ‘%’ sign -- Screener | New filter category `Flow metrics` with 34 new filters; -- Screener | Fix some problems of "Compare" -- Screener | New metrics: Social volume %, Mean dollar inv. age (only %), Circulation (180d) in USD, Exchange inflow in USD, Exchange outflow in USD, Supply on Exchanges (as % of total supply) -- Screener | Search input for Market Segments filter -- Screener & Watchlists | New "compare" feature, which makes life easier to compare assets from your list -- Screener | UX improvement | Open operator by default (when add a new filter) -- Screener | Screener tab in the main navigation -- Screener | Add change metrics for Social Volume, Sentiment and Social Dominance -- Screener | 3 new filters: inside channel, outside channel, inside % channel -- Screener | Pro popup -- Screener | Search for metrics in filter -- Screener | Toggle "Only active filters" -- Screener | Changes in ui -- Screener | Various fixes around screener signals -- Alerts | Fix the master of the historical balance alert -- Add navigation on Stablecoins Dashboard -- Stablecoin Dashboard - the Stablecoin Hub - -- API performance optimizations. Fixed issue in available metrics caching which will prevent API performance degradation over time. -- Add new labeled balance and flow metrics: - Ex. Eth & Uniswap - [https://tinyurl.com/y5zrc4lp](https://tinyurl.com/y5zrc4lp) - Social Active Users metric - [https://tinyurl.com/yyycjjcg](https://tinyurl.com/yyycjjcg) - -``` - "miners_balance", - "genesis_balance", - "dex_trader_balance", - "defi_balance", - "dex_balance", - "cex_balance", - "withdrawal_balance", - "deposit_balance", - "proxy_balance", - "whale_balance", - "makerdao_bite_keeper_balance", - "makerdao_cdp_owner_balance", - "proxy_balance", - "miners_to_exchanges_flow", - "exchanges_to_miners_flow", - "miners_exchange_balance", - "whales_to_exchanges_flow", - "exchanges_to_whales_flow", - "whales_exchange_balance", - "dex_traders_to_exchanges_flow", - "exchanges_to_dex_traders_flow", - "dex_traders_exchange_balance", - "defi_to_exchanges_flow", - "exchanges_to_defi_flow", - "defi_exchange_balance", - "dex_traders_to_dexes_flow", - "dexes_to_dex_traders_flow", - "dex_traders_dex_balance", - "dex_traders_to_cexes_flow", - "cexes_to_dex_traders_flow", - "dex_traders_cex_balance", - "dex_traders_to_defi_flow", - "defi_to_dex_traders_flow", - "dex_traders_defi_balance", - "genesis_to_exchanges_flow", - "exchanges_to_genesis_flow", - "genesis_exchange_balance", - "other_to_exchanges_flow", - "exchanges_to_other_flow", - "other_exchange_balance", - "unlabeled_to_labeled_flow", - "labeled_to_unlabeled_flow", - "unlabeled_to_unlabeled_flow", - "labeled_to_labeled_flow", - "unlabeled_balance", - "all_known_balance" -``` - -## August 2020 - -- Charts | Insights layout on the Charts tool -- Charts | Related Asset's Insights on the Asset's Detailed Page -- Charts | Small fixes for Chart Layouts (Remove Duplication Action) -- Charts | CMD + SHIFT + CLICK - Add metric to the new chart -- Charts | New metric - Defi total value locked in USD (ETH, for beta users) -- Charts | Supply Distribution is available in Search for metrics -- Charts | Make more visible Insigths on the chart -- Charts | Add more categories for Insights -- Charts | Chart layout hot fix -- Charts | More labels on Top Token Transactions -- Charts | Chart’s right axis padding -- Charts | Interval setting for the bar metrics -- Charts | Displaying insights for the selected chart’s time frame -- Charts | "Top Transactions Table" is now available in metrics search by its name or “ttt” abbreviation -- Charts | Interval setting for line metrics -- Charts | Showing only backend-available intervals -- Charts | Hiding tooltip when future ticks are hovered -- Charts | Supply Distribution has Merge tool now -- Screener | Add suggestions for some filters -- Screener | Small updates for visualisations -- Screener | New metric in the Filter "Network Growth" with % changes -- Screener | You can edit/save as your screener -- Screener | Small improvements/fixes of visualisations -- Screener | Add new metrics: Market Segments, Transaction Volume USD, Circulation (180d), BitMEX Perpetual Contract Funding Rate, Dormant Circulation (1y) -- Sanbase | Update Recent highlights -- Santrends | Fix bugs with compare feature -- Insights | Popular authors -- Metrics | NEW: Transaction Volume in USD -- Update Navbar Header | New dropdown for Chart layouts -- Rename Watchlist in the Navigation Bar to Market -- Insights | You can see new category - Only for PRO users -- Update User's dropdown in the Navigation Barj - -## July 2020 - -**`Sanbase`**: - -- New | Santiment Screener is here! -- Insights has new home page -- Watchlist & Screener has new column "Market segments" - -- New metric | Top transactions table (It's connected metric with Transaction volume) -- New metric | Bitmex Basis Ratio -- New metric | Supply distribution (You can add more than one Supply Distributions in your chart layout) -- You can apply any chart layout from your watchlist -- We add settings for the watermark for our charts. -- Webhooks for alerts works with Discord. - -- New metric | Sentiment Weighted -- On Alerts page we add the featured list of alerts. It's a good examples of usage -- Add keyboard navigation in all search by assets. ![](https://media.giphy.com/media/lqLdJ505muGP88kXJs/giphy.gif) -- Fix when search list was empty -- Add formatting for Exchange Balance metric -- Fixes for tooltip UX -- Fixes for Alpha reports -- Fixes Login/Create an account Flow -- Shift swapped to CMD + Click for Transactions Table -- The huge update for Santiment Charts. There is much more flexibility to setup your own dashboard based on Santiment metrics. -- Fix watchlists stats on mobile -- Fix search order on Sanbase -- Add more keyboard shortcuts -- CMD + Click {Charts Page} on Holder Distribution list will pick only only one group -- CMD + L {Charts Page} will open a list of chart layouts -- / {Any page} will focus on search input -- CMD + M {Charts Page} will toggle Mapview/Charts mode - -## June 2020 - -**`Sanbase`**: - -- Webhooks for Alerts -- Dev activity on Desktop now looks better (default MA 7 days) -- MVRV Long/Short looks better. (Area lines, percents instead of ratio) -- Add Sentiment Metrics (Finally on Santiment App we have Sentiments :smile: ) -- Add Derivatives Metrics (For BTC & ETH) -- We rebuild fullscreen for the Chart. It's bigger now -- Chart becomes bigger -- Grid on the Chart becomes more granular -- Chart layouts - small fixes -- You can open our chart tool right from navigation now -- Add Frequencies for each metric in "Explanation" sidebar -- Add Price in BTC & ETH -- New Alert: MVRV Intraday -- Many fixes for links and docs -- New minimap feature: -- New Select&ZoomIn feature for Sanbase Charts -- You can edit the calendar as a text. - -## May 2020 - -- **`Sanbase`**: You can setup manually amount of top holders for next metrics - -![top-holders](top-holders.png) - -- **`Sanbase`**: Add categories for Quick Search - -![search](search-categories.png) - -- **`Sanbase`**: All projects now have Social Volume metric available. - -- **`Sanbase`**: Our chart has 2 Axis support now. - -![search](axis.png) - -- **`Sanbase`**: Social tool has better suggestions. And some small changes for better UX. - -![search](social-suggestions.png) - -## April 2020 - -- **`Sanbase`**: Social tool has a new feature. "Comparing". You can compare any topics and assets by social volume and social dominance. - -![search](social-compare.png) - -- **`Sanbase`**: You can save your ideas with new feature "templates" and manage them in profile - -![search](templates.png) -![search](templates-profile.png) - -- **`Sanbase`**: We have a new flow for selecting a datetime interval - -![search](calendar.png) - -- **`Sanbase`**: You can add an alert for any "text" topic in our social tool. - -![search](socsalerts.png) - -- **`Sanbase`**: We add very specific metric for Ethereum. Say welcome to Miners Balance - -![miners balance](minersBalance.png) - -- **`Sanbase`**: New Top Holders metric on Sanbase Charts - -![top holders](topHolders.png) - -## March 2020 - -- **`Sanbase`**: We add Twitter % changes 24h, 7d - -![twitter changes](twitterChanges.png) - -- **`Sanbase`**: You can create alerts right from the chart with shortcuts. - -![signals on chart](signalsOnChart.png) - -- **`Sanbase`**: ICO price can be visible right on the chart - -![ico price](icoPrice.png) - -- **`Sanbase`**: Studio supports comparison our metrics and assets now - -![comparing](comparing.png) - -- **`Sanbase`**: We add a better explanation for our metrics on •Studio• - -![explanations](explanations.png) - -## February 2020 - -- **`Sanbase`**: We add time bounds metrics - -![timebounds](timebounds.png) - -- **`Sansheets`**: `=SAN_MEAN_DOLLAR_INVESTED_AGE` function has been published - -- **`Sanbase`**: New look of Santiment Studio. Our chart tool is much ease to use now. - ![charts](charts.png) - -- **`Sanbase`**: First time to see our new feed. Where you can find latest hot events, insights and anomalies in the crypto world. - And now Santiment has own Indices. - ![feed](feed.png) - -- **`Sanbase`**: It's time to pay with crypto for our tools. - -- **`Sanbase`**: We've updated Sanbase's user profile. And you can track followers. - ![profile](profile.png) - -## January 2020 - -- **`Sanbase`**: We make fresh new chart's engine for our services. Now our charts become much faster. You can try it on our desktop web app - - -- **`Sanbase`**: Better mobile experience is here. Also you can open our chart in `fullscreen` mode. - ![mdp](mdp.png) - -- **`Sansheets`**: - -1. Removed `SAN_NEWS` function. -2. Change order of returned data of `SAN_OHLC` function. -
    - -- **`Sanbase/Insights`**: Now you can see an amount of comments per Insight - ![total_comments](total_comments.png) - -- **`Sanbase`**: Small changes of our navigation super menu - ![insights_dropdown](insights_dropdown.png) - -## December 2019 - -- **`Sanbase`**: Our profile page is live - - -- **`Sanbase/Insights`**: Let's talk about crypto in our new comments - ![comments](comments.png) - -- **`Sanbase`**: User can toggle the fullscreen mode for our chart. - -
    - -## November 2019 - -- **`Sanbase`**: Now you can check top trending words on our charts - - ![trends-chart](trends-chart.png) - Just hovering the chart and moving the mouse pointer. This works with Social Volume metric. -- **`Sanbase`**: You can use the new search field if you looking for some metric - ![metrics-search](metrics-search.png) -- **`Sanbase/Sansheets/API`**: Finally we have unified header for all our services (except santiment.net) - ![header](header.png) -- **`Sanbase Graphs`**: Graphs is the part of Sanbase account and user flow - ![graphs](graphs.png) - -- **`Sansheets`**: New function introduced `=SAN_FUNCTIONS` - returns a list of all the available san functions. - -- **`Sanbase.Insights`** Insights has a new widget with a list of assets in this insight. - ![insights](insights.png) - -- **`Sanbase/Sansheets/API`**: Increased the historical access for paid plans: - Sanbase/Sansheets: Pro plan now gives 5 years of access instead of 3 - API: Basic plan gives 3 years instead of 6 months, Pro: 7 years instead of 1.5 years -- **`Sanbase`**: Now you can download CSV data from our Sanbase's chart tool. - ![csv](csv.png) - -- **`Sansheets`**: Some functions has been introduced: - -``` - SAN_DAILY_AVG_MARKETCAP - SAN_DAILY_CLOSING_MARKETCAP - SAN_MEAN_REALIZED_PRICE - SAN_MVRV_LONG_SHORT_DIFF - SAN_MEAN_AGE - SAN_VELOCITY - SAN_EXCHANGE_INFLOW - SAN_EXCHANGE_OUTFLOW - SAN_EXCHANGE_BALANCE - SAN_AGE_DESTROYED -``` - -
    - -## October 2019 - -- **`Sanbase`**: New weekly report for your watchlists. Now you can get hot info about assets from your watchlist in your inbox. - ![weekly](weekly.png) - -- **`Sanbase`**: New beta feature. You can setup simple pricing signal on the chart tool. - ![signals-on-chart](signals-on-chart.png) - -- **`Sanbase`**: Since today on-chain data is available on the charts for EOS - (discontinued in May 2020), Ripple and Binance Chain. Binance Chain is - available under the `Binance Native` name and `binance-coin-native` slug. The - old `Binance/binance-coin` is still pointing to the ERC20 contract. Not all - the available data is currently displayed, the frontend team is working on - that. diff --git a/src/docs/data-anomaly/binance-funding-rate/index.md b/src/docs/data-anomaly/binance-funding-rate/index.md deleted file mode 100644 index bb427639a..000000000 --- a/src/docs/data-anomaly/binance-funding-rate/index.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Binance Funding Rate -author: Boris -date: 2025-09-12 -description: Data Anomaly shows market sentiment in perpetual futures, with spikes signaling potential volatility. ---- - -## Definition - -**Binance Funding Rate** is designed to monitor significant changes in Binance's funding rate for perpetual futures contracts. Persistent spikes or drops in the funding rate can indicate extreme market sentiment, allowing traders to anticipate price movements or periods of heightened volatility. - -Funding rate is a periodic payment made to ensure the price of perpetual futures contracts remains anchored to the spot market price. A positive funding rate indicates that the perpetual contract price is higher than the spot price, with long position holders paying shorts. A negative funding rate suggests the opposite, with short position holders paying longs. - -![](image1.png) - -## Use Cases - -- **Market Sentiment Analysis:** The anomaly tracks funding rates across major trading pairs (e.g., BTC/USDT, ETH/USDT). When funding rates significantly deviate from historical norms, the anomaly is triggered. High positive rates may indicate extreme bullish sentiment, while high negative rates may suggest panic selling and bearish sentiment. - -- **Risk Management:** If funding rates reach extreme levels, it could imply incoming sharp price movements, prompting precautionary actions. - -- **Funding Rate Arbitrage**: Traders can exploit differences in funding rates across different exchanges by taking opposing positions to capture the spread, thereby generating risk-free or low-risk profit. - -- **Volatility Trading**: Traders may use funding rate anomalies as an indicator of upcoming volatility. Significant shifts in funding rates can imply an impending price move, allowing traders to implement volatility-based strategies such as buying options or utilizing straddles to profit from expected price swings. \ No newline at end of file diff --git a/src/docs/data-anomaly/btc-correlation/index.md b/src/docs/data-anomaly/btc-correlation/index.md deleted file mode 100644 index 574c5d02e..000000000 --- a/src/docs/data-anomaly/btc-correlation/index.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: BTC Correlation -author: Boris -date: 2025-09-12 -description: Data Anomaly shows Bitcoin’s relationship with Gold and SPY, highlighting market trends, risk, and diversification opportunities. ---- - -## Definition - -**BTC Correlation** Anomaly is designed to monitor and analyze the correlation between Bitcoin (BTC) and GOLD and SPY. By examining how BTC moves in relation to other market participants, traders can gain valuable insights into market dynamics and interdependencies. This signal is essential for understanding diversification opportunities, managing risk, and identifying broader market trends. - -**Correlation** measures the strength and direction of the relationship between two assets, typically represented by a coefficient ranging from -1 to 1. A value close to 1 indicates a strong positive correlation, meaning the assets tend to move together, while a value near -1 suggests a strong negative correlation, where the assets move in opposite directions. - -![](image1.png) - -## Use Cases - -- **Diversification Strategies**: - - Utilize the BTC Correlation Anomaly to assess which assets may provide diversification benefits. When BTC shows low or negative correlation with certain altcoins or traditional assets, these instruments can help stabilize your portfolio during periods of BTC volatility. - -- **Risk Management**: - - By tracking shifts in BTC’s correlation with other assets, traders can identify periods of heightened systemic risk. A rising correlation across multiple assets may signal market stress, prompting adjustments in position sizing and hedging strategies. - -- **Market Sentiment Analysis**: - - Changes in correlation can be indicative of evolving market sentiment. For instance, a decreasing correlation between BTC and traditional financial instruments might suggest a divergence in market behavior, offering clues about potential shifts in investor sentiment and macroeconomic trends. - -- **Hedging Strategies**: - - Understanding BTC’s correlation with other assets helps in constructing effective hedges. For example, if BTC exhibits a strong inverse correlation with a specific altcoin or commodity, traders may use this relationship to offset potential losses and protect their portfolios during downturns. \ No newline at end of file diff --git a/src/docs/data-anomaly/deprecated/ath-price-usd/index.md b/src/docs/data-anomaly/deprecated/ath-price-usd/index.md deleted file mode 100644 index 0e5b4d53f..000000000 --- a/src/docs/data-anomaly/deprecated/ath-price-usd/index.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: ATH price USD -author: Alex -date: 2021-12-08 -description: Signal indicating a new price USD All Time High is reached. ---- - -## Definition - -**ATH Price USD Signal** indicates that an asset has reached it's new ATH. After an ATH was reached, for a given asset a cooldown period of 12 hours it set. While a cooldown period is active new signals are not fired even if the asset keep reaching new ATHs. \ No newline at end of file diff --git a/src/docs/data-anomaly/deprecated/dai-mint/index.md b/src/docs/data-anomaly/deprecated/dai-mint/index.md deleted file mode 100644 index 2ae9092a1..000000000 --- a/src/docs/data-anomaly/deprecated/dai-mint/index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: DAI Mint -author: Alex -date: 2021-02-11 -description: Signal indicating a large DAI portion was minted ---- - -## Definition - -**DAI Mint signal** indicates that an outstanding portion of DAI was minted. - -In order to identify "outstanding" mints the **99.9% rolling quantile over last 3000 mints** is computed. If the minted amount is greater than the computed value, it's marked it as "outstanding" value. - -The amount of minted DAI and the corresponding transaction hash are provided. diff --git a/src/docs/data-anomaly/deprecated/index.md b/src/docs/data-anomaly/deprecated/index.md deleted file mode 100644 index 618c6132b..000000000 --- a/src/docs/data-anomaly/deprecated/index.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Deprecated Data Anomalies -author: Santiment Team -date: 2024-04-23 ---- - -Currently deprecated Data Anomalies: - -- [ATH Price USD](/data-anomaly/deprecated/ath-price-usd) -- [DAI Mint](/data-anomaly/deprecated/dai-mint) -- [Large Exchange Transactions](/data-anomaly/deprecated/large-exchange-transactions) -- [Large Exchange Transactions 1M](/data-anomaly/deprecated/large-exchange-transactions-1m) -- [Large Transactions](/data-anomaly/deprecated/large-transactions) -- [MCD ART Liquidation](/data-anomaly/deprecated/mcd-art-liquidation) -- [Old Coins Moved](/data-anomaly/deprecated/old-coins-moved) -- [Project in Trending Words](/data-anomaly/deprecated/project-in-trending-words) -- [UniswapV3 PoolCreated](/data-anomaly/deprecated/uniswapv3-poolcreated) diff --git a/src/docs/data-anomaly/deprecated/large-exchange-transactions-1m/index.md b/src/docs/data-anomaly/deprecated/large-exchange-transactions-1m/index.md deleted file mode 100644 index 4d7a18763..000000000 --- a/src/docs/data-anomaly/deprecated/large-exchange-transactions-1m/index.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Large Exchange Transactions 1M -author: Katsiaryna -date: 2023-07-07 -description: Signal shows that a deposit or withdrawal of 1M USD or more is made ---- - -## Definition - -**Large Exchange Transactions 1M** indicates that transactions of 1 million USD or more (in any token or ETH) was deposited or withdrawaled to/from some CEX. - -The signal metadata tracks sender and reciever, aproximate USD value and the hash of the transaction. diff --git a/src/docs/data-anomaly/deprecated/large-exchange-transactions/index.md b/src/docs/data-anomaly/deprecated/large-exchange-transactions/index.md deleted file mode 100644 index 0a666661f..000000000 --- a/src/docs/data-anomaly/deprecated/large-exchange-transactions/index.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Large Exchange Transactions -author: Vlad -date: 2021-12-27 -description: Signal shows that any large transaction has been made. ---- - -## Definition - -**Large Exchange Transactions** indicates that large transactions has been made. - -We take transaction for the last 30 days, calculating thresholds for each asset every day. We take thresholds values, the cost of which exceeds 10000 USD. -Then we take all the transactions whose transaction volume more than this threshold separately for each asset. diff --git a/src/docs/data-anomaly/deprecated/large-transactions/index.md b/src/docs/data-anomaly/deprecated/large-transactions/index.md deleted file mode 100644 index 96def4e6e..000000000 --- a/src/docs/data-anomaly/deprecated/large-transactions/index.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Large Transactions -author: Katsiaryna -date: 2021-04-26 -description: Signal indicating transactions with big value in USD ---- - -## Definition - -**Large Transaction Signal** indicates transactions with large value in USD. - -In order to filter most valuable transactions for each transaction a threshold value is defined. The threshold is the USD value of the top-fifth transaction in last 30 days. - -If the transaction's approximate value in USD is above the threshold value, a signal is fired. - -Approximate transaction values are calculated by multiplying the amount of transferres coins to closest coin's price value using price data with 5 minutes interval for each transaction. - -## List of supported tokens -* ethereum -* tether -* 1inch -* aave -* badger-dao -* balancer -* band-protocol -* bancor -* compound -* curve -* dodo -* enjin-coin -* kyber-network -* chainlink -* loopring -* maker -* orion-protocol -* ren -* augur -* synthetix-network-token -* sushi -* uniswap -* yearn-finance -* 0x diff --git a/src/docs/data-anomaly/deprecated/mcd-art-liquidation/index.md b/src/docs/data-anomaly/deprecated/mcd-art-liquidation/index.md deleted file mode 100644 index 8713ab83c..000000000 --- a/src/docs/data-anomaly/deprecated/mcd-art-liquidation/index.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: MCD ART Liquidation -author: Alex -date: 2021-12-08 -description: Signal indicating a large MakerDAO liquidation ---- - -## Definition - -**Multi-Collateral DAI ART Liquidation Signal** indicates that an outstanding liquidation occured. - -Fires a signal if more than $100k was liquidated over last 5 minutes. - -## Collateral Assets - -* 0x -* balancer -* basic-attention-token -* chainlink -* compound -* DAI -* decentraland -* gemini-dollar -* kyber-network -* loopring -* paxos-standard -* tether -* trueusd -* usd-coin -* USDC-b -* WETH -* WETH-b -* wrapped-bitcoin -* yearn-finance \ No newline at end of file diff --git a/src/docs/data-anomaly/deprecated/old-coins-moved/index.md b/src/docs/data-anomaly/deprecated/old-coins-moved/index.md deleted file mode 100644 index 93900f942..000000000 --- a/src/docs/data-anomaly/deprecated/old-coins-moved/index.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Old Coins Moved -author: Alex -date: 2021-12-08 -description: Signal indicating a large portion of old coins were moved. ---- - -## Definition - -**Old Coins Moved Signal** indicates that an outstanding amount of old coins were moved. - -In order to identify "outstanding" transfer for each transfer it's burn age is computed. Burn age is the amount of tokens changing address on a certain transfer, multiplied by the time since they last moved. After that for each asset **top-10 transfers by age over 30 days are considered**. If the new given transfer's burn age is greater than the top-10 value, the transfer marked as "outstanding". \ No newline at end of file diff --git a/src/docs/data-anomaly/deprecated/project-in-trending-words/index.md b/src/docs/data-anomaly/deprecated/project-in-trending-words/index.md deleted file mode 100644 index 12f59f149..000000000 --- a/src/docs/data-anomaly/deprecated/project-in-trending-words/index.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Project in Trending Words -author: Katsiaryna -date: 2021-12-27 -description: Signal indicates that some project appeared in top-10 trending words ---- - -## Definition - -**Project in Trending Words** indicates that the project appeared in top-10 trending words. - -Bitcoin and Ethereum are not tracked. -Once the signal is fired for some project the cooldown period of 12 hours is activeted for this project. No new project-in-trending-words signals are emitted during the cooldown period. diff --git a/src/docs/data-anomaly/deprecated/uniswapv3-poolcreated/index.md b/src/docs/data-anomaly/deprecated/uniswapv3-poolcreated/index.md deleted file mode 100644 index d40e4624e..000000000 --- a/src/docs/data-anomaly/deprecated/uniswapv3-poolcreated/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: UniswapV3 PoolCreated -author: Vlad -date: 2021-12-27 -description: Signal shows that new pool was created. ---- - -## Definition - -**UniswapV3 PoolCreated** indicates that new pool was created. - -It indicates for which pair of assets pool was created. Shows related to this pool information: - - transaction hash - - fee - - tick spacing - - pool address diff --git a/src/docs/data-anomaly/dex-exchanges-1m-usd/index.md b/src/docs/data-anomaly/dex-exchanges-1m-usd/index.md deleted file mode 100644 index a6b83417a..000000000 --- a/src/docs/data-anomaly/dex-exchanges-1m-usd/index.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Dex Exchanges 1M USD -author: Boris -date: 2025-09-12 -description: Data Anomaly shows DEX trades of $1M or more, highlighting significant market moves by major holders. ---- - -## Definition - -**Dex Exchanges 1M USD** anomaly is fired when a decentralized exchange (DEX) transaction involves a token trade amounting to $1 million USD or more. This alert identifies unusually large swaps or trades that take place on DEX platforms, often indicating significant market activity by major holders or institutional players operating in a decentralized and transparent environment. - -Such transactions can have a noticeable impact on token prices, liquidity, and market sentiment, and are often precursors to major market movements or strategic portfolio changes. - -## Use Cases - -- **Large Trade Monitoring on DEXs** -Track large-scale trading activity in real time. These trades can signal intent to accumulate or offload a position without going through centralized exchanges. -- **Liquidity Shock Detection** -A massive trade on a DEX may result in price slippage and sudden liquidity changes. This anomaly can warn traders and liquidity providers about possible short-term volatility. -- **DeFi Project Analysis** -DeFi analysts and investors can assess how significant token holders interact with their ecosystem, helping them evaluate project health, token stability, or manipulation risks. - -##Examples - -![](image1.png) - -![](image2.png) - -![](image3.png) \ No newline at end of file diff --git a/src/docs/data-anomaly/eth-whale-dump/index.md b/src/docs/data-anomaly/eth-whale-dump/index.md deleted file mode 100644 index 30edf2bfd..000000000 --- a/src/docs/data-anomaly/eth-whale-dump/index.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: ETH Whale Dump -author: Boris -date: 2025-09-12 -description: Data Anomaly shows large ETH outflows from whale wallets, signaling potential selling pressure and dump scenarios. ---- - -## Definition - -**ETH Whale Dump** anomaly is designed to detect potential large-scale ETH dumps by monitoring whale wallet behaviors. It specifically focuses on identifying significant outflows from addresses that could indicate selling pressure from major holders. The anomaly uses a 30-day holding period as a key parameter to distinguish between normal trading activity and potential dump scenarios. - -![](image1.png) - -## Use Cases -- Identifying potential large-scale selling pressure -- Monitoring whale behavior patterns -- Early warning system for significant market movements -- Risk management for ETH positions - -This data anomaly helps traders and analysts anticipate potential market pressure from large ETH holders, particularly focusing on cases where long-term holders (30+ days) initiate substantial outflows that could impact market conditions. \ No newline at end of file diff --git a/src/docs/data-anomaly/hyperliquid-average-funding-rates/index.md b/src/docs/data-anomaly/hyperliquid-average-funding-rates/index.md deleted file mode 100644 index ce08c0592..000000000 --- a/src/docs/data-anomaly/hyperliquid-average-funding-rates/index.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Hyperliquid Average Funding Rates -author: Boris -date: 2025-09-12 -description: Data Anomaly shows unusual funding rate spikes or drops, alerting traders to potential market anomalies in real time. ---- - -## Definition - -**Hyperliquid Average Funding Rates** Anomaly monitors Hyperliquid's funding rates to detect anomalies when rates exceed predefined high/low thresholds. It retrieves data from ClickHouse, identifies unusual funding patterns, and streams alerts to Kafka for real-time processing. - -![](image1.png) - -## Use Cases - -**Risk Management** - -- Early warning for excessive leverage conditions -- Market stress detection before major price movements - -**Trading Opportunities** - -- Identify arbitrage opportunities from funding imbalances -- Optimize position timing based on funding cycles - -**Market Analysis** - -- Track liquidity conditions and market sentiment -- Monitor unusual market behavior for research/compliance \ No newline at end of file diff --git a/src/docs/data-anomaly/index.md b/src/docs/data-anomaly/index.md deleted file mode 100644 index e72739884..000000000 --- a/src/docs/data-anomaly/index.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Data Anomaly Overview -author: Larry -date: 2025-10-20 ---- - -The crypto market is noisy by the minute. We keep it simple: we surface meaningful anomalies from on-chain activity, social signals, and derivatives microstructure, and turn them into clear, ready-to-use signals. - -Unlike traditional dashboards, we focus on actionability and reliability. Every signal is validated with rigorous statistical tests and out-of-sample checks to reduce false positives. Integrate notifications to fit your workflow—use the actionable anomalies in a way you like. - -If you’re looking for a systematic way to improve decision quality in a complex market, Data Anomaly is the simplest place to start. - -- [Binance Funding Rate](/data-anomaly/binance-funding-rate) -- [BTC Correlation](/data-anomaly/btc-correlation) -- [Dex Exchanges 1M USD](/data-anomaly/dex-exchanges-1m-usd) -- [ETH Whale Dump](/data-anomaly/eth-whale-dump) -- [Hyperliquid Average Funding Rates](/data-anomaly/hyperliquid-average-funding-rates) -- [Large Transfers](/data-anomaly/large-transfers) -- [Large USDC-USDT Mint](/data-anomaly/large-usdc-usdt-mint) -- [Liquidations](/data-anomaly/liquidations) -- [MVRV Danger (Overvaluation) Zone](/data-anomaly/mvrv-danger-zone) -- [MVRV Opportunity (Undervaluation) Zone](/data-anomaly/mvrv-opportunity-zone) -- [Network Activity - Price Divergence](/data-anomaly/network-activity-price-divergence) -- [Project in Trends](/data-anomaly/project-in-trends) -- [Social Dominance Spike](/data-anomaly/social-dominance-spike) -- [Social-Dev Score](/data-anomaly/social-dev-score) -- [USDC Borrow](/data-anomaly/usdc-borrow) - - - -Deprecated Data Anomalies - -There are data anomalies that have been deprecated, are scheduled for deprecation, or are now available under a new name. Please refrain from using the old data anomalies and migrate to the updated versions as necessary. - -- [Deprecated Data Anomalies](/data-anomaly/deprecated) - - diff --git a/src/docs/data-anomaly/large-transfers/index.md b/src/docs/data-anomaly/large-transfers/index.md deleted file mode 100644 index 484ff3e30..000000000 --- a/src/docs/data-anomaly/large-transfers/index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Large Transfers -author: Boris -date: 2025-09-12 -description: Data anomaly shows unusually big token movements, highlighting whale activity and potential market shifts. ---- - -## Definition - -**Large Transfers** anomaly is triggered when a significant non-DEX and non-CEX transfer occurs for a particular token. This alert activates when a transfer in USD value exceeds the top-10th largest transfer in the last two weeks for that token. -This data anomaly is essential for monitoring whale movements, tracking large holder activity, and detecting potential strategic shifts in the market. - -## Ethereum large transfers: - -![](image1.png) - -## Tether large transfers (with ETH price on the chart): - -![](image2.png) - -## Use Cases - -- **Whale Activity Monitoring** -Large transfers often indicate movements by major holders or institutions. Identifying these transactions can provide insights into potential market shifts and price movements. -- **Suspicious Transaction Alerts** -If a sudden large transfer occurs without clear market indicators, it may suggest upcoming volatility, liquidation events, or even potential security threats. \ No newline at end of file diff --git a/src/docs/data-anomaly/large-usdc-usdt-mint/index.md b/src/docs/data-anomaly/large-usdc-usdt-mint/index.md deleted file mode 100644 index a67c5293a..000000000 --- a/src/docs/data-anomaly/large-usdc-usdt-mint/index.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Large USDC-USDT Mint -author: Boris -date: 2025-09-12 -description: Data Anomaly shows unusually big stablecoin minting events, highlighting potential major market moves or institutional activity. ---- - -## Definition - -**Large USDC-USDT Mint** Anomaly monitors and detects unusually large minting events of USDC and USDT stablecoins on the Ethereum blockchain. It tracks daily mint volumes and triggers alerts when the combined minting amount exceeds a predefined threshold (default: $1 billion USD). - -The data anomaly aggregates mint events from both USDC and USDT smart contracts and analyzes the total daily volume to identify significant market events that could indicate major institutional activity or market movements. - -![](image1.png) - -## Use Cases -- **Market Analysis**: Identifying periods of high stablecoin demand that may precede significant crypto market activity -- **Institutional Monitoring**: Detecting large-scale institutional entries or preparations for major market positions -- **Liquidity Tracking**: Understanding when substantial new liquidity is entering the crypto ecosystem -- **Risk Assessment**: Monitoring for unusual stablecoin supply expansion that could signal market stress or opportunity -- **Trading Insights**: Providing early indicators of potential market movements driven by large capital inflows - -The data anomaly helps traders, analysts, and institutions stay informed about significant stablecoin supply changes that often correlate with broader cryptocurrency market dynamics. \ No newline at end of file diff --git a/src/docs/data-anomaly/liquidations/index.md b/src/docs/data-anomaly/liquidations/index.md deleted file mode 100644 index 9db8e3bf1..000000000 --- a/src/docs/data-anomaly/liquidations/index.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Liquidations -author: Boris -date: 2025-09-12 -description: Data Anomaly shows major forced sell-offs in the crypto market, signaling sudden spikes in leveraged trading losses. ---- - -## Definition - -**Liquidations** anomaly is designed to monitor significant liquidations on the blockchain. A rapid succession of anomalies indicates a sharp increase in the scale of these liquidations. - -A huge liquidation in the crypto space refers to the forced selling of a trader's position, typically on leveraged trades, when the market moves against them. In the context of cryptocurrencies, liquidation occurs when a trader borrows funds to trade (using margin or leverage) and the value of their position falls below a certain threshold, at which point the exchange automatically sells the assets to cover the loss. - -![](image1.png) - -## Use Cases - -- Real-Time Monitoring: The anomaly tracks total liquidations over a 1-hour rolling window. When the liquidation volume surpasses a predefined threshold (e.g., $1M), an anomaly is triggered, alerting the fund’s risk management team. -- Escalating Alert System: If multiple anomalies fire within a short period (e.g., 2 hours), the threshold doubles, indicating that the liquidation size is rapidly increasing. This warns the fund of an accelerating sell-off, potentially signaling a market crash or price correction. -- Automated Trading Response: Upon receiving the data anomaly, the hedge fund's automated trading bots can execute predefined strategies: -- Reduce Exposure: Automatically decrease leveraged positions to minimize risk during a potential downturn. - - Trigger Stop Losses: Close positions before liquidity dries up or prices fall drastically. - - Execute Hedging: Initiate hedging strategies, such as buying options or shorting correlated assets, to offset potential losses. - - Human Intervention: The risk management team receives the alert and analyzes the market conditions to determine if additional manual intervention is required. They might pause trading or adjust strategies based on market sentiment. \ No newline at end of file diff --git a/src/docs/data-anomaly/mvrv-danger-zone/index.md b/src/docs/data-anomaly/mvrv-danger-zone/index.md deleted file mode 100644 index 497cb4bab..000000000 --- a/src/docs/data-anomaly/mvrv-danger-zone/index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: MVRV Danger (Overvaluation) Zone -author: Boris -date: 2025-09-12 -description: Data Anomaly shows potential overvaluation, highlighting periods of heightened risk for market corrections. ---- - -## Definition - -**MVRV Danger (Overvaluation) Zone** anomaly is triggered when the MVRV metric suggests that the asset is overvalued, indicating a potential risk of market correction. This anomaly activates when the current MVRV value exceeds the upper threshold based on historical MVRV spikes over recent time. It helps investors assess when the market may be becoming over-leveraged, signaling a heightened risk of asset overvaluation. - -![](image1.png) - -## Use Cases - -- MVRV can help institutional investors gauge market liquidity and risk exposure. Spikes in MVRV ratios can indicate that the market is becoming over-leveraged, while dips may signal safer entry points. -- Long-term investors can use MVRV to track market cycles and identify when it might be wise to enter or exit positions. -- The MVRV Danger Zone Data Anomaly becomes even more powerful when used in conjunction with the [MVRV Opportunity (Undervaluation) Zone](/data-anomaly/mvrv-opportunity-zone) Data Anomaly. While the Opportunity Data Anomaly identifies undervaluation and potential accumulation points, the Danger Anomaly warns of potential overvaluation and the risk of a price correction. By leveraging both anomalies, you can strategically time their entry and exit points. \ No newline at end of file diff --git a/src/docs/data-anomaly/mvrv-opportunity-zone/index.md b/src/docs/data-anomaly/mvrv-opportunity-zone/index.md deleted file mode 100644 index 51cd008e7..000000000 --- a/src/docs/data-anomaly/mvrv-opportunity-zone/index.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: MVRV Opportunity (Undervaluation) Zone -author: Boris -date: 2025-09-12 -description: Data Anomaly shows potential undervaluation, signaling favorable entry points for long-term investors. ---- - -## Definition - -**MVRV Opportunity (Undervaluation) Zone** Data Anomaly is triggered when the MVRV metric indicates that the asset is undervalued, signaling a favorable entry point for long-term investors. This anomaly activates when the current MVRV value falls below the lower threshold based on historical MVRV dips over the recent period, highlighting potential accumulation opportunities. - -![](image1.png) - -## Use Cases - -- This anomaly is valuable for long-term investors tracking market cycles to identify ideal entry points for accumulating assets. -- The MVRV Opportunity Zone Data Anomaly becomes even more powerful when used in conjunction with the [MVRV Danger (Overvaluation) Zone](/data-anomaly/mvrv-danger-zone) Data Anomaly. While the Opportunity Data Anomaly identifies undervaluation and potential accumulation points, the Danger Anomaly warns of potential overvaluation and the risk of a price correction. By leveraging both anomalies, you can strategically time their entry and exit points. \ No newline at end of file diff --git a/src/docs/data-anomaly/network-activity-price-divergence/index.md b/src/docs/data-anomaly/network-activity-price-divergence/index.md deleted file mode 100644 index 95e6a1ca1..000000000 --- a/src/docs/data-anomaly/network-activity-price-divergence/index.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Network Activity - Price Divergence -author: Boris -date: 2025-09-12 -description: Data Anomaly shows price surges not supported by network growth, highlighting potentially unsustainable or speculative moves. ---- - -## Definition - -**Network Activity - Price Divergence** Data Anomaly identifies anomalous price surges that are not accompanied by a corresponding rise in network activity (growth). It flags potentially unsustainable or speculative price increases that are not backed by healthy user adoption or blockchain usage. - -The detection logic is based on the modified z-score applied to the price-to-growth momentum ratio, using Median Absolute Deviation (MAD) for robustness against outliers. We smooth raw metrics to reduce noise and focus on consistent deviations from historical behavior. - -The anomaly is triggered only if the price growth exceeds 3% on the same day — ensuring the alert is relevant for significant bullish moves. - -## Use Cases - -- **Token Due Diligence** -Identify tokens that are experiencing unusual price rallies not supported by on-chain fundamentals. This helps investors filter hype-driven assets during bull runs. -- **Risk Monitoring for Listings** -Exchanges or asset managers can use this anomaly to detect early signs of artificial inflation or wash trading prior to token listings or announcements. -- **Alpha Signal for Reversals** -Divergence between price and network activity may indicate upcoming price correction. Traders can use this anomaly as a contrarian indicator to time exits or hedging strategies. - -## Examples: - -- **Ethereum**: -![](image1.png) - -- **Dogecoin**: -![](image2.png) - -- **XRP**: -![](image3.png) - -- **Chainlink**: -![](image4.png) - -- **Cardano**: -![](image5.png) diff --git a/src/docs/data-anomaly/project-in-trends/index.md b/src/docs/data-anomaly/project-in-trends/index.md deleted file mode 100644 index 99ed1f738..000000000 --- a/src/docs/data-anomaly/project-in-trends/index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Project in Trends -author: Boris -date: 2025-09-12 -description: Data Anomaly shows crypto tokens gaining major social buzz, signaling trending projects and potential market opportunities. ---- - -## Definition - -**Project in Trends** Anomaly is triggered when a specific crypto token (excluding Ethereum and Bitcoin) gains significant traction in online discussions, placing it among the top 10 most-mentioned words in crypto-related conversations across social media platforms. By leveraging real-time data, the ‘project in trends’ anomaly helps users identify tokens that are generating buzz, allowing them to react quickly to market trends, sentiment shifts, and potential investment opportunities. - -- Uniswap anomalies: -![](image1.png) -- Tron anomalies: -![](image2.png) -- Dogecoin anomalies: -![](image3.png) - -## Usecases - -- **Early Trend Detection for Traders** -A sudden surge in mentions can indicate both hype and risk. If a token is trending due to controversy or security issues, users can take precautionary measures to protect their investments. \ No newline at end of file diff --git a/src/docs/data-anomaly/social-dev-score/index.md b/src/docs/data-anomaly/social-dev-score/index.md deleted file mode 100644 index 7cae3630d..000000000 --- a/src/docs/data-anomaly/social-dev-score/index.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Social-Dev Score -author: Boris -date: 2025-09-12 -description: Data Anomaly shows combined social and development activity to highlight trends and anomalies in crypto assets. ---- - -## Definition - -**Social-Dev Score** Anomaly combines social media metrics and development activity to create a comprehensive scoring system for crypto assets. It helps identify notable trends and anomalies in both social engagement and development activity. - -![](image1.png) - -## **Score Composition** - -- **Social Score (60% weight)** - - Twitter volume - - Reddit community activity - - Telegram dominance - - 4chan discussions -- **Developer Score (40% weight)** - - GitHub activity - -## **Use Cases** - -- Identify assets with sudden spikes in social interest -- Monitor developer activity trends -- Detect coordinated social media campaigns -- Track overall project health through combined metrics \ No newline at end of file diff --git a/src/docs/data-anomaly/social-dominance-spike/index.md b/src/docs/data-anomaly/social-dominance-spike/index.md deleted file mode 100644 index 6c853b714..000000000 --- a/src/docs/data-anomaly/social-dominance-spike/index.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Social Dominance Spike -author: Boris -date: 2025-09-12 -description: Data Anomaly shows unusual surges in social attention for crypto assets, signaling potential market interest or momentum shifts. ---- - -## Definition - -**Social Dominance Spike** Anomaly identifies abnormal spikes in social dominance metrics for cryptocurrency assets using statistical z-score analysis. It monitors pre-calculated z-scores from social data and detects when assets experience unusually high or low levels of social attention compared to their historical patterns. - -The anomaly processes z-score values that represent how many standard deviations an asset's current social dominance deviates from its historical average, triggering alerts when these values exceed statistical significance thresholds (default: 3.0 standard deviations). - -![](image1.png) - -## Use Cases - -- **Trend Detection**: Identifying cryptocurrencies experiencing viral social media attention or sudden drops in community interest -- **Market Sentiment Analysis**: Understanding shifts in public perception and social sentiment toward specific assets before they impact prices -- **Risk Management**: Detecting when assets are losing social traction, potentially indicating weakening fundamentals or community support -- **Trading Opportunities**: Finding assets gaining unexpected social momentum that may precede price movements \ No newline at end of file diff --git a/src/docs/data-anomaly/usdc-borrow/index.md b/src/docs/data-anomaly/usdc-borrow/index.md deleted file mode 100644 index 50875bb32..000000000 --- a/src/docs/data-anomaly/usdc-borrow/index.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: USDC Borrow -author: Boris -date: 2025-09-12 -description: Data Anomaly shows changes in USDC loans across DeFi platforms, highlighting shifts in market liquidity and borrowing activity. ---- - -## Definition - -**USDC Borrow** anomaly monitors significant changes in the total amount of USDC borrowed across major decentralized finance (DeFi) platforms. This anomaly is calculated by summing the USDC borrowed in AAVE and Compound, providing insight into the market's borrowing behavior and liquidity dynamics. - -**USDC Borrow** represents the aggregated value of USDC that market participants are borrowing on these platforms. An increase in borrowing can indicate rising demand for liquidity, increased leveraging, or bullish market sentiment, whereas a decrease might suggest a more cautious approach or reduced market activity. - -![](image1.png) - -## Use Cases - -- **Market Sentiment Analysis**: - - By tracking the combined USDC borrowing on AAVE v3 and Compound v3, traders can gauge overall market sentiment. A significant uptick in borrow activity may signal confidence and aggressive positioning, while a downturn might indicate risk aversion. - -- **Liquidity Assessment**: - - Monitoring USDC borrow levels provides insights into liquidity conditions within the DeFi ecosystem. High borrowing activity often reflects strong liquidity and market participation, whereas lower levels could point to tightening liquidity. - -- **Risk Management**: - - Elevated borrowing can serve as an early indicator of potential market volatility. By recognizing these trends, traders and risk managers can adjust their positions, hedge exposures, or prepare for possible market corrections. - -- **Arbitrage and Yield Strategies**: - - Shifts in USDC borrow rates can impact interest rates and reward structures on lending platforms. Traders can exploit discrepancies between these platforms for arbitrage opportunities or optimize yield farming strategies based on borrowing trends. - -This anomaly provides a valuable overview of borrowing dynamics across key DeFi platforms, enabling traders to better interpret market trends, assess liquidity, and implement more informed risk management and trading strategies. \ No newline at end of file diff --git a/src/docs/education-and-use-cases/age-consumed-alert/index.md b/src/docs/education-and-use-cases/age-consumed-alert/index.md deleted file mode 100644 index eeda2f42a..000000000 --- a/src/docs/education-and-use-cases/age-consumed-alert/index.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Sanbase Alerts Example - Age Consumed -author: Daria Karpova -date: 2022-03-22 ---- - -Sanbase Alerts are a powerful tool designed to help you focus on what's most crucial in the ever-changing crypto market. With a plethora of metrics available on Sanbase and a vast array of crypto assets in the market, keeping track of every single daily fluctuation can be challenging. However, this vigilance is vital if you aim to not just observe the market, but also stay ahead of the curve. - -Creating a tailored alert based on your unique perspective ensures that you remain in control of your crypto strategy. - -Let's explore some of the potential ways you can leverage Sanbase Alerts. - -## Setting Up an Age Consumed Alert - -The [Token Age Consumed metric](https://academy.santiment.net/metrics/age-consumed/#definition) monitors the activity of coins based on the duration they have remained in their current wallets. Spikes on the chart represent the movement of previously idle coins, which could be owned by long-term HODLers or even ICO investors. - -An unusual spike may not necessarily indicate an imminent change. However, in certain instances, it could serve as a short-term indicator that the market is behaving differently. Users are thus alerted to manually verify whether this is potentially harmful or relevant to their position using all available tools. - -Consider the chart below. If AAVE is an asset you are interested in, you could have been alerted on multiple occasions in the past six months. It seems that the spikes have been followed by a steady decrease in price. - -![aave-age-consumed-chart](image07.png) - -Let's explore how you could set up this alert. - -## Step 1 - -![alert-select-asset](image01.png) - -## Step 2: Selecting a Metric - -![alert-select-metric](image02.png) - -## Step 3: Selecting the Appropriate Conditions - -![alert-select-conditions1](image03.png) - -Choosing the right conditions is a crucial step in the setup process. This part can be complex, but it's essential to ensure that you don't receive excessive noise or false triggers. It's highly recommended to carefully identify which market changes are significant for YOU. - -Let's explore how to do this for AAVE Age Consumed alerts. - -### Step 3b: Understanding Percentage Increases - -While a 100% increase might initially appear significant, it's important to examine the context. Refer to the chart below. As you can see, such increases have occurred almost weekly over the past six months. This frequency suggests that a 100% increase is a regular occurrence for this data set. Therefore, you may not want to set up notifications for such a common event. - -![alert-select-conditions2](image04.png) - -### Step 3c: Adjusting the Metric - -![alert-select-conditions3](image05.png) - -By continuously fine-tuning the metric, you'll notice that the data becomes more meaningful. Only a few significant spikes occur within the given period, suggesting that something noteworthy must have happened. - -These activities are prominent and likely warrant your attention. - -## Step 4: Set Up Your Preferred Notification Method - -Once you've completed the previous steps, the final step is to set up your preferred method of receiving notifications. After this, your setup process is complete! - -![alert-final-screen](image06.png) - diff --git a/src/docs/education-and-use-cases/analyze-speculative-activity-with-exchange-metrics/index.md b/src/docs/education-and-use-cases/analyze-speculative-activity-with-exchange-metrics/index.md deleted file mode 100644 index c9cf0b73c..000000000 --- a/src/docs/education-and-use-cases/analyze-speculative-activity-with-exchange-metrics/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Analyzing Speculative Activity with Exchange Metrics -author: Dino Ibisbegovic -date: 2020-02-05 ---- - -Santiment offers a number of metrics that allow you to analyze the level of speculative activity on the blockchain. In this article, we will discuss two popular exchange-based indicators: - -- **Exchange Balance** -- **Daily Active Deposits** - -The **Exchange Balance** metric represents the combined values of an asset moving into and out of exchange wallets over time. Simply put, if the line is above zero for the day, it indicates that more of a specific coin has entered the exchange wallets than has left, and vice versa. - -Large movements of tokens to exchanges often precede rapid price declines, as the increasing sell pressure becomes too much for the market to absorb. For instance, consider the Exchange Balance of Bancor (BNT) shown below. You'll observe that three of the most significant spikes in Bancor's recent exchange flows occurred shortly before major price corrections: - -![](image1.png) - -Similarly, **Daily Active Deposits** measures the total number of 'deposit' addresses interacting with the observed coin. These 'deposit' addresses, owned by exchanges, are interim addresses that all coins pass through before reaching the main exchange wallets. - -Spikes in daily deposits, particularly during price increases, are a clear indication of rising speculative interest. These spikes can often signal an impending trend reversal as both the crowd and whales look to offload their holdings. An example of this can be seen in RLC's recent Daily Deposits, where spikes directly correlated with several interim and long-term peaks: - -![](image2.png) - -As demonstrated, these two metrics can serve as excellent indicators of speculative activity on the network. They can reveal significant shifts in holder behavior and signal crucial 'offloading' events. - diff --git a/src/docs/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/index.md b/src/docs/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/index.md deleted file mode 100644 index 2e6fc1d6a..000000000 --- a/src/docs/education-and-use-cases/case-study-liquidations-and-sentiment-ratio/index.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: "Case Study 1: DeFi liquidations and Sentiment Ratio for Dip Buying" -author: Maksim Tkachuk -date: 2025-09-01 ---- - -### Metrics - -`Total Liquidations`, and `Total Stablecoin Debt` combined metric for [multiple defi protocols](https://academy.santiment.net/metrics/lending-and-borrowing-protocols) -Social Sentiment analysis([Social Trends tool template](https://app.santiment.net/labs/trends/explore/bull%20OR%20bullish?addedTopics=Bear%2520OR%2520bearish&slug=bitcoin&ticker=BTC)): `Social Volume`, `Social Dominance` of various words and word combinations. - -### Scenario - -Late February 2025. The market is on a comedown from the Trump inauguration euphoria and a fresh all-time-high on BTC. The prices pulled back a bit, but general sentiment was still positive. Then, on the last days of the month Trump comes out guns blazing with the tariff announcements, which send every asset into a tailspin. If you’re a dip buying connoisseur, this seems like the time to buy, but when? - -![](3pricechart.png) - -That’s where a few particular Santiment’s metrics came in handy. I personally love to use, and did use in this particular scenario, a combination of DeFi liquidations([chart template](https://app.santiment.net/charts/De_wFHJh__sCl)) and Social Sentiment analysis([chart template with custom metric](https://app.santiment.net/labs/trends/explore/bull%20OR%20bullish?addedTopics=Bear%2520OR%2520bearish&slug=bitcoin&ticker=BTC)) to accurately gauge both what’s happening to people’s on-chain positions, and what they were expressing on social media. - -![](1imagednl.png) -![](2imagesentiment.png) - -What you want to see here is: - -1. Big spikes of liquidations on falling price means there is forced selling. -2. Stablecoin debt reducing means people are closing their leveraged positions -3. Negative sentiment readings means people are posting bearish social media content - -This combination of signals gave me the conviction to enter a position on Feb 28th, at $84700 per BTC and then proceed to add more on March 9-10th at $80,000 and \$79,300. Holding through the next dip early April was very scary, but the huge spike in liquidations and debt unwind confirmed that the price shouldn’t go much lower from there, as it indeed happened eventually. - -The result by the time of writing is that I accumulated BTC at very favorable prices right before the huge run to the new ATH at \$123k. diff --git a/src/docs/education-and-use-cases/case-study-nrpl-mvrv/index.md b/src/docs/education-and-use-cases/case-study-nrpl-mvrv/index.md deleted file mode 100644 index fee9addfc..000000000 --- a/src/docs/education-and-use-cases/case-study-nrpl-mvrv/index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: "Case Study 2: NRPL and 3y MVRV to Spot Macro Cycle Bottoms" -author: Maksim Tkachuk -date: 2025-09-01 ---- - -### Metrics - -[3 year MVRV](https://academy.santiment.net/metrics/mvrv) & [Network Realized Profit Loss](https://academy.santiment.net/metrics/network-profit-loss) - -### Scenario - -For this case study I explain how I decided to enter BTC positions in the summer of 2022 with the help of two solid metrics. This metric combination works on a very long time horizon and fires a signal approximately once per macro cycle, and when it does you don’t want to miss it. - -It’s worked the last 3 cycles like clockwork, and it’s very simple - you want to buy your long-term spot BTC when you notice [3 year MVRV](https://academy.santiment.net/metrics/mvrv) entering -40-45% zone, combined with large negative spikes of [Network Realized Profit Loss](https://academy.santiment.net/metrics/network-profit-loss). - -The justification for this is straightforward. Large holders are selling their BTC at whatever price they can get, due to being overleveraged and pushed into the corner. MVRV shows that an average long-term holder is down at least 40%, and it never really went lower in the entire BTC history. Using this exact data I made a bottom call on BTC in summer 2022, you can see it with your own eyes [here, in my post on Santiment Insights](https://app.santiment.net/insights/read/wen-bottom-7075). - -![](1imagemvrv3y.png) -![](2imagenrlplongterm.png) - -**Decision:** -Maksim decided the depressed MVRV ratio and spiking NRPL were indications of a good moment to buy BTC, so he entered into a new position in summer of 2022 between $17,000 & $30,000. - -**Outcome:** -BTC proceeded to go on a massive bull run. diff --git a/src/docs/education-and-use-cases/case-study-retail-profit-taking/index.md b/src/docs/education-and-use-cases/case-study-retail-profit-taking/index.md deleted file mode 100644 index c20439b1f..000000000 --- a/src/docs/education-and-use-cases/case-study-retail-profit-taking/index.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: "Case Study 4: Using Retail Balances for Profit-Taking Analysis" -author: David Utrobin and Maksim Balashevich -date: 2025-09-01 ---- - -### Metrics - -[Supply Distribution](https://academy.santiment.net/metrics/supply-distribution/) -[Network Realized Profit and Loss](https://academy.santiment.net/education-and-use-cases/understanding-long-term-market-trends-and-cycles/#network-realized-profit-and-loss) - -### Scenario - -It’s November 2024 and BTC is at $92,300, Sebastian, having bought his first holdings a year earlier, November 2023, at $37880 is watching the price rise accelerate after a 3 year bear market and a year of slow uptrend. Bitcoin’s previous all time high was in November of 2021 at the astonishing price of approximately \$66,000. The bottom of the previous bear cycle hit on November 09 2022, at the price of around ~15-16k. He’s thinking to himself, “Do I sell?”, “Is the market overheated?” and other such questions. So he decides to do some analysis. - -The market and its analysis can be approached in several ways, often complementary to each other. Techniques include technical analysis, sentiment analysis, and on-chain analysis. Below, Sebastien selected an approach that is both comprehensive and relatively simple to understand. - -His focus is on understanding the behavior of specific market participants: - -- What are the actions of smaller BTC holders? -- How much profit are these holders, who acquired BTC at lower prices, currently realizing? - -By examining these metrics, the underlying market sentiment can be determined. Specifically, the behavior of smaller holders will reveal if retail investors are overly greedy or overly fearful. Analyzing profit-taking patterns will help identify whether we are in a state of too much greed, which typically indicates a market top. This is seen when profit-taking declines, since market participants irrationally hope the market will go higher. - -As of November 13th 2024, these conditions haven't fully materialized. - -**Retail Balances & Profit Taking Analysis:** - -![](1oneretailselling.png) - -The chart indicates that retail holders began **decreasing** their balances around October 15th, coinciding with the start of BTC's real rally. It looks like retail is selling into the rally. It also looks like it’s weighted towards fear more than greed because the amount of selling would be less if participants were getting greedy. Given this, it is unlikely that this is a macro cycle top. Though it may become a short term top. - -![](2profittaking.png) - -The price is going up on BTC while the the profit-taking level appears healthy, with increases correlating to each BTC price jump. At a market top, we expect to see a pattern similar to March 2024 (pictured below) when a probable short term peak is indicated due to the spike in Network Realized Profit and Loss(NRPL). NRPL measures the collective profit or loss of coins that change addresses daily. Big negative spikes are usually the best long-term buy signals. Big positive spikes suggest that the most active market participants are in big profit. In this case the NRPL is spiking and is doing so for multiple consecutive days, giving us a signal that it could be a short term top. - -![](3historicexample.png) - -**Decision:** -Sell some of the position, with the goal of reentering within the next 4-16 weeks at a lower price. - -**Outcome:** -This moment was followed by a 4 month minor downtrend which contained multiple opportunities to buy back in under \$90k. - -We have compiled a [chart layout](https://app.santiment.net/charts/btc-major-metrics-1410) that includes these two metrics along with several others. - -In conclusion, monitoring these two subjects—retail activity and profit-taking—is crucial. Historically, these have been key indicators of retail greed or fear of missing out (FOMO), which often precede market tops. Stay vigilant for these signs as they may hint at the next potential turning point in the market. diff --git a/src/docs/education-and-use-cases/case-study-social-volume/index.md b/src/docs/education-and-use-cases/case-study-social-volume/index.md deleted file mode 100644 index bf5788f37..000000000 --- a/src/docs/education-and-use-cases/case-study-social-volume/index.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Case Study 3: Social Volume Indicates a Top" -author: David Utrobin -date: 2025-09-01 ---- - -### Metrics - -[Social Volume metric](https://academy.santiment.net/metrics/social-volume/#social-volume) + [Weighted Sentiment](https://academy.santiment.net/metrics/sentiment-metrics/weighted-sentiment-metrics/) - -### Scenario - -On May 21st, 2025, Mark, a part-time crypto trader, was monitoring his positions. While using [a Screener](https://app.santiment.net/screener) to look at similar metrics across all his assets he noticed the [Social Volume metric](https://academy.santiment.net/metrics/social-volume/#social-volume), which detects genuine asset mentions across several social media platforms, spike for “Avalanche” (AVAX)(1). The metric showed a ~300% increase in discussions on Telegram and Twitter that coincided with a recent upward movement in the price. Curious, he cross-referenced this with the [Weighted Sentiment metric](https://academy.santiment.net/metrics/sentiment-metrics/weighted-sentiment-metrics/#definition), revealing that most of the chatter around AVAX was bullish. - -![1](Inkedchrome_2025-08-14_14-54-10.jpg) - -**Decision:** -Mark decided this was indicating a short term top so he sold his position of 1000 AVAX tokens at $25.21 for $25,210 USD. - -**Outcome:** -The token crashed over the next month by -41%, bottoming in late June 2025. Mark stayed on the lookout for a moment to reenter the position because of his long term outlook on the project, mainly looking for bearish days with lower social volume since prices often rebounded in those scenarios. diff --git a/src/docs/education-and-use-cases/how-to-spot-tops-with-price-network-activity-divergences/index.md b/src/docs/education-and-use-cases/how-to-spot-tops-with-price-network-activity-divergences/index.md deleted file mode 100644 index 1a0c1de63..000000000 --- a/src/docs/education-and-use-cases/how-to-spot-tops-with-price-network-activity-divergences/index.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Spot tops with Price - Network Activity divergences -author: Dino Ibisbegovic -date: 2020-02-05 ---- - -Two key metrics that effectively highlight network activity trends are: - -1. **Daily Active Addresses (DAA)** - This represents the total number of unique network addresses involved in transactions each day. -2. **Network Growth** - This refers to the number of new addresses created on the network daily. - -These indicators can be particularly useful in identifying market tops. If there is a spike in these metrics during a price increase - indicating a rise in speculative interest - but they begin to decline shortly after, this often signals an impending market correction. - -Consider the case of ENJ, which experienced a significant spike in active addresses at the beginning of December, coinciding with a price rally: - -![enj-active-addresses-and-network-growth](image1.png) - -As soon as the on-chain activity returned to its pre-rally levels, ENJ was unable to maintain the upward trend and began a correction. - -### Using On-chain Activity as a Long-term Health Indicator - -![maker-active-addresses-and-network-growth](image2.png) - -Before entering any trade, it's crucial to conduct thorough due diligence. Both Daily Active Addresses (DAA) and Network Growth serve as excellent indicators of a project's adoption over time. Here are some questions you might consider: - -- Is the network consistently adding new addresses daily, or has the growth stagnated? -- Does network activity persist even when the price is down? -- How engaged is the community during significant governance events or on-chain voting sessions? - -By analyzing a project's long-term network activity, you can answer many vital questions about its health. While this analysis won't predict when to buy a specific token, it can certainly help determine if purchasing it is a wise decision in the first place. - diff --git a/src/docs/education-and-use-cases/index.md b/src/docs/education-and-use-cases/index.md deleted file mode 100644 index 810206dfb..000000000 --- a/src/docs/education-and-use-cases/index.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Education and Use Cases -author: Dino Ibisbegovic ---- - - -- [Alerts - Age Consumed Example](/education-and-use-cases/alerts-on-sanbase/) -- [Alerts - Social Trends/Trending Words Example](/education-and-use-cases/social-trends-alerts/) -- [Alerts - Whale Activity Example](/education-and-use-cases/whale-alert/) - - - -- [Case Study 1: DeFi liquidations and Sentiment Ratio for Dip Buying](education-and-use-cases/case-study-liquidations-and-sentiment-ratio) -- [Case Study 2: NRPL and 3y MVRV to Spot Macro Cycle Bottoms](education-and-use-cases/case-study-2-nrpl-and-3ymvrv) -- [Case Study 3: Social Volume Indicates a Top](education-and-use-cases/case-study-social-volume) -- [Case Study 4: Using Retail Balances for Profit-Taking Analysis](education-and-use-cases/case-study-retail-profit-taking) -- [Timing Market Volatility with Token Age Consumed](/education-and-use-cases/timing-market-volatility-with-token-age-consumed/) -- [Investigate Speculative Activity with Santiment’s Exchange Metrics](/education-and-use-cases/investigate-speculative-activity-with-santiment’s-exchange-metrics/) -- [Price to Daily Addresses Divergence - Primer on On-chain Trading Strategies](/education-and-use-cases/price-to-daily-addresses-divergence---primer-on-on-chain-trading-strategies/) -- [Trading and Transaction Volume](/education-and-use-cases/trading-and-transaction-volume) -- [Understanding Long-Term Market Trends and Cycles](/education-and-use-cases/understanding-long-term-market-trends-and-cycles) -- [Understanding Short-Term Market Trends](/education-and-use-cases/understanding-short-term-market-trends) -- [Understanding Crypto Market Cycles Through Lending Metrics](/education-and-use-cases/understanding-crypto-market-cycles-through-lending-metrics) -- [Understanding Market Expectations Through Historical Crypto Trends](/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends) -- [Whale monitoring to predict Crypto's next moves](/education-and-use-cases/whale-monitoring-to-predict-crypto-next-moves) - - - -- [Santiment Pro Report Samples](/education-and-use-cases/santiment-pro-reports-samples/) - - - -- [Santiment Hands-On Tutorial](https://github.com/santiment/san-sdk/blob/master/ICDM_2019/ICDM.ipynb) -- [Correlation Analysis Between Bitcoin and Gold](https://github.com/santiment/san-sdk/blob/master/correlation-analysis/BTC%20vs%20GOLD.ipynb) -- [Backtesting Trading Based on GitHub Data](https://github.com/santiment/san-sdk/blob/master/example-backtesting-with-sanpy/Backtest_GitHub_Activity_Portfolio.ipynb) -- [Stablecoin Comparisons](https://github.com/santiment/san-sdk/blob/master/example-stablecoin-analysis/stablecoin%20comparison.ipynb) -- [How to Spot Tops with Price-Network Activity Divergences](/education-and-use-cases/how-to-spot-tops-with-price---network-activity-divergences/) - - - -- [SanR - Practice Makes Perfect](/education-and-use-cases/sanr-practice-makes-perfect/) - diff --git a/src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/index.md b/src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/index.md deleted file mode 100644 index 39cc9f1b7..000000000 --- a/src/docs/education-and-use-cases/price-to-daily-addresses-divergence-guide/index.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Price vs DAA Divergence; An On-Chain Trading Strategy Guide -author: Jan S -date: 2019-09-17 ---- - -Of all the metrics that can be generated from on-chain data, **the daily active addresses** - DAA for short - is probably most well known. - -For the uninitiated, DAA is simply the **number of unique crypto addresses** interacting with (sending or receiving) a particular coin on a daily basis. As such, DAA is one of the best on-chain proxies for measuring the amount of users and the overall level of network activity, making it an extremely valuable indicator in cryptocurrency evaluation. - -The [network effect](https://en.wikipedia.org/wiki/Network_effect) posits that the number of active users directly influences the value of a network. In crypto, we can observe this causality by referring to a coin's on-chain activity. For example, looking at Bitcoin's DAA over time, we can clearly see that the amount of daily active users seems to correlate strongly with the asset's price action: - -![](01.png) - -That said, it's not as easy to explain where this relationship actually comes from, or exactly what influences what. Higher prices *could* attract more people to invest in Bitcoin and in turn lead to growth in active addresses. On the other hand, an increase in daily active addresses *could* lead investors and their models to start valuing Bitcoin higher and buy more. In other words, the 'chicken and the egg' problem is alive and well in crypto. - -As always, the truth lies probably somewhere in between. In fact, when testing this via the [Granger Causality test](https://en.wikipedia.org/wiki/Granger_causality), we couldn't find that either metric (DAA or price) clearly moves before the other. - -However, when looking directly at the graph, we can see the patterns clearly emerge. For example, throughout Q1 of 2019, the DAA were steadily growing way before the market started to recover. Same holds true for July 2019, when a decline in DAA preceded a decline in price. - -So could there be some forecasting potential in this metric? - -## Creating a Price-DAA Divergence Signal - -To test our hypothesis, we defined and back-tested a signal that would activate whenever the trends in daily addresses and the price of BTC diverged significantly. - -In simpler terms, we calculated the log returns over a rolling window of X days and set a threshold. This threshold would trigger a signal whenever the difference between the two metrics (DAA and price) exceeded it. - -So, how did our signal perform historically? As an astute reader may have noticed, this method has two tuning parameters: - -1. The number of days we look back to calculate the trend. -2. The `divergence threshold`, which defines how much of a difference in DAA-price trends triggers a signal. - -Currently, there's no theory to suggest an optimal set of parameters. Therefore, we tried to select variables that made sense and generated a reasonable number of signals. - -For our initial test, we selected a window of three weeks (21 days) and a threshold of 0.3: - -![](02.png) - -Most of the resulting signals seem to be positioned at rather interesting points in Bitcoin's price. However, this setup triggered too many signals, making it too noisy. - -To resolve this, we increased our threshold, meaning we needed a stronger divergence in trends between Bitcoin's daily addresses and its price for the signal to trigger. - -After testing various setups to see which ones generated a reasonable number of signals, we eventually settled on a divergence threshold of 0.5. Here's the output: - -![](03.png) - -The resulting signals look very interesting - and **much** clearer. Often, the triggers seem to be positioned right at the points of short-term and long-term trend reversals. Quite exciting! - -## Defining Entry/Exit Points - -While we have developed an effective **"something's about to change"** indicator, it does not provide a clear BUY or SELL signal. To address this, we will differentiate between instances when: - -a) DAA trends increase ↑ while the price trends decrease ↓ - -b) DAA trends decrease ↓ while the price trends increase ↑ - -In other words, we are distinguishing between cases where Bitcoin's DAA rises **more than** the price and cases where Bitcoin's DAA falls **more than** the price. - -The following image shows these signals, marked based on whether DAA increases or decreases compared to the price: - -![](04.png) - -Success! The 'price grew more than DAA' signals appear to be effective buy indicators (September 2017, February 2018, August 2018 etc). Similarly, the 'price declined more than DAA' signals could serve as strong exit indicators (June 2017, December 2017, July 2018 etc). - -This approach seems to form the basis of a tradeable strategy. Let's backtest it to see how our Bitcoin portfolio would have performed if we only BOUGHT and SOLD based on these historical signals: - -![](05.png) - -Our returns with the new Price-DAA Divergence strategy (in blue) would be more than 2x compared to simply HOLDing Bitcoin (in red) over the same time frame. - -However, it's important to note that these signals should not be traded exclusively (buy **only** when BUY-signal and hold **only** till **SELL**-signal). There is no guarantee that these signals will detect **ALL** major trend changes. - -We selected the 0.5 Divergence Threshold relatively arbitrarily. We could have set the threshold higher, which would have resulted in fewer trading signals. - -For instance, if the solitary BUY signal in September 2017 was not present, we would have COMPLETELY missed the 2017 bull market. Therefore, while these signals are accurate in our opinion, they should always be combined with additional signals and complementary strategies for optimal results. - -## Branching out - -Until now, we've only applied our price-DAA divergence strategy to Bitcoin. So, how does this model perform when applied to other major cryptocurrencies? - -Let's test it on Ethereum, using the same parameters as before: a 3-week window and a 0.5 divergence threshold. Here's what we get: - -![](06.png) - -The results show a robust set of BUY and SELL signals. BUY signals were primarily triggered during short-term bottoms (July 2017, March 2018, October 2019, etc.), while SELL signals seem to align well with excellent selling opportunities (June 2017, January 2018, January 2019, June 2019, etc.). - -However, it's important to note that these signals should not be followed exclusively. A closer look reveals that relying solely on our price-DAA signals would have caused us to miss most of the 2017 ETH bull run. - -In other words, different cryptocurrencies will require different parameters to generate optimal results. For instance, the signals for Maker (MKR) appear similarly effective when we set a price-DAA threshold of **0.9**: - -![](07.png) - -To demonstrate this, let's look at a backtest of this set of BUY/SELL signals: - -![](08.png) - -In the observed time frame (2018-present), MKR HODLers lost approximately 35% of their initial investment. In contrast, our strategy yielded a **130% profit**. - -## Conclusion - -While the aforementioned strategy demonstrates potential, it should not be followed blindly. As observed, relying solely on this model could have caused you to miss the entire 2017 bull run. No strategy is foolproof, hence it is crucial to **always** use it in combination with other metrics, signals, and indicators. - -This brings to mind that Sanbase offers over 120 different on-chain, social, and development indicators. If you're seeking additional tools to complement the Price-DAA strategy, these platforms would be an excellent starting point. - - - diff --git a/src/docs/education-and-use-cases/sanr-a-playground-for-trading/index.md b/src/docs/education-and-use-cases/sanr-a-playground-for-trading/index.md deleted file mode 100644 index 578ac7a73..000000000 --- a/src/docs/education-and-use-cases/sanr-a-playground-for-trading/index.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: SanR - a Playground for Crypto Trading -author: Santiment Team -date: 2024-07-19 ---- - -## SanR: Practice Makes Perfect - -Picture this; you're standing at the edge of a vast, shimmering ocean, ready to -dive into it, but you freeze. It's intimidating, the deep water with mysteries lurking beneath. - -The exciting world of trading is like that for most people. It's a thrilling adventure, but let's be honest, it's scary. - -That's where SanR comes in. - -Think of it as your testing ground, your playground, ready to help you -navigate the depths of the crypto market. - -> The SanR app lets you share crypto trading signals, watch the signals of -> others, practice your trading skills in a safe environment with no risk of losing -> money 💸 and enables you to earn SAN token rewards! - -## Trader DNA 🧬 - -As Maksim Balashevich, the mastermind behind Santiment, puts it, "SanR is not -widely known, though the main reason to use it is to test, -examine, and develop your 'trader DNA' and then build strategies while recognizing your emotions but not necessarily acting on them." In other words, SanR is like a mirror that -reflects your trading style, helping you understand your emotional triggers and -how to make decisions based on insights rather than impulses. - -But here's the best part – you're not alone on this journey! SanR is like a -big, friendly community of traders, all learning and growing together. It's a -place where you can share your experiences, learn from others, and celebrate -your successes. As Maksim says, "With SanR it's now much easier as I do both -now; I post predictions the moment I arrive at one, then I do the trade a bit later." - -Think of SanR as your personal trading diary, where every prediction is like a -snapshot of your journey. As you look back on your trades, you'll start to see -patterns emerge – maybe you have a knack for spotting trends, or perhaps you -tend to get a bit too excited when the market's on a roll. Whatever your -"trader DNA" may be, SanR helps you understand and embrace it. - -## Risk-free Trading Practice - -So, ready to dive in? With SanR by your side, you'll be navigating the crypto -market like a pro in no time. It's not about being perfect – it's about -learning, growing, and having fun along the way. - - - -Now try for yourself! -Use the [Sanr.app](http://sanr.app) or read more about it in the [documentation site](https://docs.santiment.network/) diff --git a/src/docs/education-and-use-cases/santiment-pro-reports-samples/index.md b/src/docs/education-and-use-cases/santiment-pro-reports-samples/index.md deleted file mode 100644 index 5134d53ee..000000000 --- a/src/docs/education-and-use-cases/santiment-pro-reports-samples/index.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Santiment Pro Report Samples -author: Santiment Team ---- - -### Exploring Recent BTC Fundamentals and the Push to $14k - -*As the U.S. election approaches and the third wave of Covid-19 impacts the globe, we've decided to take a deep look at the recent activities of key Bitcoin stakeholders. We aim to assess the leading coin's on-chain and social potential following the $13k surge.* - -[Weekly Pro Report 2020-10-30.pdf](https://production-sanbase-images.s3.amazonaws.com/uploads/7cfcd1dc75a6e37a197961f19a042b95225b167828cab4857b70ddd3e7906281_1604134004866_Bitcoin%20Weekly%20Pro%20Report%20.pdf) - -### Trading Crypto in 2020: Do Token Fundamentals Really Matter? - -In this week's Pro report, we put our backtesting skills to the test to answer a simple yet crucial question: Does a portfolio of 'fundamentally sound' projects outperform the market benchmark (holding BTC)? - -[Weekly Pro Report 2020-10-16.pdf](https://production-sanbase-images.s3.amazonaws.com/uploads/5d555b3f0236814ca7d1bd7c744aed2ceca4db8aeec86e813f3fb07cd6f9dd4b_1602866186890_Weekly_report_2020-10-16.pdf) - -### Charting the Unicorn: An Analysis of $UNI's On-Chain Activity, Sell-Side Pressure, and Short-Term Price Potential - -*In just a week, Uniswap's new token, UNI, has provided a wealth of on-chain and social data for analysis. This data allows us to speculate and make informed predictions about the coin's short-term potential. In this week's Pro report, we delve into UNI's fundamentals during its initial 10 days. We also examine the on-chain activity that led to its price correction and discuss the potential future direction of this latest DeFi phenomenon.* - -[Weekly Pro Report 2020-09-25.pdf](https://production-sanbase-images.s3.amazonaws.com/uploads/22981475ffba0533410117afad88377a1d20aea58574bf0e2313a7a72420b2f6_1601049941906_UNI_report.pdf) - -### ETH vs ERC-20: A Tale Of Two Market Caps - -While the market capitalization of Ether has been extensively analyzed, the market cap of ERC-20 tokens often goes unnoticed. Until now, there has been a lack of comprehensive research and focus on the ERC-20 market as a whole. In this Santiment report, we take a closer look at the size of the ERC-20 market, its independent evolution over time, and its potential correlation with the parent market cap of Ethereum. - -[Weekly Pro Report 2020-09-04.pdf](https://production-sanbase-images.s3.amazonaws.com/uploads/3e75f3b0d37899c7f8266da53d24d3ee2e644f68d478efbc190b4ee6ce9f03b9_1599222238461_Weekly_Sanbase_PRO_market_report_3.pdf) - diff --git a/src/docs/education-and-use-cases/social-trend-alerts/index.md b/src/docs/education-and-use-cases/social-trend-alerts/index.md deleted file mode 100644 index f181af8f6..000000000 --- a/src/docs/education-and-use-cases/social-trend-alerts/index.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Sanbase Alerts Example - Social Trends -author: Daria Karpova -date: 2022-04-04 ---- - -Santiment stands out in the industry as the only tool that has developed its unique approach to analyzing the cryptocurrency market. Social dynamics can serve as a powerful indicator of impending market volatility. - -While you may already be following certain Twitter accounts or receiving updates from Telegram chats, there's a challenge: It's impossible to read every channel, which means your attention is confined to a select number of news sources. - -As the saying goes, "where there's smoke, there's fire." If you're monitoring multiple coins, you might have noticed that some generate more social media buzz than others. Occasionally, an asset garners excessive attention, as was the case with Dogecoin. - -Consider the chart below. It clearly shows a significant spike (highlighted in blue) in social volume towards the end of November 2021. - -![social-volume-chart](image1.png) - -Even without advanced analytical skills, it's easy to see that the price, which was already falling, plummeted further following the social media spike. - -We always emphasize that no single metric can predict such drastic changes. However, it's beneficial to monitor all of them to identify which ones resonate with you the most. - -Noticing this spike in November 2021 could have served as a potent informational signal about Dogecoin. - -## Setting Up Alerts for Social Trends - -Let's explore how you can set up these alerts on your own. We recommend beginning with the most basic social trends alert. This alert will only be activated if your specified keyword begins to rank among the top 10 trending social terms. - -## Step 1: Selecting Social Trends Alert - -From the Alerts menu, select the Social Trends alert. Next, navigate to the Trending Assets tab. Here, you can choose the coins you wish to monitor. Alternatively, you can use your pre-existing watchlist. - -![alert-select-asset](image2.png) - -## Step 2: Choose Your Preferred Notification Method and Frequency - -Specify your preferred method and frequency for receiving notifications when the alert is triggered. - -![alert-select-notifications](image3.png) - -## Step 3: Assign a Name to Your Alert - -Assign a name to your alert. If you don't, a name will be automatically generated based on the terms you've selected to monitor. - -![alert-select-title](image4.png) - -Congratulations! You've successfully created a robust alert. Reaching the TOP 10 is quite an achievement, so if you receive a notification, it's definitely worth investigating. - ---- - -## Setting Up a Social Volume Alert - -Another scenario where a social alert can be beneficial involves obtaining more sensitive data. This is similar to the Dogecoin example provided at the beginning of this article. - -There might be instances where a significant spike in Social Media Volume for a specific coin may not be reflected in the overall Social Trends. In such cases, you could potentially miss an important signal. - -To help you understand better, let's use Dogecoin as an example to walk you through the process of setting up a Social Volume alert. - -## Step 1.1: Navigate to the "Assets" Tile - -![alert-select-type](image5.png) - -## Step 1.2: Select Dogecoin from the List - -![alert-select-asset-2](image6.png) - -## Step 1.3: Selecting the Metric - -In the "Choose Metric" section, navigate to the "Social" category and select "Social Volume". - -![alert-select-metric](image7.png) - -Upon selection, you will see a chart with red dots. Each dot represents an instance when the alert would have been triggered in the past three months. There are 90 such instances, which can be considered as noise. - -![alert-select-conditions](image8.png) - -## Step 1.4: Adjusting Your Alert - -To modify your alert, navigate to the dropdown menu located under the 'Condition' section and select the "Moving up %" option. Experiment with the numerical field on the right to determine the percentage increase that offers the most value. - -In this specific instance, we've set it to a 113% increase compared to the previous day. This setting would have triggered our alert only five times in the past three months. As you can see from the chart, the other bars appear to be more or less equal. - -![alert-select-conditions-2](image9.png) - -## Step 1.5: Choose Your Preferred Notification Methods and Frequency - -![alert-select-notifications-2](image10.png) - -## Step 1.6: Confirm and Create Your Alert - -Ensure that you are satisfied with the name of your Alert. Once you've confirmed, click on 'Create Alert'. - -![alert-select-title-2](image11.png) - -Congratulations, you have successfully created your Alert! - diff --git a/src/docs/education-and-use-cases/timing-market-volatility-with-token-age-consumed/index.md b/src/docs/education-and-use-cases/timing-market-volatility-with-token-age-consumed/index.md deleted file mode 100644 index ff60cbcfb..000000000 --- a/src/docs/education-and-use-cases/timing-market-volatility-with-token-age-consumed/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Timing Market Volatility with Token Age Consumed -author: Dino Ibisbegovic -date: 2020-02-05 ---- - -[**Age Consumed**](https://academy.santiment.net/metrics/age-consumed) or Token Age Consumed(TAC) is a reliable on-chain indicator that signals changes in market conditions. This metric assigns higher value to coins that have been held for a longer duration, compared to those recently acquired. - -Spikes in the TAC chart indicate the movement of tokens that have been dormant for a considerable period. The underlying assumption is that long-term holders and experienced traders usually make well-informed decisions. Therefore, it can be very beneficial to monitor when these parties begin to transfer their holdings. - -Such events can introduce volatility to the token’s short-term price action. The direction of this volatility, whether upward or downward, is unique to each situation. However, a spike in TAC is always a prompt to pay closer attention. - -Consider Bitcoin's TAC chart for the past six months; Almost every significant peak either signaled an impending correction (red), or occurred at the lowest point of the rally (green): - -![](image3.png) - -The same pattern can be observed with an altcoin. For instance, all pictured spikes in Bancor's TAC either correlated with increasing downward pressure (red) or signaled a rebound (green): - -![](image2.png) - -For further illustration, here's Aragon's TAC chart, which aligns closely with major changes in price action: - -![](image1.png) - -From a fundamental standpoint, spikes in Token Age Consumed are among the most reliable indicators of volatility in the crypto market. When a substantial amount of 'old money' starts to move, there's almost always a significant reason behind it. Being aware of these movements as they occur is crucial. diff --git a/src/docs/education-and-use-cases/trading-and-transaction-volume/index.md b/src/docs/education-and-use-cases/trading-and-transaction-volume/index.md deleted file mode 100644 index d18a5930e..000000000 --- a/src/docs/education-and-use-cases/trading-and-transaction-volume/index.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: Trading and Transaction Volume -author: Santiment Team -date: 2024-06-17 ---- - - - -### Trading Volume - -- Includes only transactions related to trading. Consists of data from decentralized exchanges (DEX) and centralized exchanges (CEX). - - -### Transaction Volume - -- Includes all movements of tokens on the blockchain -- Covers transfers between wallets (e.g., for securing funds or managing investment portfolios) -- Includes payments for goods and services (real-world utility of cryptocurrencies) -- Includes interactions with smart contracts (DeFi activities such as staking, lending, and swapping tokens) - -### What is the difference between Trading Volume and Transaction Volume? - -In short, transaction volume represents all on-chain movements of a token, -while trading volume represents only the trading-related transactions (on-chain -and off-chain). - -![](./difference.png) - -The transaction volume metric is quite expansive and includes a variety of -on-chain activities that go beyond just trading-related transactions. It -captures transfers between wallets, which could be for reasons like securing -funds or managing different investment portfolios. Additionally, it includes -payments for goods and services, showcasing the real-world utility of -cryptocurrencies. On top of these, the metric also encompasses interactions -with smart contracts, which are pivotal in decentralized finance (DeFi) -activities like staking, lending, and swapping tokens. - - -Another difference to note is that transaction volume is purely on-chain data, -while trading volume is combination of on-chain data (from DEXs) and off-chain -data (which is self-reported from CEXs). - - -**Both metrics are crucial but serve different analytical purposes:** -transaction volume offers a peek into the actual use and movement of the currency within -its network, while trading volume helps understand the market sentiment and -liquidity. - - -### How to interpret Volume metrics - -Both volume metrics act in relatively similar ways, hence in the examples we -will refer only to trading volume. - - -An increase in trading volume is generally considered a precursor to a big price move. - - -For example, if Bitcoin's trading volume dramatically increases without a -corresponding price change, it might suggest that something significant is -happening beneath the surface that hasn't yet affected the price. **Savvy traders -might interpret this as an early warning signal of a potential price movement -and adjust their strategies accordingly**, either by securing their current -positions or preparing to capitalize on the anticipated movement. - -![](./bearish_bullish.png) - -When both the price of a token and the trading volume are moving in the same -direction, it generally suggests a strong market consensus regarding the value -of the token. If they're both increasing, this is often seen as a bullish sign, -indicating strong buying interest and potentially sustainable price growth. -**This scenario typically reflects a positive sentiment among investors, as they -are actively participating and driving the price up with their trades.** - - -Conversely, if both the price and trading volume are decreasing, it might -indicate a bearish market sentiment. This suggests that selling pressure is -high, and many holders are trying to offload their tokens, which can lead to a -decrease in price. **This kind of alignment between price and volume can signal a -consensus on value that is either very positive or very negative, depending on -the direction.** - - -![](./bearish_bullish_two_charts.png) - - - -Context is crucial, so we strongly suggest not to make trading decisions based -solely on this metric. Use a combination of metrics that will help you make a -more informed decision. - - -### How to monitor Volume metrics with Sanbase - -Here is a ready-to-be-copied Layout with Trading and Transaction volume for -your convenience: [link here](https://app.santiment.net/charts/YM8Zi2X6__sCl) - -![](./sanbase_chart.png) - -As soon as you have adjusted the Chart based on your preferences (time -intervals, colors, etc.) you can save it as a new private Layout. Then, using -the Master selector (the bigger one on the top) you can change the currently -analysed token to another while your visual preferences and metrics remain the -same. - -![](./selector.png) - -Or you can use the smaller selector to build on top of your chart and insert -more metrics, even for multiple tokens at once. - -See what others in crypto can’t! - - -- [Trading Volume in USD | Santiment Academy](/metrics/trading-volume) -- [Transaction Volume | Santiment Academy](/metrics/transaction-volume) - - diff --git a/src/docs/education-and-use-cases/understanding-circulation/index.md b/src/docs/education-and-use-cases/understanding-circulation/index.md deleted file mode 100644 index a1fe1eec8..000000000 --- a/src/docs/education-and-use-cases/understanding-circulation/index.md +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Understanding Circulation -author: Santiment Team -date: 2024-07-19 ---- - - - -## Definition - -The [circulation metric](https://academy.santiment.net/metrics/circulation/#definition) measures the number of unique coins or tokens being -transferred between addresses on a blockchain within a specific period. It -provides insights into the actual movement and usage of the asset, indicating -network activity and utility. - -Accounted tokens in Circulation are unique, meaning that if the same token is -moved multiple times per day via a *wash trade** it is counted only once. - - -A "wash trade" is a type of market -manipulation where a trader buys and sells the same financial instruments -simultaneously through different brokers, creating misleading activity in the -marketplace without any change in position. - - -![noborder](circulation.png) - -## Circulation VS Transaction Volume VS Stock to Flow ratio - -Circulation measures the number of unique coins/tokens being transferred -between addresses, while transaction volume includes all on-chain movements of -a token. This means that if one token/coin changes hands 5 times on a given -day, it will be counted once by the token circulation, but 5 times if were to -use [transaction -volume](https://academy.santiment.net/education-and-use-cases/trading-and-transaction-volume/). - -Circulation shouldn’t also be used interchangeably with [Stock to Flow (S2F) -ratio](https://academy.santiment.net/metrics/stock-to-flow/). S2F compares the -total supply of a token to the new annual production, often used to predict -price based on an asset's supply dynamics and scarcity. Circulation, on the -other hand, tracks the movement of unique coins between addresses within a -timeframe, indicating network activity and utility. - -## **How to interpret Circulation metric** - -High circulation often signals increased interest and utility, which can lead -to change in price direction. Depending on context, a spike in Circulation can -be a very good indicator of a nearing top or bottom as we can see on the chart -below: - -![noborder](circulation_chart.png) - -For instance, looking at UNI during a period of high circulation in early April -2024, we saw a local top in price. Similarly, in November 2023, a spike in -circulation preceded a significant price increase over the following months. -These patterns suggest that spikes in circulation can be early indicators of -price movements, either up or down, depending on the context. - -Context is crucial, so we strongly suggest not to make trading decisions based -solely on this metric or any other single metric for that matter. Use a -combination of metrics that will help you make a more informed decision. - -## **How to monitor Circulation using Sanbase** - -Here is a ready-to-be-copied Layout with Circulation for your convenience: -[Sanbase Layout](https://app.santiment.net/s/ZI_PQYY7) - -![noborder](circulation_chart2.png) - -As soon as you have adjusted the Chart based on your preferences (time -intervals, colors, etc.) you can save it as a new private Layout. Then, using -the Master selector (the bigger one on the top) you can change the currently -analyzed token to another while your visual preferences and metrics remain the -same. - -![noborder](selector.png) - -Alternatively you can use the smaller selector to build on top of your chart -and insert more metrics, even for multiple tokens at once. - -See what others in crypto can’t! - -More technical documentation about the metric can be found here: -[Circulation | Santiment Academy](https://academy.santiment.net/metrics/circulation/) - - diff --git a/src/docs/education-and-use-cases/understanding-crypto-market-cycles-through-lending-metrics/index.md b/src/docs/education-and-use-cases/understanding-crypto-market-cycles-through-lending-metrics/index.md deleted file mode 100644 index 10b500812..000000000 --- a/src/docs/education-and-use-cases/understanding-crypto-market-cycles-through-lending-metrics/index.md +++ /dev/null @@ -1,187 +0,0 @@ ---- -title: Understanding Crypto Market Cycles Through Lending Metrics -author: Santiment Team -date: 2025-04-03 ---- - - - -## Introduction - -The cryptocurrency market moves in cycles of expansion and contraction. While -many traders focus on price action or social sentiment, lending and borrowing -metrics provide unique insights into market conditions. These metrics can help -identify market extremes - both the overheated periods where caution is needed -and the cooling periods that might signal buying opportunities. - -This article explains key frameworks for analyzing crypto market conditions -through decentralized finance (DeFi) lending data. Below, we'll look at how to -spot market tops and bottoms using lending rates, debt levels, and liquidation -events. - -## What is DeFi Lending and Borrowing? - -DeFi lending and borrowing platforms allow users to lend and borrow digital -assets without traditional financial intermediaries like banks. They use smart -contracts - self-executing code on blockchains - to automate lending processes -and enforce agreement terms between parties. - -On these platforms: - -- Lenders deposit digital assets and earn interest -- Borrowers use assets as collateral to get loans in stablecoins or other - cryptocurrencies - -[These protocols](/metrics/lending-and-borrowing-protocols/) -offer more flexibility, accessibility, and transparency than traditional -finance. However, they come with risks such as smart contract vulnerabilities, -market volatility, and potential liquidations. - -## Framework 1: [The "Value of Money" Metric](https://app.santiment.net/charts/FT0jzE8N__sCl) - -### The Concept - -The first framework examines interest rates on lending platforms like Aave and -Compound. These rates reflect supply and demand for capital in crypto markets. - -When borrowing demand increases, interest rates rise. Extreme interest rate -spikes often signal market tops, while flat or low rates may indicate market -bottoms. - -This framework reflects an analysis of the behaviour of market participants, -where the determination of the value of money is a direct expression of general -market sentiment. - -### Key Indicators - -1. **Stable Coin Supply Rate**: The amount of interest earned when depositing - stablecoins like USDC or DAI -2. **Borrowing Rate**: The interest paid when borrowing these assets -3. **Supply/Borrow Ratio**: The relationship between available capital and - borrowed amounts - -### How to Interpret the Data - -![noborder](./image1.png) - -- **Market Top Signals**: Interest rates above 10-15% suggest overheated - conditions where borrowers are willing to pay high costs to gain leverage -- **Market Cooling**: Falling interest rates indicate decreasing demand for - leverage -- **Market Bottom Signals**: Sustained low, flat rates (3-4%) for several weeks - suggest reduced speculation and possible bottoming conditions - -The most reliable signal isn't just high rates but when rates rise quickly and -substantially above baseline levels. Similarly, the bottoming process typically -isn't complete until rates remain flat for 2-4 weeks. - -For determining 'value for money' you can use [this ready-to-use dashboard](https://app.santiment.net/charts/FT0jzE8N__sCl) - -## Framework 2: [The "Blood on the Streets" Liquidation Metric](https://app.santiment.net/charts/De_wFHJh__sCl) - -### The Concept - -Liquidations occur when borrowers' collateral value falls below required -thresholds. These forced collateral sales create market pressure and often -signal capitulation events. - -Large liquidation spikes combined with decreasing total debt can mark potential -market bottoms. - -### Key Indicators - -1. **Total Liquidations**: The dollar value of positions forcibly closed -2. **Total Debt Changes**: Increases or decreases in the total borrowed amount -3. **Repayments**: Voluntary debt reduction by borrowers (distinct from - liquidations) - -### Types of Leveraged Positions - -Most liquidations come from two types of positions: - -1. **Long Leverage**: Borrowing stablecoins against crypto assets to buy more - crypto -2. **Short Positions**: Borrowing crypto against stablecoins to sell and bet on - price decreases - -Long liquidations are more common and typically occur during market drops, -while short liquidations happen during sharp upward moves. - -### How to Interpret the Data - -![noborder](./image2.png) - -- **Large Liquidation Events**: Significant liquidation spikes often mark local - bottoms -- **Concurrent Debt Reduction**: When liquidations coincide with total debt - decreases, the signal strengthens -- **Support Levels**: Price levels where major liquidations occur often become - support in ranging markets - -For optimal entry points, look for the combination of large liquidations AND -significant debt reduction. The largest liquidation events of the past cycle -(August 2024) preceded substantial rallies. - -To monitor liquidations you can use [this ready-to-use dashboard](https://app.santiment.net/charts/De_wFHJh__sCl) - -## Complementary Metrics - -These additional metrics enhance the analysis: - -### 1. Total Open Interest - -Total [open -interest](/metrics/open-interest) -measures the total value of outstanding futures contracts. High open interest -during price increases often signals excessive leverage and impending -corrections. - -### 2. Funding Rates - -[Funding rates](/metrics/funding-rates-aggregated) -show the premium between perpetual futures and spot prices: - -- Positive rates: Longs pay shorts (bullish sentiment) -- Negative rates: Shorts pay longs (bearish sentiment) - -Negative funding rates often precede bounces as short liquidations can fuel -upward momentum. - -## Practical Application Framework - -To apply these insights effectively: - -1. **Monitor Heat Signals**: - * Track stable coin lending rates for signs of market overheating (>10%) - * Watch for extreme borrowing demand spikes - -2. **Identify Cooling Conditions**: - - Look for declining interest rates - - Wait for rates to flatten for 2-4 weeks - -3. **Confirm Capitulation**: - - Large liquidation events - - Significant debt reduction following liquidations - - Negative funding rates (shorts paying longs) - -4. **Adjust Strategy Based on Market Phase**: - - In strong uptrends: Consider adding positions after liquidation events - - In choppy ranges: Wait for price to hold support at liquidation levels - before entering - -## Conclusion - -Lending and borrowing metrics offer powerful insights into market psychology -and leverage conditions. By tracking interest rates, debt levels, and -liquidation events, traders can identify potential market extremes more -effectively than through price action alone. - -These metrics help answer key questions: - -- Is market demand for leverage rational or irrational? -- Have we seen enough pain to mark a potential bottom? -- Is the market cooling enough to consider re-entry? - -While no indicators are perfect, this lending-focused framework provides -additional perspective beyond traditional technical analysis, helping traders -make more informed decisions throughout market cycles. diff --git a/src/docs/education-and-use-cases/understanding-long-term-market-trends-and-cycles/index.md b/src/docs/education-and-use-cases/understanding-long-term-market-trends-and-cycles/index.md deleted file mode 100644 index 6236c594d..000000000 --- a/src/docs/education-and-use-cases/understanding-long-term-market-trends-and-cycles/index.md +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: Understanding Long-Term Market Trends and Cycles -author: Santiment Team ---- - -## Overview - -This handbook aims to help traders and investors identify the current stage in -a long-term market cycle. - -  - -For the purpose, we will use a layout with five charts with key indicators. We -will use BTC as a proxy. - -  - -Key indicators are: - -- Spikes in age consumed -- Changes in mean dollar age -- Divergence between MVRV and price -- Profit and loss levels -- Social volume trends - -  - -Open this layout with five charts and let’s dive in: - -[Sanbase Charts | Long-term market cycle](https://app.santiment.net/charts/long-term-market-cycle-24503) - -  - - - -## [Age Consumed](/metrics/age-consumed) - -Key metric on chart 1 of the layout is age consumed, which represents amounts -of coins that moved multiplied by the time that they spent in the last address. -Large spikes of this metric mean that long-term holders are moving their funds, -which often marks key turning points for the market. - -![noborder](./age_consumed.png) - - -Age Consumed - the number of coins changing addresses on a certain date, -multiplied by the time since they last moved. - - - -Identify critical market turning points by monitoring significant spikes. - - - -Spikes indicate long-term holders moving their funds, often signalling major -market shifts. - - -## [Mean Dollar Invested Age (MDIA)](/metrics/mean-coin-age) - -On chart 2 of the layout, you can see mean dollar age metrics, one of which is -measuring this value for all coins, while the other one is only looking at -coins moved within the last 365 days. These metrics help gauge the macro trend -strength. When the value drops, that indicates inflow of new money, and the -inverse indicates that money isn’t coming in. They usually start falling around -the middle of the bull market, acting as a confirmation of strength. Change of -mode from down to up often predicts major market tops. - -![noborder](./mdia.png) - - -MDIA - the average age of every dollar invested into the market cap of a coin. - - - -Gauge the strength of the macro trend using two MDIA metrics: one for all coins -and one for coins moved within the last 365 days. - - - -Changes in these metrics from downward to upward trends signal macro trend exhaustion. - -Dropping Values show inflow of new money, typically post-bull market midpoint, confirming market strength. - -Rising Values show lack of new money, often predicting major market tops. - - -## [MVRV Ratio](/metrics/mvrv) - -Chart 3 of the layout has MVRV ratios (Market Value to Realized Value) with -different timeframes. Here, the same idea of coins moved within specific time -applies. The key idea here is to look for divergences between MVRV and price. -MVRV diverging from price can be only caused by the change in realized value. -When realized value rises, that means on average market participants are buying -in at the highs, indicating “greed” mode of the market, and price tends to -trend down as a result. The opposite applies as well. When participants are -selling at the lows and realizing losses, the realized value drops and that -causes MVRV ratio to diverge to the upside. - -![noborder](./mvrv.png) - - -MVRV Ratio - an asset's market capitalization divided by realized capitalization. - - - -Observe divergences between MVRV and price by analyzing MVRVs for different -timeframes based on coin movements. - - - -Rising Realized Value indicates "greed," often leading to a downward trend. - -Dropping Realized Value indicates losses, causing MVRV to diverge upwards. - -Divergences reveal market sentiment and potential price movements. - - -## [Network Realized Profit and Loss](/metrics/network-profit-loss) - -Network Realized Profit/Loss on chart 4 of the layout measures the collective -PnL of all holders. Big negative spikes are usually the best long-term buy -signals. Spotting the tops, however, works a bit different - the biggest spikes -are happening around mid-bull market. But after that, when the price continues -higher but NRPL stays close to 0, this usually means that the market’s top is -near. - -![noborder](./nrpl.png) - - -Network Realized Profit/Loss - the average profit or loss of all coins that change addresses daily. - - - -Identify optimal buying opportunities and potential market peaks. - - - - -Big Negative Spikes indicate the best longterm buy signals. -Mid-Bull Market Spikes signify significant profit-taking. -Price rising with NRPL Near 0 suggests an approaching market top. - - -## [Social Volume](/metrics/social-volume) - -Social volume on panel 5 indicates the amount of discussion in crypto social -media. You generally want to get in when the amount of chatter is low, and the -average Joe isn’t interested in crypto at all, but when everyone is only taking -about Bitcoin, it’s best to consider an exit or partial profit taking strategy. - -![noborder](./social_volume.png) - - -Social Volume - the total number of social media messages that contain the -given search term at least once. - - - -Effectively time market entries and exits by monitoring social volume. - - - -Low chatter periods are ideal entry points when interest in crypto is minimal. -High chatter signals that it’s time to consider your exit strategy as interest peaks. - - -All of these metrics will help you better understand the crypto market trends -on a macro level and make more informed decisions. - -  - -[Sanbase Charts | Long-term market cycle](https://app.santiment.net/charts/long-term-market-cycle-24503) - -Feel free to save the layout with charts as your own and use the master -selector (the top one) to observe the same metrics for various tokens. - -![noborder](./selector.png) - -See what others in crypto can’t! diff --git a/src/docs/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/index.md b/src/docs/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/index.md deleted file mode 100644 index 45e045d22..000000000 --- a/src/docs/education-and-use-cases/understanding-market-expectations-through-historical-crypto-trends/index.md +++ /dev/null @@ -1,201 +0,0 @@ ---- -title: Understanding Market Expectations Through Historical Crypto Trends -author: Santiment Team -date: 2025-05-22 ---- - - - -Expectations are a powerful force in shaping financial markets. Yet, they can -also be your worst enemy if yours fall into the same category as most. It’s -common for the market to move in the opposite direction from what most -participants anticipate, and contrarian traders are typically the ones who most -commonly come out on top in volatile markets. Recognizing this, Sanbase -analyzes user discussions across all major crypto channels, offering a -data-driven perspective on the current sentiment and expectations within the -crowd. - -With Santiment’s [**Historical Crypto Trends**](https://app.santiment.net/social-trends/crypto-trends) tool, you can -assess how collective expectations have matched up with actual market movements -in the past. This not only provides valuable context but also helps in -forecasting potential future changes by recognizing familiar patterns. - -As you explore the tool’s graphs, you’ll encounter key metrics such as -[**social volume**](https://academy.santiment.net/metrics/social-volume/#definition) and -[**social dominance**](https://academy.santiment.net/metrics/social-dominance/#social-dominance-for-an-asset). -These powerful market indicators both offer insight into the intensity and -focus of market conversations, as well as reveal how the subject matter of -these conversations transition between topics. - -In this article, we’ll explore the primary queries within the -[**Historical Crypto Trends**](https://app.santiment.net/social-trends/crypto-trends) tool, -helping you gain a comprehensive understanding of market participants’ -expectations and how these sentiments play out over time. - -## Spotting Market Bottoms with the _Buy the Dip_ Query - -![noborder](./image1.png) - -Tracking the frequency of "buy the dip" mentions on social channels helps gauge -market sentiment. Spikes in these mentions signal investor optimism, often -after temporary rebounds that may still lead to further declines. Low volume of -conversations surrounding ‘buying the dip’ reflects fear and can indicate -potential buying opportunities. High volume reflects an overly eager crowd that -is not yet fearful, meaning the market dip is likely to continue longer. -Monitoring this trend with Sanbase provides valuable insights for timing market -entry points. - -**Query text:** - -``` -buy AND dip -``` - -[Link on social query](https://app.santiment.net/s/nrdmCug6) - -## Going Against the Crowd with BTC Price Expectations - -![noborder](./image2.png) - -Analyzing social chatter about Bitcoin’s future price reveals valuable -sentiment signals. Widespread predictions of unrealistically high prices -indicate market greed and often precede price pullbacks. In contrast, frequent -talk of extremely low prices reflects fear and can signal a potential market -bottom. Tracking these patterns with Sanbase helps identify shifts in sentiment -for more informed trading decisions. We recommend adjusting the thresholds of -these round number price mentions to consistently be around 10-15% above the -current market value of Bitcoin, and 10-15% below. - -**Query text:** - -``` -(10K OR 11K OR 12K OR 13K OR 14K OR 15K OR 16K OR 17K OR 18K OR 19K OR 20K OR 21K OR 22K OR 23K OR 24K OR 25K OR 26K OR 27K OR 28K OR 29K OR 30K OR 31K OR 32K OR 33K OR 34K OR 35K OR 36K OR 37K OR 38K OR 39K OR 40K OR 41K OR 42K OR 43K OR 44K OR 45K OR 46K OR 47K OR 48K OR 49K OR 50K OR 51K OR 52K OR 53K OR 54K OR 55K OR 56K OR 57K OR 58K OR 59K OR 60K OR 61K OR 62K OR 63K OR 64K OR 65K OR 66K OR 67K OR 68K OR 69K OR 10000 OR 11000 OR 10000 OR 11000 OR 12000 OR 13000 OR 14000 OR 15000 OR 16000 OR 17000 OR 18000 OR 19000 OR 20000 OR 21000 OR 22000 OR 23000 OR 24000 OR 25000 OR 26000 OR 27000 OR 28000 OR 29000 OR 30000 OR 31000 OR 32000 OR 33000 OR 34000 OR 35000 OR 36000 OR 37000 OR 38000 OR 39000 OR 40000 OR 41000 OR 42000 OR 43000 OR 44000 OR 45000 OR 46000 OR 47000 OR 48000 OR 49000 OR 50000 OR 51000 OR 52000 OR 53000 OR 54000 OR 55000 OR 56000 OR 57000 OR 58000 OR 59000 OR 60000 OR 61000 OR 62000 OR 63000 OR 64000 OR 65000 OR 66000 OR 67000 OR 68000 OR 69000) AND (bitcoin OR btc) -``` - -``` -(100K OR 101K OR 102K OR 103K OR 104K OR 105K OR 106K OR 107K OR 108K OR 109K OR 110K OR 111K OR 112K OR 113K OR 114K OR 115K OR 116K OR 117K OR 118K OR 119K OR 120K OR 121K OR 122K OR 123K OR 124K OR 125K OR 126K OR 127K OR 128K OR 129K OR 130K OR 131K OR 132K OR 133K OR 134K OR 135K OR 136K OR 137K OR 138K OR 139K OR 140K OR 141K OR 142K OR 143K OR 144K OR 145K OR 146K OR 147K OR 148K OR 149K OR 150K OR 151K OR 152K OR 153K OR 154K OR 155K OR 156K OR 157K OR 158K OR 159K OR100000 OR 101000 OR 102000 OR 103000 OR 104000 OR 105000 OR 106000 OR 107000 OR 108000 OR 109000 OR 110000 OR 111000 OR 112000 OR 113000 OR 114000 OR 115000 OR 116000 OR 117000 OR 118000 OR 119000 OR 120000 OR 121000 OR 122000 OR 123000 OR 124000 OR 125000 OR 126000 OR 127000 OR 128000 OR 129000 OR 130000 OR 131000 OR 132000 OR 133000 OR 134000 OR 135000 OR 136000 OR 137000 OR 138000 OR 139000 OR 140000 OR 141000 OR 142000 OR 143000 OR 144000 OR 145000 OR 146000 OR 147000 OR 148000 OR 149000 OR 150000 OR 151000 OR 152000 OR 153000 OR 154000 OR 155000 OR 156000 OR 157000 OR 158000 OR 159000) AND (bitcoin OR btc) -``` - -[Link on social query](https://app.santiment.net/s/jbpgKsYO) - -## Analyzing Crowd Mentions of Bear or Bull Market - -![noborder](./image3.png) - -Monitoring how often the crypto community references a "bull market" or "bear -market" provides essential insight into prevailing market sentiment. A sudden -surge in mentions of a "bull market" typically signals growing optimism, which -can sometimes indicate the market is becoming overheated and due for a -correction. Conversely, an increasing volume of "bear market" discussions often -reflects heightened pessimism and anxiety, which can suggest the market is -approaching or has reached a bottom. - -**Query text:** - -``` -bull OR bullish -``` - -``` -bear OR bearish -``` - -[Link on social query](https://app.santiment.net/s/njhTxpbX) - -## Analyzing Mentions of "Higher" or "Lower" in Price Discussions - -![noborder](./image4.png) -Tracking how often traders and market participants mention that prices will go -"higher" or "lower" offers valuable clues about market expectations. A spike in -conversations predicting that prices will move "higher" often signals growing -optimism and bullish sentiment, which can sometimes precede a period of -correction as the market becomes overconfident. On the other hand, an increase -in mentions of prices moving "lower" tends to reflect rising pessimism or fear, -which can point to an oversold market and a possible rebound. - -**Query text:** - -``` -high OR higher` -``` - -``` -low OR lower -``` - -[Link on social query](https://app.santiment.net/s/-iQm0v3E) - -## Analyzing Mentions of "Pump" and "Dump" in Market Discussions - -![noborder](./image5.png) - -Monitoring how frequently the crypto community uses terms like "pump" or "dump" -can offer critical insights into crowd behavior and short-term market -sentiment. A sudden increase in mentions of a potential "pump" often signals -heightened excitement and speculative interest, which can sometimes lead to -rapid price surges followed quickly by corrections as enthusiasm fades. -Conversely, a rise in "dump" discussions tends to indicate growing anxiety -about potential price drops, often surrounding fears of sell-offs or -manipulation. - -**Query text:** - -``` -pump -``` - -``` -dump -``` - -[Link on social query](https://app.santiment.net/s/ibsJUqyi) - -## Tariffs - -![noborder](./image6.png) - -In 2025, Donald Trump introduced tariffs that rocked traders’ opinions about -both stock and crypto markets. For the most part, tariffs are discussed at a -high frequency whenever there are new developments or changes to countries’ -policies on tariffs. These policy changes often coincide with a shift in market -direction. Therefore, you can likely find profitable trades by buying if tariff -discussions spike while markets had been declining, or selling if tariff -discussions spike while markets had been rising. - -**Query text:** - -``` -tarif OR tariff OR tariffs -``` - -[Link on social query](https://app.santiment.net/s/1rjfXuuc) - -## Altseason - -![noborder](./image7.png) - -When traders begin to become enthralled with altcoins, this is often a -reflection of greed or overconfidence in the markets. And if altcoins have been -on a prolonged rally, you may see a spike in the term “altseason”. This means -that traders are confident enough that the current altcoin rally will continue. -Since markets historically move the opposite direction of the crowd’s -expectations, you can interpret spikes in “altseason” as a bearish one in -almost all cases. - -**Query text:** - -``` -(alt AND season) OR alts OR szn OR altseazon OR altseason OR (altcoin AND seazon) -``` - -[Link on social query](https://app.santiment.net/s/FQjsj8kr) - -## Conclusion - -By leveraging tools like [Historical Crypto Trends](https://app.santiment.net/social-trends/crypto-trends), investors and -analysts can move beyond guesswork and gain a data-backed understanding of -market sentiment. Analyzing custom keyword frequencies on the Social Trends -page not only sheds light on current expectations but also equips you to -recognize trends and anticipate possible market shifts. Ultimately, -incorporating these insights can lead to more informed and confident -decision-making in the dynamic world of crypto. diff --git a/src/docs/education-and-use-cases/understanding-short-term-market-trends/index.md b/src/docs/education-and-use-cases/understanding-short-term-market-trends/index.md deleted file mode 100644 index a5fc6a508..000000000 --- a/src/docs/education-and-use-cases/understanding-short-term-market-trends/index.md +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: Understanding Short-Term Market Trends -author: Santiment Team -date: 2024-09-16 ---- - -## Overview - -This handbook aims to help traders and investors identify market tops. It’s -most useful for small to mid-cap coins driven by momentum and social -narratives. - -  - -For the purpose, we will use a layout with four charts with key indicators. We -will use SHIB as a proxy. - -  - -Key indicators are: - -- Network activity (address activity and network growth) -- Social metrics (volume and sentiment) -- Valuation metrics (MVRV) -- Derivative metrics (funding rate and open interest) - -  - -Open this layout with four charts and let’s dive in. - -[Sanbase Charts | Short-term market cycle]( https://app.santiment.net/charts/short-term-over-under-valued-coins-24504) - -  - - - -## Network Activity - -Chart 1 of the layout combines address activity and network growth metrics. -The idea is to gauge if the price rise is supported by the network metrics -rise. If it isn’t - good chance for a top. - -![noborder](./network_activity.png) - - -Active Addresses 24h - the number of distinct addresses that participated in a -transfer for the given asset in the past 24 hours window. - -Network Growth - the number of new addresses that transferred a given coin for -the first time. - - - -Assess if price rises are supported by network activity. - - - -If network metrics don't rise with the price, it often signals a potential -market top. - - -## Social Metrics - -Same idea applies to social volume and sentiment metrics on Chart 2 of the layout. Those metrics are usually the strongest mid-trend. When they start slumping but the price still pushes higher - that indicates narrative weakening and momentum exhaustion, which is a good signal to get out. - -![noborder](./social_metrics.png) - - -Social Volume - the total number of social media messages that contain the -given search term at least once. - -Weighted Sentiment - a numeric representation of social context around a coin. - - - -🎯 Assess mid-trend strength through social metrics. - - - -A decline in social volume and sentiment despite rising prices indicates -weakening narratives and momentum, hence an exit signal. - - -## Valuation Metrics - -Chart 3 of the layout shows Market Value to Realized Value (MVRV) Ratio metrics. The same approach applies as in long-term trend analysis, just on a much shorter timeframe. - -![noborder](./valuation_metrics.png) - - - MVRV - an asset's market capitalization divided by realized capitalization. - - - -Observe divergences between MVRV and price by analyzing MVRVs for different -timeframes based on coin movements. - - - -Rising Realized Value indicates "greed," often leading to a downward trend. - -Dropping Realized Value indicates losses, causing MVRV to diverge upwards. - -Divergences reveal market sentiment and potential price movements. - - -## Derivatives Metrics -On Chart 4 of the layout we look at funding rate and open interest metrics. -They allow us to analyse the derivatives market of a coin. Increase of open -interest and high funding while price staying seemingly slat might indicate -insiders positioning for an upcoming catalyst event. - -![noborder](./derivative_metrics.png) - - -Total Funding Rates Aggregated by Asset - the aggregation of all funding rates -by open interest for a given asset. - -Open Interest in coins - the sum of open interests of all contracts for a given -asset. - - - -Analyse the derivatives market for potential insider activity. - - - -Rising open interest and high funding rates with stable prices indicate insider -positioning for upcoming catalyst events. - - -All of these metrics will help you better spot trend reversals early and to -identify potential infliction points. - -[Sanbase Charts | Short-term market cycle]( https://app.santiment.net/charts/short-term-over-under-valued-coins-24504) - -Feel free to save the layout with charts as your own and use the master selector (the top one) to observe the same metrics for various tokens. - -![noborder](./selector.png) - -See what others in crypto can’t! diff --git a/src/docs/education-and-use-cases/understaning-daily-active-addresses/index.md b/src/docs/education-and-use-cases/understaning-daily-active-addresses/index.md deleted file mode 100644 index e98723ef1..000000000 --- a/src/docs/education-and-use-cases/understaning-daily-active-addresses/index.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Understanding Daily Active Addresses (DAA) -author: Santiment Team -date: 2024-07-08 ---- - - - -## Definition - -[Daily Active Addresses(DAA)](https://academy.santiment.net/metrics/daily-active-addresses/) is the amount of unique active addresses that participate in transactions -on a blockchain network each day. It's a measure of the network's activity and -usage. High DAA suggests strong user engagement and network utility. DAA can be -influenced by various factors like market trends, network upgrades, or major -events. - -## How to interpret the Daily Active Addresses metric - -Generally, there's a correlation between DAA and price. For instance: - -- **Positive Correlation**: When DAA rises, it often signals increased interest - and price movement. For example, during periods when Ethereum's DAA - increased, we observed a positive price trend, even if the price was - initially wobbly. -- **Long-term Growth**: Consistent, long-term growth in DAA is a positive sign, - indicating rising utility and potential for price appreciation. -- **Market Top Indicator**: A sudden spike in DAA can sometimes indicate a - market top, signalling a rush of activity before a sell-off. - -![noborder](./daa_chart.png) - -Daily Active Addresses (DAA) is a powerful metric when combined with others -like Whale Transactions. DAA shows network activity, while Whale Transactions -highlight big player movements. For instance, a spike in DAA with high Whale -Transactions can indicate upcoming volatility. - -![noborder](./daa_combined_with_other_metrics.png) - - -Context is crucial, so we strongly suggest not to make trading decisions based -solely on this metric. Use a combination of metrics that will help you make a -more informed decision. - - -## How to monitor DAA using Sanbase - -Here is a ready-to-be-copied Layout with Trading and Transaction volume for -your convenience: [Sanbase Daily Active Addresses Chart](https://app.santiment.net/charts/daily-active-addresses-25309) - -![noborder](./daa_sanbase_chart.png) - -As soon as you have adjusted the Chart based on your preferences (time -intervals, colors, etc.) you can save it as a new private Layout. Then, using -the Master selector (the bigger one on the top) you can change the currently -analysed token to another while your visual preferences and metrics remain the -same. - -![noborder](./sanbase_selector.png) - -Or you can use the smaller selector to build on top of your chart and insert -more metrics, even for multiple tokens at once. - -See what others in crypto can’t! - - -More technical documentation about the metric can be found here: [Daily Active -Addresses | Santiment Academy](/metrics/daily-active-addresses) - diff --git a/src/docs/education-and-use-cases/whale-activity-alert/index.md b/src/docs/education-and-use-cases/whale-activity-alert/index.md deleted file mode 100644 index d46ebe1fe..000000000 --- a/src/docs/education-and-use-cases/whale-activity-alert/index.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Sanbase Alerts Example - Whale Activity -author: Daria Karpova -date: 2022-04-04 ---- - -Whale activity consists of several related metrics; [Whale transaction volume](https://academy.santiment.net/metrics/whale-transaction-volume/), [Whale transaction count](https://academy.santiment.net/metrics/whale-transaction-count/#description), [Combined Balance of Holders](https://academy.santiment.net/metrics/supply-distribution/combined-balance-of-holders/), [Top Holders](https://academy.santiment.net/metrics/top-holders/#top-holders-balance) and [Amount in Top Holders](https://academy.santiment.net/metrics/amount-in-top-holders/). By closely monitoring the actions of major market players (which, depending on the asset, could be addresses worth $1M or more), you can gain insights to guide your own trading decisions. - -Many traders, understandably, are cautious about making decisions during volatile market periods. The risk of buying or selling at inopportune times is significant: will the prices fall? Will they rebound? - -At times, the market may appear calm, only for a whale to make a move and rapidly shift the landscape. - -Consider the following example. - -Between February and March 2021, we observed that whale activity (represented in pink and orange) for YFI often signaled price peaks (shown in green), which were invariably followed by substantial drops. However, starting from April, whale activity and price began to diverge. - -![whale-chart](image1.png) - -So, what happened next? - -In May 2021, YFI's price seemed to be steadily increasing, while whale activity remained stable. Then, on May 8, we noticed a sudden surge in transactions from whales, which coincided with another price peak, followed by a dramatic price drop. - -![whale-chart-2](image2.png) - -A wise trader could have considered the sudden surge as a possible reason to exit. Though how you choose to act on this information is entirely up to you, it can be just one additional data point that can inform a very valuable decision. Remember, knowledge is power, and timely knowledge is even more so, especially when it comes to trading. Spotting the surge manually requires a lot of manual effort, the smart trader utilizes the alerts feature. - -## Setting Up a Whale Transaction Alert - -In this guide, we will walk you through the process of setting up a Whale Transaction Alert. - -## Step 1: Navigate to Alerts and Choose an Asset to Monitor - -You can either select an asset you wish to monitor or use an asset from your existing watchlist. - -![alert-select-asset](image3.png) - -## Step 2: Selecting Metrics - -Navigate to the metrics section and choose your preferred 'Whale Transactions' from the On-Chain metrics set. - -![alert-select-metrics-1](image4.png) - -![alert-select-metrics-2](image5.png) - -Examine the chart thoroughly. In this example, the alert would have been triggered 79 times over a three-month period, which could be excessive. - -## Step 3: Fine-Tune Your Conditions - -Adjust your conditions until you're satisfied with the potential number of alerts. For example, you might want to switch to the percentage metric that moves up or down compared to the previous 7 days. - -In the example below, we've adjusted the conditions to yield a total of 21 alerts over a 3-month period. - -![alert-select-condition](image6.png) - -## Step 4: Choose Your Preferred Notification Methods and Frequency - -![alert-select-notifications](image7.png) - -## Step 5: Confirm Alert Name and Create Alert - -Ensure you are satisfied with the name of your alert. Once confirmed, click on the 'Create Alert' button. - -![alert-select-condition](image8.png) - -Congratulations, you have successfully created an alert! \ No newline at end of file diff --git a/src/docs/education-and-use-cases/whale-monitoring-to-predict-market-moves/index.md b/src/docs/education-and-use-cases/whale-monitoring-to-predict-market-moves/index.md deleted file mode 100644 index 37ec98012..000000000 --- a/src/docs/education-and-use-cases/whale-monitoring-to-predict-market-moves/index.md +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: Whale Monitoring to Predict Market Moves -author: Santiment Team -date: 2025-05-23 ---- - - - -It's important to monitor on how cryptocurrency whales are -treating their bags. Generally, if they're accumulating, it's a good sign -crypto market caps are continuing to rise. If they're moving many coins to -exchanges, on the other hand, it's a sign that a dump may be around the corner. - -There are several different methods to monitor whale activity on Santiment. -Let's go through a few of the most efficient ones: - -## Key Stakeholder Tiers (Supply Distribution) - -One of the best ways to get an idea of what whales are collectively doing with -their coins is by checking out the total holdings of key large whales that tend -to control the destiny of future price movements. For Bitcoin, we generally -suggest checking out the wallets holding 10 or more BTC (currently about \$1M -or more) or, more specifically the wallets holding between 10 to 10K BTC. You -can see them, and a few other [key whale tiers here](https://app.santiment.net/s/2wEU5Co9). - -![noborder](./image9.png) - -For most altcoins, since their market caps aren't nearly as massive as -Bitcoin's you can use a rule of thumb of finding the tier closest to $100K, and -ranging up to the tier closest to $10M. This range will typically (not always, -but usually) have some of the highest correlation on price movements. - -An easy way to create your own tiers and track groups of collective whale -wallets is to: - -1. Go to "Balance of Addresses" on the left panel, and add it to your current - chart template. - -2. Click on the "Merge" button on the chart tools that were added to your chart - template. - -3. Hit the checkmarks next to the tiers you'd like (do the math to calculate - how many coins equal $100K up to $10M) - -4. Hit the confirm button - -## Specific Key Stakeholders Wallets - -Another method to keep tabs on whales is by opening the [Top Transactions table](https://app.santiment.net/s/kataWThn). For any asset that has whale -metrics on the platform, you will be presented with the 50 largest transfers -over the past 30 days. This table is complete with the date and time each -transaction occurred, as well as the wallet they sent to, and the raw -transaction hash link for further analysis/investigation. - -![noborder](./image10.png) - -You can either get to it from opening the linked text in the last paragraph, or -by going to the Charts page on Santiment, and searching for "Top Transactions" -in the left search bar, and double clicking the metric to add it to the current -chart. - -To take things further, you can always look up a specific wallet on -Santiment's [Historical -Balance](https://app.santiment.net/labs/balance?assets=) page to see how any -wallet's coin holdings have fluctuated over time. This feature also shows every -coin currently held within the wallet, as well as the total USD holdings of the -wallet. This can be highly useful when looking for specific whale addresses -that have a fairly strong correlation with where markets tend to move next. - -![noborder](./image11.png) - -If you see the chart page show up as blank, it may be because the wallet isn't -Bitcoin-based, Ethereum-based, or Litecoin-based. We do plan to have this -feature get further support for more networks down the road, though. - -## Whale Transaction Spikes - -For a more simplistic way to recognize when an asset's price pattern may be -about to change, check out the amount of "whale transactions" that exceed a -value of $100K or more, or $1M or more. You can find the [default template for it here](https://app.santiment.net/s/n8ctb2Yd). - -An asset like Bitcoin, being the largest market cap in crypto, will naturally -have tens of thousands of \$100K+ whale transactions on any given day. But if -you venture outside the top 250 market caps or so, you'll come across coins -that only see 1 or 2 on any given day. - -![noborder](./image12.png) - -Whether the coin is a big or small asset, though, you'll still likely find -value in seeing when whales are becoming active again. Many make the mistake of -assuming that an increase in whale transactions is always a bullish sign. In -actuality, it is a sign of volatility and price direction change. When whales -make large transfers, they could equally be accumulating or dumping. So that's -why it can be very useful to reference it in tandem with the Key Stakeholder -Tiers. - -## Whale CEX Deposit Dashboard - - - -Often times, you may not be sure of what asset you are looking for, and you -simply want to see which coins may suddenly be getting significantly moved by -whales. We specifically have built a dashboard for tracking when large batches -of any coin are moving to centralized exchanges. This is especially useful as a -warning sign that a coin's price may soon dump, and it's a good time to take -profit. Coins typically move from cold wallets to centralized exchanges for one -reason, and it's to sell them. - -![noborder](./image13.png) - -We have written a couple of comprehensive articles about how to effectively use -this -dashboard [here](https://insights.santiment.net/read/try-the-new-centralized-exchange-deposit-dashboard-now-8202) and [here](https://insights.santiment.net/read/using-santiment-s-whale-deposit-centralized-exchange-dashboard-8463). -And we definitely encourage you to check them out to begin utilizing this -helpful tool. - -Do you have some other ways you like to track whale activity on Santiment? Let -us know what you think about our suggestions, or if you have further ideas of -your own. We may just integrate more features if you have an idea on more -useful blockchain data scraping! - ---- - - - -**Explore the data** - -To explore the data you can start a two-week free trial from [the pricing page](https://app.santiment.net/pricing) - - - ---- - - - -**Disclaimer** - -The opinions expressed in the post are for general informational -purposes only and are not intended to provide specific advice or -recommendations for any individual or on any specific security or investment -product. - - diff --git a/src/docs/for-developers/index.md b/src/docs/for-developers/index.md deleted file mode 100644 index 8e32b9f04..000000000 --- a/src/docs/for-developers/index.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Getting started for Developers -author: Santiment Team -date: 2023-05-10 -description: Santiment overview for Developers ---- - - -## Introduction - -The Santiment API is a powerful tool designed to provide crucial data for your -financial models. By leveraging this API, you can gain comprehensive insights -into the cryptocurrency market, encompassing social trends, developmental -metrics, and on-chain activities—all consolidated into a single platform. - -## What does Santiment offer to developers? - -Santiment offers a robust [GraphQL](https://graphql.org/) API, empowering -developers with advanced capabilities to fetch essential crypto market data. -GraphQL provides a highly flexible query language for APIs -that enables more intuitive and descriptive queries compared to traditional -REST API methods. With GraphQL, users can request exactly the data they need, -minimizing the number of API calls and reducing bandwidth usage. - -Apart from precomputed metrics, Santiment has the [Santiment Queries](/santiment-queries) -product, which allows developers to write custom SQL to obtain the data from the -database directly. These SQL queries can be executed from the [Queries web page](https://queries.santiment.net/) -or [execute the queries through the API](/santiment-queries/api-access) - -### GraphQL API - -In this example, the query fetches the daily active addresses for Bitcoin. The -query is self-descriptive and easy to maintain. New members to your team can -intuitively understand the query without the need to consult the documentation. - -```graphql-explorer -{ - getMetric(metric: "daily_active_addresses"){ - timeseriesDataJson( - selector: {slug: "bitcoin"} - from: "2024-01-01T00:00:00Z" - to: "2024-01-31T23:59:59Z" - interval: "1d") - } -} -``` - -Find more GraphQL query examples on the [Common -Queries](/sanapi/common-queries) page, or read [How to access the -API](sanapi/accessing-the-api) article - -### Python API-wrapper library - -Santiment provides a [Python API wrapper library](https://github.com/santiment/sanpy) -that allows you to fetch metrics with a simple function call. The code shows -how to translate the GraphQL query from above. The data is returned in a Pandas -dataframe. - -```python -import san -san.get("daily_active_addresses", - slug="bitcoin", - from_date="2024-01-01", - to_date="2024-01-31", - interval="1d") -``` - -### Metrics Exported to S3 - -Santiment exports metrics data to Amazon S3 in [Parquet](https://parquet.apache.org/) format, providing -efficient access to large-scale historical data. For tasks like backtesting -or ML model training where you need to process large volumes of immutable -historical data, reading directly from S3 is more efficient than fetching -via API. - -The exported data includes both intraday (5-minute intervals) and daily -aggregated metrics, stored in an organized directory structure. - -To request data exporting and S3 bucket access credentials, please -[contact us](mailto:Suzanne.p@santiment.net). - -**Read more**: [Metrics Exported to S3 - Technical Documentation](/for-developers/metrics-exported-s3) - - -## Metrics Catalog - -There are a few different ways to explore the available metrics. -- Visit the [metrics' docs articles page](/metrics) where you can find links to - the documentation articles of the metrics. -- Open the [Metrics Catalog](https://api.santiment.net/available_metrics) - webpage that list all the metrics with information about the available - assets. This page allows you to filter the metrics supported by a given asset - and download the data as CSV. -- Open any [chart page on Sanbase](https://app.santiment.net/charts?slug=ethereum) and explore the metrics on the sidebar. -- Use the [GraphQL API](https://api.santiment.net/graphiql?query=%7B%0A%20%20getAccessRestrictions(filter%3A%20METRIC%2C%20product%3A%20SANAPI%2C%20plan%3A%20BUSINESS_PRO)%20%7B%0A%20%20%20%20name%0A%20%20%20%20isAccessible%0A%20%20%20%20isRestricted%0A%20%20%20%20isDeprecated%0A%20%20%20%20restrictedFrom%0A%20%20%20%20restrictedTo%0A%20%20%20%20docs%20%7B%0A%20%20%20%20%20%20link%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) -that shows the restrictions for each subscription product -- which metrics are accessible and what are the time range restrictions for them. - - -**Read next: [How to Access the API](/sanapi/accessing-the-api/)** - diff --git a/src/docs/for-developers/metrics-exported-s3.md b/src/docs/for-developers/metrics-exported-s3.md deleted file mode 100644 index 08db25311..000000000 --- a/src/docs/for-developers/metrics-exported-s3.md +++ /dev/null @@ -1,214 +0,0 @@ ---- -title: Metrics Exported to S3 - Technical Documentation -author: Santiment Team -date: 2025-12-03 -description: Technical documentation for accessing and reading Santiment metrics data exported to S3 buckets ---- - -## Overview - -Santiment exports metrics data to Amazon S3 in [Parquet](https://parquet.apache.org/) format, providing an efficient way to access large-scale time-series data. This data can be queried directly from S3 using analytics tools or downloaded and stored locally. - -## Data Structure - -The exported data is organized in a hierarchical directory structure: - -``` -s3://santiment-metrics/ -├── assets.parquet # Asset metadata lookup table -├── metrics.parquet # Metric metadata lookup table -└── metrics/ - ├── intraday/ # 5-minute interval metrics data - │ └── {metric_name}/ - │ └── {year}/ - │ └── {month}/ - │ └── data.parquet - └── daily/ # Daily aggregated metrics data - └── {metric_name}/ - └── {year}/ - └── {month}/ - └── data.parquet -``` - -### Path Components - -- `{metric_name}`: The name of the metric (e.g., `price_usd`, `active_addresses`) -- `{year}`: Four-digit year (e.g., `2024`) -- `{month}`: Two-digit month with leading zero (e.g., `01` for January, `12` for December) - -### Metrics Data Files - -**Path**: `s3://santiment-metrics/metrics/{interval}/{metric_name}/{year}/{month}/data.parquet` - -**Schema**: - -| Column | Type | Description | -|--------|------|-------------| -| `asset_id` | INTEGER | Foreign key reference to assets.parquet | -| `metric_id` | INTEGER | Foreign key reference to metrics.parquet | -| `dt` | TIMESTAMP | Date and time of the measurement | -| `value` | DOUBLE | The metric value | - -**Sample Data**: - -``` -asset_id | metric_id | dt | value ----------|-----------|---------------------|------------------ -378 | 1289 | 2024-01-01 00:00:00 | 42280.23527619226 -378 | 1289 | 2024-01-01 00:05:00 | 42384.54766118636 -``` - -### Assets Lookup Table - -**Path**: `s3://santiment-metrics/assets.parquet` - -**Schema**: - -| Column | Type | Description | -|--------|------|-------------| -| `asset_id` | INTEGER | Unique identifier for the asset | -| `name` | STRING | Full name of the asset | -| `ticker_slug` | STRING | Ticker symbol and slug combination | -| `decimals` | INTEGER | Number of decimal places for the token | - -**Sample Data**: - -``` -asset_id | name | ticker_slug | decimals ----------|--------------------------------|----------------------------------|---------- -1 | 0chain | ZCN_0chain | 10 -2 | 0x | ZRX_0x | 18 -3 | 0x0-ai-ai-smart-contract | 0x0_0x0-ai-ai-smart-contract | 9 -``` - -### Metrics Lookup Table - -**Path**: `s3://santiment-metrics/metrics.parquet` - -**Schema**: - -| Column | Type | Description | -|--------|------|-------------| -| `metric_id` | INTEGER | Unique identifier for the metric | -| `name` | STRING | Full name of the metric | -| `version` | STRING | Version or start date of the metric | -| `status` | STRING | Current status (e.g., `production`, `testing`) | - -**Sample Data**: - -``` -metric_id | name | version | status -----------|---------------------------------------------------|------------|------------ -1 | funding_rates_aggregated_per_exchange | 2019-01-01 | production -2 | funding_rates_aggregated_per_settlement_currency | 2019-01-01 | production -3 | total_funding_rates_aggregated_per_asset | 2019-01-01 | production -``` - -## Querying Data with ClickHouse - -In the following examples we use ClickHouse [s3 Table Function](https://clickhouse.com/docs/sql-reference/table-functions/s3) to request data from S3 buckets and -process it using SQL queries. But You can use any other instrument which -supports data reading from S3 buckets. - -### Basic Query Example - -The following example demonstrates how to query metrics data with proper asset and metric name resolution: - -```sql -SELECT - assets.name AS asset, - metrics.name AS metric, - dt, - value -FROM s3( - url='s3://santiment-metrics/metrics/intraday/price_usd/2024/01/data.parquet', - access_key_id='YOUR_KEY_ID', - secret_access_key='YOUR_KEY_SECRET', - format='Parquet' -) AS data -LEFT JOIN ( - SELECT - asset_id, - name - FROM s3( - url='s3://santiment-metrics/assets.parquet', - access_key_id='YOUR_KEY_ID', - secret_access_key='YOUR_KEY_SECRET', - format='Parquet' - ) -) AS assets USING asset_id -LEFT JOIN ( - SELECT - metric_id, - name - FROM s3( - url='s3://santiment-metrics/metrics.parquet', - access_key_id='YOUR_KEY_ID', - secret_access_key='YOUR_KEY_SECRET', - format='Parquet' - ) -) AS metrics ON metrics.metric_id = data.metric_id; -``` - -### Using Wildcards - -You can use wildcards in the S3 path to query multiple files at once. The following components support wildcard patterns: - -- **Interval**: `intraday` or `daily` -- **Metric name**: `price_usd`, `active_addresses`, etc. -- **Year**: `2024`, `2023`, etc. -- **Month**: `01`, `02`, ..., `12` - -**Example: Query all months in 2024 for a specific metric** - -```sql -SELECT - assets.name AS asset, - metrics.name AS metric, - dt, - value -FROM s3( - url='s3://santiment-metrics/metrics/intraday/price_usd/2024/*/data.parquet', - access_key_id='YOUR_KEY_ID', - secret_access_key='YOUR_KEY_SECRET', - format='Parquet' -) AS data -LEFT JOIN ( - SELECT asset_id, name - FROM s3( - url='s3://santiment-metrics/assets.parquet', - access_key_id='YOUR_KEY_ID', - secret_access_key='YOUR_KEY_SECRET', - format='Parquet' - ) -) AS assets USING asset_id -LEFT JOIN ( - SELECT metric_id, name - FROM s3( - url='s3://santiment-metrics/metrics.parquet', - access_key_id='YOUR_KEY_ID', - secret_access_key='YOUR_KEY_SECRET', - format='Parquet' - ) -) AS metrics ON metrics.metric_id = data.metric_id -WHERE asset.name = 'bitcoin'; -``` - -## Intraday vs Daily Metrics - -### Intraday Metrics - -- **Path**: `s3://santiment-metrics/metrics/intraday/{metric_name}/{year}/{month}/data.parquet` -- **Granularity**: 5-minute intervals -- **Use cases**: Intraday trading, detailed analysis, real-time monitoring - -### Daily Metrics - -- **Path**: `s3://santiment-metrics/metrics/daily/{metric_name}/{year}/{month}/data.parquet` -- **Granularity**: Daily aggregated values -- **Use cases**: Long-term trend analysis, reduced data volume, historical comparisons - - - -**Read next: [How to Access the API](/sanapi/accessing-the-api/)** - diff --git a/src/docs/for-traders/index.md b/src/docs/for-traders/index.md deleted file mode 100644 index 385db9bf3..000000000 --- a/src/docs/for-traders/index.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: Getting started for traders -description: Explanations, tutorials and use cases for Santiment metrics and tools. Learn how to use our platform to better understand market behavior, network activity and stakeholder trends. -author: Santiment Team ---- - -Santiment is an all-in-one market behavior and network intelligence platform for cryptocurrency traders. As a trader, our tools can help you identify, contextualize, and eventually - predict market behavior. -All Santiment tools and products serve a singular purpose - to help users understand the behavioral patterns and activities of crucial market stakeholders. - -Instead of relying on pricing data, which is notoriously prone to manipulation in crypto, our indicators and custom trading strategies leverage on-chain data, as well as custom social and development information collected and processed by Santiment. This also means that many of our metrics are entirely custom-built and unavailable anywhere else. - -You can find out more about our data feeds on [SanAPI page](https://api.santiment.net). - -## Use cases - -As a general overview, Santiment tools can enhance and complement your trading in several principal ways: - -## Spot tops and exit opportunities - -A number of our metrics have proven highly effective in signaling forming tops and impending corrections. Here’s just a few examples: - --> Using our social data, we found that extreme spikes in a coin’s social volume during a rally are often a reliable indicator of local tops. This is especially the case with mid and low-cap coins, who mostly ever attract ‘mainstream’ crypto attention during breakouts, so the increased social chatter is almost always pump-related. This period of ‘peak hype’ for a coin is an exceedingly risky time to enter into position - or not exit the one you’re already in. - -On Sanbase, you can subscribe to alerts whenever a coin you’re interested in experiences a surge in social volume, signaling a correction. - -Our [Social Trends tool](https://app.santiment.net/social-trends) lets you view any coin’s social volume over time to prove the effectiveness of this approach. - -Example: MATIC - -![](image7.png) - -Example: NEO - -![](image6.png) - -Example: Tezos - -![](image8.png) - -Another custom Santiment metric - **Mean Dollar Invested Age** - has been a reliable top indicator for Bitcoin over its entire lifespan. - -Mean dollar invested age calculates how long each Bitcoin has stayed in its current address, and then computes the average ‘age’ of all money (expressed in dollars) used to buy Bitcoins. In other words, a rising slope on the MDIA chart indicates hodler accumulation, while dips indicate sudden movements of previously idle coins. - -Every major Bitcoin top so far was accompanied by a significant drop in mean dollar age: - -![](image2.png) - -There are dozens of examples of different Santiment metrics being able to predict tops. Check out the ‘Metrics’ tab on the Academy’s homepage for more use cases and metric tutorials. - -## Spot bottoms and entry opportunities - -While still relatively sparse compared to our top indicators, we have also started building out our repository of reliable bottom indicators and entry point signals. - -Like the above, many of these are exclusive to Santiment and are a result of rigorous backtesting and analysis by our data science team. For instance: - -The MVRV Long/Short Divergence is a custom indicator built atop the MVRV ratio, a popular metric that calculates the average profit or loss across all coin holders. - -In short, the MVRV Long/Short Divergence calculates the difference in the MVRV ratio of longtime holders and the MVRV ratio of ‘new money’ to identify potential deviations. You can read more on the exact methodology [here](https://insights.santiment.net/read/btc's-mvrv-long%252Fshort-difference-waves-a-bullish-flag-5620). - -Historically, whenever the Long/Short Divergence line crossed 0, it indicated an end of a bear cycle for Bitcoin and jumpstarted the next bull cycle. The last time this indicator crossed 0 was on May 7th 2019 when Bitcoin was around $5830. Within a week, it broke $8000: - -![](image4.png) - -We have recently developed another novel bottom indicator while examining the divergences in price and on-chain activity, namely daily active addresses (DAA for short) - -You can read the full methodology [in our insight](https://insights.santiment.net/read/price---daily-addresses-divergence%3A-%0Aa-primer-on-on-chain-trading-strategies-2222). In short, at times when the asset’s price trended downwards while the amount of DAA shifted in the opposite direction (above a certain angle/threshold), this divergence has often presented very effective entry points for Bitcoin, Ethereum and other crypto assets in the past. The opposite trend also proved a potent top indicator on many occasions: - -![](image9.png) - -This strategy is currently being integrated into Sanbase - in the meantime, if you’d like access to future Price-DAA Divergence signals, you can email us at team@santiment.net for more information. - -## Identify and monitor volatility markers - -Not all metrics need to tell you if the price is likely to go ↑ or ↓ in order to be effective. Several of our on-chain and social indicators also serve to alert you of major behavioral shifts or trend reversals among market participants. - -For example, our Token Age Consumed metric tracks the activity of coins based on how long they’ve stayed in their current wallets. Spikes on the TAC chart indicate the movement of previously idle coins, i.e. those owned by longterm HODLers or even ICO investors. - -Depending on general market conditions and recent PA, this kind of holder behavior can mean different things, but it’s almost always an omen of growing instability. The spikes in TAC can precede explosive growth or extreme downward pressure, making it a great starting point for further analysis to decide which is more likely. - -For instance, we recently wrote about elevated activity on Bitcoin’s Token Age Consumed graph, suggesting that longtime HODLers are starting to move their coins and warning of volatility ahead: - -![](image10.png) - -At the time of writing, Bitcoin was in a week-long consolidation mode and trading in the $8300-$8500 range. Within days of the article, Bitcoin first dropped more than % down to $7475, only to then grow by 28.6% in 24 hours, finally slowing down at $9650. - -Volatility markers are used most effectively as an initial indicator of upcoming trend reversals, a starting point that you can build upon and leverage by analyzing additional metrics, signals and information. - -## Study and contextualize market activity - -Finally, Santiment tools do a lot more than inform you of - and enable you to react to - prospective exit and entry points, or help you trade market anomalies. Many of our metrics and indicators warrant deep analysis and close study if you truly want to understand crypto market behavior, network activity or crowd sentiment. - -For example, if you looked at pure on-chain transaction volumes for Ethereum over its lifsepan, you’d be forgiven if you assumed that the network suffered mass exodus since its 2018 top, and is currently a shell of its former self: - -![](image11.png) - -This is why deep network analysis is so important for successful traders. Compare the above graph with our Token Velocity chart for Ethereum, which measures how often each token is used in daily transactions: - -![](image1.png) - -Higher token velocity means that the same token is used in transactions more often. You can notice the same steep drop-off in ETH’s velocity around the start of 2018. This heightened activity (and subsequent dip) correlates strongly with the huge ETH mixer that operated between March 2017-2018, artificially inflation on-chain trx volumes by moving the same coins many times over. - -Once the mixer was liquidated, token velocity toppled back to ‘normal’ levels (as tokens weren’t mixed as much anymore), where it’s remained ever since. This lets us know that the decline in TRX volume wasn’t due to speculative, but rather technical reasons, allowing us to better understand - and valuate the network. - -Speaking of valuation metrics, Santiment offers a number of highly effective long-term indicators of project health. These will not tell you where the price is headed short-term, but it will give you a strong sense of the project’s well-being, adoption and ongoing development - all crucial long-term investment factors. - -For example, network growth (number of new addresses created on the network daily) is a strong on-chain proxy for project adoption over time. Compare the network growth of a project with strong community backing like BAT, which continues to add hundreds of new addresses to its network each day: - -![](image3.png) - -To a wasteland that is hundreds of failed altcoins, whose only real on-chain activity occurred around the ICO days, and has since fallen to oblivion: - -![](image5.png) - -Which project are you more likely to invest in? diff --git a/src/docs/glossary/asset/index.md b/src/docs/glossary/asset/index.md deleted file mode 100644 index b12971cf9..000000000 --- a/src/docs/glossary/asset/index.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Asset -author: Santiment Team ---- - -An **asset** refers to any cryptocurrency or crypto token that can be associated with a price. Examples of assets include Bitcoin, Ethereum, and Santiment. - -The terms 'asset' and 'project' are often used interchangeably in most contexts. - -## Availability - -There are several methods to determine which assets are supported by the products within the Santiment platform. - -### [Sanpy](https://github.com/santiment/sanpy) - -To use Sanpy, you need to import the `san` module. After importing the module, you can use the `get` method to retrieve data. Here's how you can do it: - -```python -import san -san.get("projects/all") -``` - -### [SanAPI](https://api.santiment.net) - -The GraphQL request below retrieves a list of all assets: - -```graphql-explorer -{ - allProjects { - name - slug - } -} -``` - -You can execute this query using `curl` as shown below: - -```sh -curl \ - -X POST \ - -H "Content-Type: application/json" \ - --data '{ "query": "{ allProjects { name slug }}" }' \ - https://api.santiment.net/graphql -``` - -### [Sansheets](https://sheets.santiment.net/) - -After installing the plugin, you can utilize the `=SAN_ALL_PROJECTS()` function to retrieve a comprehensive list of all projects. diff --git a/src/docs/glossary/deposit-addresses/index.md b/src/docs/glossary/deposit-addresses/index.md deleted file mode 100644 index 349ae0448..000000000 --- a/src/docs/glossary/deposit-addresses/index.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Deposit Addresses -author: Santiment Team ---- - -## Understanding Deposit Addresses - -When a user wishes to deposit into an exchange, two transactions take place: - -1. Coins are transferred from a personal wallet to a temporary wallet, which is created by the exchange for each individual user. -2. Coins are then moved from this temporary wallet to the main exchange wallet. - -[![wallet-to-exchange-flow](exchange-768x413.png)](https://santiment.net/wp-content/uploads/2019/02/exchange.png) - -These temporary wallets are referred to as **deposit addresses** or deposits. They provide valuable insights into the behavior of a specific network. - -Analyzing deposit addresses can be beneficial in several ways: - -1. The total number of deposit addresses can serve as a reliable indicator of the **actual number of people** trading a specific coin on the exchanges. While not 100% accurate, as a single person may have multiple deposit addresses, it provides a clear **upper limit** on the total number of users and works well dynamically. - -2. Network-level metrics, such as total transaction volume, do not provide detailed information about different sections of network activity. Distinguishing which part of total network activity is generated by deposit addresses allows for a **more granular** exploration of a specific market event. - -3. Monitoring the activity of deposit addresses can help us examine and predict market movements with a **new level of awareness**. - -Our metric for deposit addresses: - -[Daily Active Deposits (DAD)](/metrics/daily-active-deposits/) - diff --git a/src/docs/glossary/index.md b/src/docs/glossary/index.md deleted file mode 100644 index a2de57153..000000000 --- a/src/docs/glossary/index.md +++ /dev/null @@ -1,212 +0,0 @@ ---- -title: Glossary of API Terms -author: Ivan ---- - -This glossary provides definitions for terms frequently used throughout our documentation. - -- [GraphQL-related](#graphql-related) - - [Query](#query) - - [Field](#field) -- [Santiment-related](#santiment-related) - - [Metric](#metric) - - [Asset](#asset) - - [Slug](#slug) - - [Interval](#interval) - - [ISO8601](#iso8601) - - [API Key](#api-key) - -# GraphQL-related - -More about all the GraphQL-related terms can be found on the [GraphQL documentation](https://graphql.org/learn/) website. - -## query - -A "query" in the context of [GraphQL](https://graphql.org/learn/) refers to a read operation. For instance, in the example below, `getAccessRestrictions` is the query. Essentially, in a GraphQL request, the `query` is the function that is invoked. - -```graphql -{ - getAccessRestrictions { - name - type - isRestricted - restrictedFrom - restrictedTo - } -} -``` - -**[Run in explorer](https://api.santiment.net/graphiql?query=%7B%0A%20%20getAccessRestrictions%20%7B%0A%20%20%20%20name%0A%20%20%20%20type%0A%20%20%20%20isRestricted%0A%20%20%20%20restrictedFrom%0A%20%20%20%20restrictedTo%0A%20%20%7D%0A%7D)** - -A single GraphQL request can accommodate multiple queries. In the following example, there are two `getMetric` queries. To avoid name collision in the returned result, each query is given an alias. - -```graphql -{ - price_usd_min_interval: getMetric(metric: "price_usd") { - metadata { - minInterval - } - } - nvt_min_interval: getMetric(metric: "nvt") { - metadata { - minInterval - } - } -} -``` - -**[Run in explorer]()** - -If different queries are used, aliases can be omitted. In the next example, the queries are `getMetric` and `currentUser`. - -```graphql -{ - getMetric(metric: "price_usd") { - metadata { - minInterval - } - } - currentUser { - id - username - email - } -} -``` - -**[Run in explorer]()** - -A query can either return the specified result directly or provide a set of fields that the user can choose from. - -## Field - -The term refers to a [GraphQL field](https://graphql.org/learn/queries/#fields). Fields are used to specify which parts of a complex object should be returned in a query. The following examples demonstrate the use of different fields in the same `getMetric` query. - -In the first example, the `timeseriesData` field is used. The `datetime` and `value` are also fields. This illustrates that fields can either have arguments or not. - -```graphql-explorer -{ - getMetric(metric: "active_addresses_24h") { - timeseriesDataJson( - slug: "ethereum" - from: "2019-01-01T00:00:00Z" - to: "2019-01-01T03:00:00Z" - interval: "30m" - ) - } -} -``` - -In the second example, the `aggregatedTimeseriesData` field is used. - -```graphql -{ - getMetric(metric: "active_addresses_24h") { - aggregatedTimeseriesData( - slug: "ethereum" - from: "2019-01-01T00:00:00Z" - to: "2019-01-01T03:00:00Z" - aggregation: AVG - ) - } -} -``` - -**[Run in explorer]()** - -# Santiment-related - -## Metric - -In the context of Santiment's API, a metric is a term with a specific meaning. It refers to a set of data points that carry a particular significance. There are two types of metrics: [timeseries metrics](/metrics/details/data-type#timeseries-data) and [histogram metrics](/metrics/details/data-type#histogram-data). - -Consider the following example where `nvt` is the metric and `getMetric` is the query. - -```graphql-explorer -{ - getMetric(metric: "nvt") { - timeseriesDataJson( - slug: "santiment" - from: "2019-01-01T00:00:00Z" - to: "2019-09-01T00:00:00Z" - includeIncompleteData: true - interval: "7d" - ) - } -} -``` - -In some instances, the query and the metric are identical. In the next example, `historicalBalance` is both the query and the metric. This scenario occurs when a query fetches exactly one metric (the metric argument is implicit), unlike `getMetric` where the metric argument is explicitly passed with the `metric` argument. - -```graphql -{ - historicalBalance( - selector: { slug: "santiment", infrastructure: "ETH" } - address: "0xA0D8F33Ef9B44DaAE522531DD5E7252962b09207" - from: "2019-01-01T00:00:00Z" - to: "2019-09-01T00:00:00Z" - interval: "30d" - ) { - datetime - balance - } -} -``` - -**[Run in explorer]()** - -## Asset - -An asset refers to any cryptocurrency or crypto token that can be associated with a specific price. Examples of assets include Bitcoin, Ethereum, and Santiment tokens. For more detailed information, please visit our [glossary on assets](/glossary/asset). - -## Slug - -A slug is a unique string that identifies an [asset](/glossary/asset). You can find the slug of various projects, along with their names, tickers, and other data, by using the [allProjects API](https://api.santiment.net/graphiql?query=%7B%0A%20%20allProjects%20%7B%0A%20%20%20%20slug%0A%20%20%20%20name%0A%20%20%20%20ticker%0A%20%20%20%20infrastructure%0A%20%20%20%20mainContractAddress%0A%20%20%7D%0A%7D%0A). - -## Interval - -An interval is a representation of time intervals such as 5 minutes, 12 hours, 10 days, or 4 weeks. There are two types of interval representations: fixed time intervals and functions. - -A fixed time interval is a string that begins with a number and is followed by one of these suffixes: - -- `s` - second -- `m` - minute -- `h` - hour -- `d` - day -- `w` - week - -Here are examples of intervals: - -- 5 minutes - `5m` -- 12 hours - `12h` -- 10 days - `10d` -- 4 weeks - `4w` - -> **Note:** There is no suffix for specifying months because a month does not contain a fixed number of days. - -The second type of interval representation is through function names. Functions can achieve two main objectives that fixed intervals cannot: - -- Functions can create non-fixed interval ranges, such as months, which can have between 28 and 31 days. -- Functions can change the alignment. For example, if the requirement is not just 7 days, but also for the time intervals to start on Monday or Sunday. - -The following functions are supported: - -- toStartOfHour -- toStartOfDay -- toMonday -- toStartOfWeek (aligns dates on Sundays) -- toStartOfMonth -- toStartOfQuarter -- toStartOfYear - -Intervals are used when fetching timeseries data. If the raw data is available at 5-minute intervals but you want to fetch it daily, you should provide `interval: "1d"` as a parameter. In this case, the default aggregation will be applied to all 288 5-minute data points in a day to compute the value for the entire day. The type of aggregation varies based on the metric. In some cases, taking the average or the last value is required (price), while in other cases, taking the sum of all values is necessary (transaction volume), and so on. - -## ISO8601 - -The API uses the ISO8601 format for date and time. The format is structured as follows: `--T::Z`. - -For instance, January 10th, 2019 at 12:34:56 would be represented as `2019-01-10T12:34:56Z`. - -## API Key - -Your API key is essential for accessing the premium features provided by our API. For more detailed information, please refer to the [API Authentication](/sanapi/accessing-the-api/#authentication) section. diff --git a/src/docs/labels/airdrop-receiver/index.md b/src/docs/labels/airdrop-receiver/index.md deleted file mode 100644 index a9b395380..000000000 --- a/src/docs/labels/airdrop-receiver/index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Airdrop Receiver -author: Alex.g -date: 2023-06-01 -description: Airdrop Receiver Label ---- - -## Description - -The airdrop_receiver label is assigned to wallet addresses that have received any airdrops. - -## [Label fqn](/labels/label-fqn) - -`santiment/airdrop_receiver:v1` - -## Label Examples - -[0x1082d6e47d0e7148b9a2e5517a91f9822a80a3b2](https://etherscan.io/address/0x1082d6e47d0e7148b9a2e5517a91f9822a80a3b2) - -## Available Blockchains - -* ethereum diff --git a/src/docs/labels/airdrop-sender/index.md b/src/docs/labels/airdrop-sender/index.md deleted file mode 100644 index f421093b7..000000000 --- a/src/docs/labels/airdrop-sender/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Airdrop Sender -author: Alex.g -date: 2023-06-01 -description: Airdrop Sender Label ---- - -## Description - -The airdrop_sender label is used to identify wallet addresses that are associated with sending airdrops. Airdrops are a marketing strategy commonly used in the cryptocurrency space to distribute tokens or digital assets to a specific group of recipients for promotional or community-building purposes. - -By applying the airdrop_sender label to specific addresses, you can quickly identify wallets that have been involved in initiating and sending airdrops. This label helps provide insights into the participation of wallets in airdrop campaigns and token distributions. - -## [Label fqn](/labels/label-fqn) - -`santiment/airdrop_sender:v1` - -## Label Examples - -DyDx Airdrop Address: [0x639192d54431f8c816368d3fb4107bc168d0e871](https://etherscan.io/address/0x639192d54431f8c816368d3fb4107bc168d0e871) - - -## Available Blockchains - -* ethereum diff --git a/src/docs/labels/blocked/index.md b/src/docs/labels/blocked/index.md deleted file mode 100644 index a2359d4a8..000000000 --- a/src/docs/labels/blocked/index.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Blocked Label -author: Vladimir -date: 2023-06-16 -description: Blocked Label ---- - -## Description - -This address has been blocked by an authorized entity. - -## [Label fqn](/labels/label-fqn) - -`santiment/blocked:v1` - -## Label Examples -Blocked address: [0x0000ef2a62c7c7580db66bbb50e1a913f0cc0615](https://etherscan.io/address/0x0000ef2a62c7c7580db66bbb50e1a913f0cc0615) - -Blocked address: [0x008fe40574e881e7247b50b991c0cc057d66647f](https://etherscan.io/address/0x008fe40574e881e7247b50b991c0cc057d66647f) - -## Available Blockchains - -- ethereum diff --git a/src/docs/labels/bridge/index.md b/src/docs/labels/bridge/index.md deleted file mode 100644 index 5f5107f71..000000000 --- a/src/docs/labels/bridge/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Bridge -author: Vladimir -date: 2023-04-18 -description: Bridge label ---- - -## Description - -Crypto bridges enable the exchange of cryptocurrencies across different blockchains, -allowing users to access assets that were previously inaccessible. -They increase liquidity and interoperability between blockchain networks. Examples include Wrapped Bitcoin and the Binance Smart Chain. - - -## [Label fqn](/labels/label-fqn) - -`santiment/bridge:v1` - -## Label Examples -Celer Bridge "ethereum: polygon" address: [0x5427FEFA711Eff984124bFBB1AB6fbf5E3DA1820](https://etherscan.io/address/0x5427FEFA711Eff984124bFBB1AB6fbf5E3DA1820) - -Debridge Bridge "ethereum: polygon" address: [0x43dE2d77BF8027e25dBD179B491e8d64f38398aA](https://etherscan.io/address/0x43dE2d77BF8027e25dBD179B491e8d64f38398aA) -## Available Blockchains - -* ethereum \ No newline at end of file diff --git a/src/docs/labels/cefi/index.md b/src/docs/labels/cefi/index.md deleted file mode 100644 index cd9ebe46d..000000000 --- a/src/docs/labels/cefi/index.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: CeFi -author: Alex -date: 2023-03-22 -description: CeFi label ---- - -## Description - -Centralized Finance (CeFi) refers to financial services and applications that operate on blockchain and are provided by centralized entities or organizations, such as exchanges, banks, financial institutions, etc. Unlike DeFi, which are managed by smart-contracts, CeFi are rely on the central authority or entity which manages the financial transactions, executes trades, and stores users' assets. - -CeFi platforms typically offer higher speed, liquidity, and convenience compared to decentralized finance (DeFi) platforms, but they may also have higher fees, lower privacy, and greater risks. - -CeFi group includes other labels such as [centralized exchange](/labels/centralized-exchange), [fund](/labels/fund) and others. Visit [this page](labels/#domains) to see full child labels list. - -## [Label fqn](/labels/label-fqn) - -`santiment/cefi:v1` - -## Label Examples - -Binance centralized exchange address: [0x28c6c06298d514db089934071355e5743bf21d60](https://etherscan.io/address/0x28c6c06298d514db089934071355e5743bf21d60) - -Alameda Fund address: [0x93c08a3168fc469f3fc165cd3a471d19a37ca19e](https://etherscan.io/address/0x93c08a3168fc469f3fc165cd3a471d19a37ca19e) - -## Available Blockchains - -* ethereum - -Bitcoin network support for this label has been temporarily suspended. diff --git a/src/docs/labels/centralized-exchange/index.md b/src/docs/labels/centralized-exchange/index.md deleted file mode 100644 index 6692f5685..000000000 --- a/src/docs/labels/centralized-exchange/index.md +++ /dev/null @@ -1,209 +0,0 @@ ---- -title: Centralized exchange -author: Alex -date: 2023-03-21 -description: Centralized exhange label ---- - -## Description - -The centralized exchange label is used to identify wallet addresses that belong to centralized cryptocurrency exchanges (e.g. Binance, Coinbase, etc). - -Centralzied exchanges (CEX) are operated by a central authority or entity that manages the exchange, executes trades, and stores users' digital assets. CEXs typically have a user-friendly interface and offer high liquidity, faster transaction processing, and a wide range of trading pairs. - -## [Label fqn](/labels/label-fqn) - -`santiment/centralized_exchange:v1` - -## Limitations - -Please note that there's no way to know whether you collected ALL addresses of the particular exchange. Although we constantly working on adding new labels it's safe to assume there are still exchange addresses we did not label yet. - -## Label Examples - -Binance centralized exchange address: [0x28c6c06298d514db089934071355e5743bf21d60](https://etherscan.io/address/0x28c6c06298d514db089934071355e5743bf21d60) - -Huobi centralized exchange address: [0x5c985e89dde482efe97ea9f1950ad149eb73829b](https://etherscan.io/address/0x5c985e89dde482efe97ea9f1950ad149eb73829b) - -## Available Blockchains - -* ethereum - -Bitcoin network support for this label has been temporarily suspended. - -## See Also - -**List of centralized exchanges we label addresses for:** - -``` - Abcc - Alcumex_exchange - Aprobit - Artis_turba_exchange - Arzpaya.com - Ataix - Azbit - Beaxy - Beldex - Bgogo - Bibox - Bidesk - Bigone - Biki.com - Bilaxy - Binance - Bit-z - Bit2c - Bitazza - Bitbase - Bitbee - Bitblinx - Bitci - Bitebtc - Bitexlive - Bitfinex - Bitflyer - Bitfront - Bitgrail - Bithumb - Bitkeep - Bitkub - Bitmart - Bitmax - Bitmex - Bitpanda - Bitrue - Bitstamp - Bitstorage - Bittrex - Bitun.io - Bity.com - Bitzlato - Blockfolio - Blocktrades_exchange - Bololex.com - Btc-alpha_exchange - Btc-e - Btcrush - Btcturk - Bw.com - Bybit - C-cex - C2cx - Cakedefi - Cambochanger - Cashierest - Catex_exchange - Cex.io - Chainx - Changelly - Cobinhood - Coinbase - Coinbene - Coindcx - Coindelta - Coindhan - Coinex - Coinexchange.io - Coinhako - Coinmetro_exchange - Coinnest - Coinone - Coinsquare - Coinswitch - Coinw - Coss.io - Crex24 - Crypto.com - Cryptopia - Cryptsy - Currency.com - Deribit - Digifinex - Dmex - Eidoo - Eigen_fx - Eterbase - Etherc - Exchange_a - Exmo - Faa.st - Fatbtc - Fcoin - Firi - Fixedfloat - Flata.exchange - Flybit - Folgory_exchange - Ftx - Gate.io - Gatehub - Gbx - Gemini - Ggbtc.com - Gopax - Hitbtc - Hoo.com - Hotbit - Huobi - Idax.global - Indodax - Indoex_ltd - Jpmarket.cc - Kickex - Korbit - Kraken - Kryptono - Kucoin - Kuna.io - Latoken - Liqui.io - Liquid - Livecoin.net - Localethereum - Luno - Maicoin - Maskex - Mercatox - Mexc - Minedtrade.com - Mxc - Nbx - Nexbit_pro - Oax - Okcoin - Okex - Omgfin_exchange - Otcbtc - Panda.exchange - Paribu - Peatio - Poloniex - Qryptos - Quadrigacx - Quantaex - Refund - Remitano - Shapeshift - Southxchange - Sparrow_exchange - Streamity: streamdesk - Swissborg - Switchain - Tagz - Tidex - Tokocrypto - Topbtc - Trade.io - Uex - Upbit - Vinex - Wex - Whitebit - Wintermute - Xtcom - Yobit.net - Yoobtc - Yunbi - Zb.com -``` \ No newline at end of file diff --git a/src/docs/labels/charity/index.md b/src/docs/labels/charity/index.md deleted file mode 100644 index f4ae4493e..000000000 --- a/src/docs/labels/charity/index.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Charity -author: Vladimir -date: 2023-06-20 -description: Charity label ---- - -## Description - -This label is assigned for project addresses that are involved in charitable or nonprofit endeavors. - -## [Label fqn](/labels/label-fqn) - -`santiment/charity:v1` - -## Label Examples - -Endaoment: [0x00259ef939eb043cd81613f18ebfdb10f250155c](https://etherscan.io/address/0x00259ef939eb043cd81613f18ebfdb10f250155c) - -Endaoment Astraea Foundation: [0xa04ede9f75f54e28c74b1c75d9b44e7418fee4dd](https://etherscan.io/address/0xa04ede9f75f54e28c74b1c75d9b44e7418fee4dd) - -## Available Blockchains - -- ethereum diff --git a/src/docs/labels/closed/index.md b/src/docs/labels/closed/index.md deleted file mode 100644 index 93abde6d2..000000000 --- a/src/docs/labels/closed/index.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Closed -author: Vladimir -date: 2023-04-18 -description: Closed label ---- - -## Description - -Label `closed` used to indicate that an address's owner has announced the end of their project or business operations. - -## [Label fqn](/labels/label-fqn) - -`santiment/closed:v1` - -## Label Examples - -Plaugeinc.io Closed: [0x00ee67308138958a08c463ed144b86899537c923](https://etherscan.io/address/0x00ee67308138958a08c463ed144b86899537c923) -ethcash.online Closed: [0x0135c9a7bff72aa26e1d105ff5000e454e4dde7a](https://etherscan.io/address/0x0135c9a7bff72aa26e1d105ff5000e454e4dde7a) - - -## Available Blockchains - -- ethereum diff --git a/src/docs/labels/cold-wallet/index.md b/src/docs/labels/cold-wallet/index.md deleted file mode 100644 index 6f069d03b..000000000 --- a/src/docs/labels/cold-wallet/index.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Cold wallet -author: Alex -date: 2023-03-22 -description: Cold wallet label ---- - -## Description - -Label `cold_wallet` refers to a type of wallet that is commonly used by centralized exchanges or other entities as a secure storage solution for cryptocurrency assets. - -## [Label fqn](/labels/label-fqn) - -`santiment/cold_wallet:v1` - -## Label Examples -Bitfinex Cold Wallet Address: [0x742d35Cc6634C0532925a3b844Bc454e4438f44e](https://etherscan.io/address/0x742d35Cc6634C0532925a3b844Bc454e4438f44e) - -## Available Blockchains - -* ethereum \ No newline at end of file diff --git a/src/docs/labels/contract/index.md b/src/docs/labels/contract/index.md deleted file mode 100644 index 09786ddbf..000000000 --- a/src/docs/labels/contract/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Contract -author: Alex -date: 2023-03-22 -description: Smart contract label ---- - -## Description - -The label `contract` denotes any address which is a smart contract. - -## [Label fqn](/labels/label-fqn) - -`santiment/contract:v1` - -## Label Examples - -[0x9cfac1d8fe48732b8c62628267a83819cb7b496f](https://etherscan.io/address/0x9cfac1d8fe48732b8c62628267a83819cb7b496f) - -[0x98c3d3183c4b8a650614ad179a1a98be0a8d6b8e](https://etherscan.io/address/0x98c3d3183c4b8a650614ad179a1a98be0a8d6b8e) - - -## Available Blockchains - -* ethereum \ No newline at end of file diff --git a/src/docs/labels/dead-address/index.md b/src/docs/labels/dead-address/index.md deleted file mode 100644 index 50fe22596..000000000 --- a/src/docs/labels/dead-address/index.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Dead address -author: Alex -date: 2023-03-22 -description: Dead address label ---- - -## Description - -Addresses that can not be owed by anyone and/or used for tokens burning. Also called as cemetary addresses. - -## [Label fqn](/labels/label-fqn) - -`santiment/dead_address:v1` - -## Label examples - -Fixed set of ETH addresses: - -``` -0x0000000000000000000000000000000000000000 -0x0000000000000000000000000000000000000001 -0x0000000000000000000000000000000000000002 -0x0000000000000000000000000000000000000003 -0x0000000000000000000000000000000000000004 -0x0000000000000000000000000000000000000005 -0x0000000000000000000000000000000000000006 -0x0000000000000000000000000000000000000007 -0x0000000000000000000000000000000000000008 -0x0000000000000000000000000000000000000009 -0x000000000000000000000000000000000000dead -0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead -0x1111111111111111111111111111111111111111 -0x2222222222222222222222222222222222222222 -0x3333333333333333333333333333333333333333 -0x4444444444444444444444444444444444444444 -0x5555555555555555555555555555555555555555 -0x6666666666666666666666666666666666666666 -0x7777777777777777777777777777777777777777 -0x8888888888888888888888888888888888888888 -0x9999999999999999999999999999999999999999 -0x00000000000000000000045261d4ee77acdb3286 -0x0123456789012345678901234567890123456789 -0x1234567890123456789012345678901234567890 -0xdead000000000000000042069420694206942069 -0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb -0xcccccccccccccccccccccccccccccccccccccccc -0xdddddddddddddddddddddddddddddddddddddddd -0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -0xffffffffffffffffffffffffffffffffffffffff -``` - -## Available Blockchain: - -* ethereum diff --git a/src/docs/labels/decentralized-exchange/index.md b/src/docs/labels/decentralized-exchange/index.md deleted file mode 100644 index cd520ceb9..000000000 --- a/src/docs/labels/decentralized-exchange/index.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Decentralized exchange -author: Alex -date: 2023-03-22 -description: Decentralized exchange label ---- - -## Description - -Decentralized exchange label denotes an address belonging to a decentralized exchange (including dex pools, dex factories, etc). - -Decentralzied exhcnage (DEX) is a decentralized platform that operate on a peer-to-peer (P2P) network, without a central authority or entity. DEXs allow users to trade cryptocurrencies directly with each other, using smart contracts and blockchain technology. Unlike centralzied exchanges (CEX), DEXs offer greater privacy, security, and transparency, as users have full control over their assets and do not need to trust a third party to execute trades. However, DEXs may have lower liquidity, slower transaction processing, and fewer trading pairs compared to CEXs. - -## [Label fqn](/labels/label-fqn) - -`santiment/decentralized_exchange:v1` - -## Label Examples - -Curve pool [0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7](https://etherscan.io/address/0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7) - -Uniswap v2 DEX (UniswapV2Pair) [0x2c5050a646a36fb22f1a1137665e64393b486139](https://etherscan.io/address/0x2c5050a646a36fb22f1a1137665e64393b486139) - - -## Available Blockchains - -* ethereum - -**List of decentralized exchanges we label addresses for:** - -``` -1Inch -Allbit -Ariswap -Balancer -Balancer_v1 -Bamboodefi -Bancor -Bancor_v1 -Bancor_v2 -Chickenswap -Curve -Defiswap -Dodo -Dydx -Elk -Empiredex -Jpegd -Kwikswap -Kyberswap -Lido -Maker -Mooniswap -Radioshack -Shibaswap -Standardtech -Sumswap_v2 -Sushi -Sushiswap_v2 -Uniswap -Uniswap_v1 -Uniswap_v2 -Uniswap_v3 -Youswap -``` \ No newline at end of file diff --git a/src/docs/labels/defi/index.md b/src/docs/labels/defi/index.md deleted file mode 100644 index 3e07135e3..000000000 --- a/src/docs/labels/defi/index.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: DeFi -author: Alex -date: 2023-03-22 -description: DeFi label ---- - -## Description - -The DeFi label is used to identify wallet addresses that are involved in decentralized finance (DeFi) activities. By using the DeFi label, you quickly identify which wallets are involved in DeFi activities and gain a better understanding of the DeFi ecosystem. - -DeFi group includes other labels such as [decentralized exchange](/labels/decentralized-exchange), [stablecoin](/labels/stablecoin) and others. Visit [this page](labels/#domains) to see full child labels list. - -## [Label fqn](/labels/label-fqn) - -`santiment/defi:v1` - -## Label Examples - -Curve pool [0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7](https://etherscan.io/address/0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7) - -Gnosis bridge (xDAI) [0x4aa42145Aa6Ebf72e164C9bBC74fbD3788045016](https://etherscan.io/address/0x4aa42145Aa6Ebf72e164C9bBC74fbD3788045016) - - -## Available Blockchains - -* ethereum \ No newline at end of file diff --git a/src/docs/labels/deposit/index.md b/src/docs/labels/deposit/index.md deleted file mode 100644 index 83820444c..000000000 --- a/src/docs/labels/deposit/index.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Deposit -author: Alex -date: 2023-03-22 -description: Deposit address label ---- - -## Description - -A deposit address is an address that belongs to some entity (e.g. centralized exchange) and used by that entity in order to distinguish between deposit transactions of different users. - -The address is considered as a deposit address if it satisfies 2 conditions: - -1. The address sends funds to a single entity only (single entity doesn’t mean single address; some entities owe few addresses) -2. The address is not the entity itself it sends funds to. - -Most common case is a centralized exhcnage deposit. See the details on the picture below. - -![deposit_address](deposit-withdrawal.png) - -## [Label fqn](/labels/label-fqn) - -`santiment/deposit:v1` - -## Label Examples - -Kucoin deposit address: [0xb50a586be6a5542c0da84ff42de0ebdf8761203c](https://etherscan.io/address/0xb50a586be6a5542c0da84ff42de0ebdf8761203c) - -Gate.io deposit address: [0x11e67b9ca21ae5ab385a31d03929bd0cc1c96bec](https://etherscan.io/address/0x11e67b9ca21ae5ab385a31d03929bd0cc1c96bec) - - -## Available Blockchains - -* ethereum diff --git a/src/docs/labels/derivatives/index.md b/src/docs/labels/derivatives/index.md deleted file mode 100644 index 7c6896db2..000000000 --- a/src/docs/labels/derivatives/index.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Derivatives Label -author: Vladimir -date: 2023-06-22 -description: Derivatives Label ---- - -## Description -Label used for addresses that are used in derivatives projects. - -Crypto derivatives function similarly to traditional derivatives, -where a buyer and a seller engage in a contractual agreement to trade an underlying asset. -These assets are sold at a prearranged time and price. - - -## [Label fqn](/labels/label-fqn) - -`santiment/derivatives:v1` - -## Label Examples -Synthetix Exchange State [0x545973f28950f50fc6c7f52aab4ad214a27c0564](https://etherscan.io/address/0x545973f28950f50fc6c7f52aab4ad214a27c0564) - -Synthetix Token State sEUR [0x6568d9e750fc44af00f857885dfb8281c00529c4](https://etherscan.io/address/0x6568d9e750fc44af00f857885dfb8281c00529c4) - -## Available Blockchains - -* ethereum \ No newline at end of file diff --git a/src/docs/labels/dex-user/index.md b/src/docs/labels/dex-user/index.md deleted file mode 100644 index 5c3ef305c..000000000 --- a/src/docs/labels/dex-user/index.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: DEX user -author: Katsiaryna -date: 2023-05-02 -description: label ---- - -## Description - -The label denotes an address that traded on at least one DEX. - -## [Label fqn](/labels/label-fqn) - -`santiment/dex_user:v1` - - -## Label Examples - -[0x708c9d44eafac41fa7217bd8390fc2b18613e739](https://etherscan.io/address/0x708c9d44eafac41fa7217bd8390fc2b18613e739) - -## Available Blockchains - -* Ethereum diff --git a/src/docs/labels/dsproxy/index.md b/src/docs/labels/dsproxy/index.md deleted file mode 100644 index 4e6e0ea79..000000000 --- a/src/docs/labels/dsproxy/index.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: DSproxy -author: Vladimir -date: 2023-04-25 -description: DSproxy Label ---- - -## Description - -DSProxy, developed by DappHub, is a smart wallet that offers a unique feature allowing developers to execute multiple -contract calls in a single transaction. In contrast to vanilla externally owned accounts (EOAs), which are restricted -to interacting with just one contract per transaction, DSProxy provides greater functionality and flexibility for -executing complex actions on the Ethereum blockchain. - -## [Label fqn](/labels/label-fqn) - -`santiment/dsproxy:v1` - -## Available Blockchains - -* ethereum \ No newline at end of file diff --git a/src/docs/labels/erc1155/index.md b/src/docs/labels/erc1155/index.md deleted file mode 100644 index cc4bb651c..000000000 --- a/src/docs/labels/erc1155/index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: ERC1155 -author: Alex -date: 2023-03-22 -description: ERC1155 standart contract label ---- - -## Description - -Denotes a smart contract that follows erc-1155 standart. - - -ERC1155 is a multi-token standard developed on the Ethereum blockchain that allows for the creation of fungible -and non-fungible tokens within a single smart contract. They also be used to create semi-fungible tokens, which combine -elements of both fungible and non-fungible tokens, providing greater flexibility in token design and functionality. - -## [Label fqn](/labels/label-fqn) - -`santiment/erc1155:v1` - -## Label Examples -[0x73242c671cf402152e3880af208071dadab0bc27](https://etherscan.io/address/0x73242c671cf402152e3880af208071dadab0bc27) - -## Available Blockchains - -* ethereum \ No newline at end of file diff --git a/src/docs/labels/erc721/index.md b/src/docs/labels/erc721/index.md deleted file mode 100644 index 652188ed9..000000000 --- a/src/docs/labels/erc721/index.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: ERC721 -author: Alex -date: 2023-03-22 -description: ERC721 contract standart label ---- - -## Description - -Denotes a smart contract that follows erc-721 standart. - -ERC721 is a standard for non-fungible tokens (NFTs) on the Ethereum blockchain, enabling unique digital assets to be represented and traded on the network. - -## [Label fqn](/labels/label-fqn) - -`santiment/erc721:v1` - -## Label Examples -[0x0000000000001b84b1cb32787b0d64758d019317](https://etherscan.io/address/0x0000000000001b84b1cb32787b0d64758d019317) - - -## Available Blockchains - -* ethereum diff --git a/src/docs/labels/eth2-staking-address/index.md b/src/docs/labels/eth2-staking-address/index.md deleted file mode 100644 index a05deffd1..000000000 --- a/src/docs/labels/eth2-staking-address/index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: ETH2 Staking Address -author: Vladimir -date: 2023-03-22 -description: Addresses that takes activity in eth2 staking ---- - -## Description - -Label `eth2_staking_address` added to adrresses that have already engaged in staking activities on the Ethereum 2.0 network. - -Staking on the Ethereum 2.0 network involves holding and locking up a minimum of 32 ETH to validate transactions and secure the network. -Ethereum 2.0 network plays a crucial role in the transition -from proof-of-work (PoW) to proof-of-stake (PoS) consensus mechanism, which is more energy-efficient and scalable. - -## [Label fqn](/labels/label-fqn) - -`santiment/eth2_staking_address:v1` - -## Label Examples -[0x733087f6a2659d67400a04c7052fbc7aea8dab33](https://etherscan.io/address/0x733087f6a2659d67400a04c7052fbc7aea8dab33) -[0x732080273a7bab8163930754e7b4981a330068be](https://etherscan.io/address/0x732080273a7bab8163930754e7b4981a330068be) - -## Available Blockchains - -* ethereum \ No newline at end of file diff --git a/src/docs/labels/eth2-staking/index.md b/src/docs/labels/eth2-staking/index.md deleted file mode 100644 index b5cc9264a..000000000 --- a/src/docs/labels/eth2-staking/index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: ETH2_Staking -author: Alex -date: 2023-03-22 -description: ETH2 Staking label ---- - -## Description - -The eth2_staking label is used to identify wallet addresses that stake ETH - -## [Label fqn](/labels/label-fqn) - -`santiment/eth2_staking:v1` - -## Label Examples -RockerDAO Deposit Pool [0xdd3f50f8a6cafbe9b31a427582963f465e745af8](https://etherscan.io/address/0xdd3f50f8a6cafbe9b31a427582963f465e745af8) - - -## Available Blockchains - -* ethereum diff --git a/src/docs/labels/factory/index.md b/src/docs/labels/factory/index.md deleted file mode 100644 index 0583a8c7e..000000000 --- a/src/docs/labels/factory/index.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Contract Factory -author: Vladimir -date: 2023-04-25 -description: Contract Factory Label ---- - -## Description -A contract factory is a smart contract that is designed to create other smart contracts. -The contract factory serves as a template for creating new contracts that share the same code and functionality. - -With a contract factory, users can easily deploy new contracts on the blockchain without having to write the code from -scratch. This saves time and effort, especially for contracts with similar functionality. - -A contract factory can also include custom parameters that can be used to personalize each new contract created from the factory. This allows for greater flexibility and customization in the contract creation process. - - -## [Label fqn](/labels/label-fqn) - -`santiment/factory:v1` - -## Available Blockchains - -* ethereum \ No newline at end of file diff --git a/src/docs/labels/fund/index.md b/src/docs/labels/fund/index.md deleted file mode 100644 index 5be595fae..000000000 --- a/src/docs/labels/fund/index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Fund -author: Alex -date: 2023-03-22 -description: Fund label ---- - -## Description - -The fund label is used to identify wallet addresses that belong to investment funds operating in the cryptocurrency space. - -## [Label fqn](/labels/label-fqn) - -`santiment/fund:v1` - -## Label Examples - -Alameda Fund address: [0x93c08a3168fc469f3fc165cd3a471d19a37ca19e](https://etherscan.io/address/0x93c08a3168fc469f3fc165cd3a471d19a37ca19e) - -## Available Blockchains - -* ethereum diff --git a/src/docs/labels/gambling/index.md b/src/docs/labels/gambling/index.md deleted file mode 100644 index 4523aa7e0..000000000 --- a/src/docs/labels/gambling/index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Gambling -author: Alex.g -date: 2023-06-01 -description: Gambling label ---- - -## Description - -The gambling label is used to identify wallet addresses that are involved in gambling activities. This label helps quickly identify addresses associated with online gambling and related transactions. - -## [Label fqn](/labels/label-fqn) - -`santiment/gambling:v1` - -## Label Examples - -Dice2Win [0xd1ceeeeee83f8bcf3bedad437202b6154e9f5405](https://etherscan.io/address/0xd1ceeeeee83f8bcf3bedad437202b6154e9f5405) - -## Available Blockchains - -* ethereum diff --git a/src/docs/labels/gamefi/index.md b/src/docs/labels/gamefi/index.md deleted file mode 100644 index 54e35be98..000000000 --- a/src/docs/labels/gamefi/index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: GameFi -author: Alex.g -date: 2023-06-01 -description: GameFi label ---- - -## Description - -The gamefi label is used to identify wallet addresses that are actively involved in GameFi activities. GameFi refers to the intersection of gaming and decentralized finance (DeFi), where players can earn, trade, and invest in virtual assets within gaming ecosystems. - -## [Label fqn](/labels/label-fqn) - -`santiment/gamefi:v1` - -## Label Examples - -Crypto Lottery [0xb898ceae9b41ff87b2bc22a41e63755604fe4771](https://etherscan.io/address/0xb898ceae9b41ff87b2bc22a41e63755604fe4771) - -## Available Blockchains - -* ethereum diff --git a/src/docs/labels/genesis/index.md b/src/docs/labels/genesis/index.md deleted file mode 100644 index abe465743..000000000 --- a/src/docs/labels/genesis/index.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Genesis -author: Alex -date: 2023-03-22 -description: Genesis address label ---- - -## Description - -Genesis is an address that got funds in the genesis block. Most of them are ETH ICO participants. - -Genesis Ethereum addresses are the original addresses that were created on the Ethereum network during its initial launch. -These addresses were created during the Genesis block, which is the first block in the Ethereum blockchain. They are often used in Ethereum research and analysis to gain insights into the initial distribution of Ethereum tokens and the early activity on the network. - -In ethereum blockchain there are 8893 genesis addresses. - -## [Label fqn](/labels/label-fqn) - -`santiment/genesis:v1` - -## Label Examples - -Genesis address: [0x144b19f1f66cbe318347e48d84b14039466c5909](https://etherscan.io/address/0x144b19f1f66cbe318347e48d84b14039466c5909) - - -## Available Blockchains - -* ethereum diff --git a/src/docs/labels/hacked/index.md b/src/docs/labels/hacked/index.md deleted file mode 100644 index faba987e1..000000000 --- a/src/docs/labels/hacked/index.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Hacked -author: Vladimir -date: 2023-04-18 -description: Hacked label ---- - -## Description - -Label `hacked` means that that the owner of this address may have experienced a security breach, -and official information about the incident has been officially published. - -## [Label fqn](/labels/label-fqn) - -`santiment/hacked:v1` \ No newline at end of file diff --git a/src/docs/labels/hot-wallet/index.md b/src/docs/labels/hot-wallet/index.md deleted file mode 100644 index 87501c84e..000000000 --- a/src/docs/labels/hot-wallet/index.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Hot wallet -author: Alex -date: 2023-03-22 -description: Hot wallet label ---- - -## Description - -Denotes a hot wallet of a centralized exchanges or other entity. - -## [Label fqn](/labels/label-fqn) - -`santiment/hot_wallet:v1` - -## Label Examples - -Bitfinex Hot Wallet Address: [0x77134cbc06cb00b66f4c7e623d5fdbf6777635ec](https://etherscan.io/address/0x77134cbc06cb00b66f4c7e623d5fdbf6777635ec) - -Bitfinex Hot Wallet Address: [0x876eabf441b2ee5b5b0554fd502a8e0600950cfa](https://etherscan.io/address/0x876eabf441b2ee5b5b0554fd502a8e0600950cfa) - -## Available Blockchains - -- ethereum diff --git a/src/docs/labels/index.md b/src/docs/labels/index.md deleted file mode 100644 index 8dacad332..000000000 --- a/src/docs/labels/index.md +++ /dev/null @@ -1,154 +0,0 @@ ---- -title: Labels -author: Santiment Team -description: Santiment labels vision for crypto wallets -date: 2023-03-21 ---- - -## Labels overview - -Generally speaking, an **address label** is a piece of information attached to a wallet address. - -The most common use case of one is to denote the owner of the given address. E.g. address “A” belongs to Alice, and address “B” belongs to Binance exchange. Another use-case would be marking (aka labeling) an address as a smart contract. E.g. address “C” is an ERC-721 standard contract. - -In the context of market analysis we are interested in the market participants' addresses mostly. Information about excanhges, whales, traders, DeFi protocols, etc gives a lot of insights on what's going on on the market. There are a lot of label types and use-cases which are described below. - - -## How we gather labels - -Collecting labels is not a trivial task. To keep our explanation concise, there are three main ways to gather a label: - -1. **Open sources** - - Some people or projects are willing to share their addresses. E.g. most DeFi projects post their smart contract addresses, and some centralized exchanges reveal their addresses to prove that they hold a certain amount of funds. We collect these addresses and store them in our database. - -2. **Manual label collection** - - In order to collect some labels, manual research is required. For instance, we can manually deposit some ETH to a centralized exchange and track its flow. The ETH will flow first to a deposit address, and then to the centralized exchange. - -3. **Algorithms** - - This is the most powerful method if you need to label many addresses. At Santiment, we have a lot of manually developed algorithms for labeling different types of addresses. Some of our algorithms are native (e.g. in order to find NFT traders, we can just track trades on an NFT trading platform). Others are quite sophisticated (e.g. we developed an algorithm that tracks coinbase cold wallets and relies on some counterintuitive assumptions and filters the whole history of ETH transactions to find these cold wallets). - -Very often, we combine different methods. For instance, we could manually collect some addresses, manually analyze its on-chain behavior, and design an algorithm gathering all addresses of the initial type. - - -## Limitations - -Although we are constantly working on adding and improving labels, there are two types of errors that may occur: - -1. **False positive error** (wrong label was added to the address) - - At Santiment, we care a great deal about false positive errors. We do not add labels without making sure the label is correct, or mark the label as suspicious and exclude the address from further computations. Our goal is to build trustworthy labels so that low false positive error rates are ensured. - -2. **False negative error** (address was not labelled properly) - - It is not a trivial task to find all addresses that belong to a person. Let's say you decided to label all addresses belonging to your friend, Alice. Once you find some Alice addresses it's very hard to prove there are no other addresses that are controlled by Alice. Moreover, Alice might want to hide her funds or transactions, so she might use different addresses, use mixers, or design some sophisticated way to distribute her funds so no one can find them. So we always have to assume that there might be addresses that we missed and didn't label. - -In case you found any mistakes in our labeling, please let us know (via discord or email). We appreciate your help a great deal :) - -## Naming - -Each label has it's own name, so called label FQN (Fully Qualified Name). [Read about label FQNs here](/labels/label-fqn) - -## Label Groups - -At Santiment, we label millions of addresses with dozens of different labels. In order to keep it easy to work with labels, we created a way to split all labels into logical groups. Here's a simplified description of how we handle labels. - -We split all labels into major groups. Each major group might consist of smaller groups. Here's a list of major groups: - -* **Domains** - - The group includes legal entities (exchanges, platforms, mining pools, etc.), DAOs, and smart contracts. - -* **Owner** - - A standalone label which denotes the person or company which controls a given address. Note that the owner label is not a nickname. Owner is a broader term rather than nickname which is an owner's attribute (e.g. Vitalik Buterin might have several nicknames: 'Vitaliy', 'ETH_daddy', 'John Galt', etc) - -* **Infrastructure** - - A group including addresses that are bound to any other group and serve any internal tasks. - -* **Activity** - - A group including addresses which are actively or passively engaged in a certain type of activity (for example: trading, receiving airdrop, blogging, etc.) - -* **Social networks** - - A group including users’ nicknames on social networks, forums, platforms, etc. - -* **Status** - - A group that includes the status of the project: blocked, hacked or associated with fraudulent activity (scam). - ---- - -Below you can find labels which are attached to every group from above. Please note that an address might have many labels. For example, every _DEX_ address is labeled as _DeFi_ as well (_DeFi_ is a parent group for _DEX_ group) or _centralized_exchange_ addresses most often owe a dedicated _owner_ label. - - -### Domains - -- [DeFi](/labels/defi) - - [Bridge](/labels/bridge) - - [Decentralized exchange](/labels/decentralized-exchange) - - [Derivatives](/labels/derivatives) - - [Lending](/labels/lending) - - [Liquidity](/labels/liquidity) - - [Yield Farming](/labels/yield) -- [CeFi](/labels/cefi) - - [Centralized exchange](/labels/centralized-exchange) - - [Fund](/labels/fund) -- [NFT](/labels/nft) - - [NFT collection](/labels/nft-collection) - - [NFT collection name](/labels/nft-collection-name) - - [NFT collection symbol](/labels/nft-collection-symbol) - - [NFT marketplace](/labels/nft-marketplace) -- [ETH2_Staking](/labels/eth2-staking) -- [GameFi](/labels/gamefi) - - [Gambling](/labels/gambling) - - -### Owner - -- [Owner](/labels/owner) - - -### Infrastructure - -- [Airdrop Sender](/labels/airdrop-sender) -- [Deposit](/labels/deposit) -- [Contract](/labels/contract) - - [ERC721](/labels/erc721) - - [ERC1155](/labels/erc1155) - - [Factory](/labels/factory) - - [Proxy](/labels/proxy) -- [Cold wallet](/labels/cold-wallet) -- [Dead address](/labels/dead-address) -- [Migration Address](/labels/migration-address) - - -### Activity - - - [Airdrop Receiver](/labels/airdrop-receiver) - - [Charity](/labels/charity) - - [DEX user](/labels/dex-user) - - [ETH2 Staking Address](/labels/eth2-staking-address) - - [Genesis](/labels/genesis) - - [Miner](/labels/miner) - - [NFT trader](/labels/nft-trader) - - [NFT trader threshold](/labels/nft-trader-threshold) - - [NFT user](/labels/nft-user) - - [NFT Influencer](/labels/nft-influencer) - - [Used NFT marketplace](/labels/used-nft-marketplace) - - [Whale](/labels/whale) - - [Whale USD Balance](/labels/whale-usd-balance) - - [Lending User](/labels/lending-user) - - [Withdrawal](/labels/withdrawal) - - [Withdrawn From](/labels/withdrawn-from) - - -### Status - -- [Blocked](/labels/blocked) -- [Closed](/labels/closed) -- [Sanctioned](/labels/sanctioned) diff --git a/src/docs/labels/label-fqn/index.md b/src/docs/labels/label-fqn/index.md deleted file mode 100644 index c8a944767..000000000 --- a/src/docs/labels/label-fqn/index.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Label-fqn -author: Santiment team -date: 2024-04-09 -description: Label fqn description ---- - -## Description - -This page describes the structure and applications of **label FQN** (label Fully Qualified Names), which are integral to various platforms such as [Santiment Queries](/santiment-queries), [API](/sanapi) and [Sanbase](/sanbase). - - -## FQN Structure - -A label FQN typically comprises the following components: - -A typical label FQN consists of: -- `owner`: Identifies the creator of the label. Typically, users will primarily interact with labels created by the Santiment team. -- `key`: Represents the label's key. Mostly serves as a common name. For instance, centralized exchange, fund, personal wallet, A comprehensive list of available labels can be found in our academy -[here](/labels). -- `value` \[optional\]: Specifies the label's value, applicable to labels that require a value. Mostly serves as an own name (e.g. Binance, DWF, Vitalik, etc) or some specification of the key. Details can be found within each label's description in the academy. -- `asset_name` \[optional\]: Indicates the asset to which the label is associated. -- `version`: Ensures consistency through versioning. When an algorithm updates, a new version may be released, while access to previous versions remains available. - -To construct a label FQN, concatenate the fields as described: - -`owner/key->value(asset_name):version` - -For a simpler format without the `value` and `asset` fields: - -`owner/key:version` - - -## Note about asset name - -For some labels (e.g. [whale](/labels/whale) or [whale by usd balance](/labels/whale-usd-balance)), the `asset_name` is included in the FQN. For instance, an address labeled as a whale within the EtherFi asset would be denoted as santiment/whale(ether-fi-ethfi):v1. - - -## Note about Key and Value - -The key field serves as a general identifier (e.g., centralized exchange, fund, personal wallet), while the value field provides a specific designation (e.g., Binance, DWF, Vitalik). Not all labels possess a specific name, but when applicable, they are often linked to an [owner label](/labels/owner). Also value field might be used as a some specification of the key [example](/labels/nft-trader-threshold). This structure allows for versatile interactions with the labels, enabling users to either aggregate data across all entities of a type or focus on a specific entity. - - -## Examples - -- `santiment/centralized_exchange:v1`: A centralized exchange label - -- `santiment/owner->binance:v1`: Binance label - -- `santiment/whale_usd_balance(ethereum):v1`: Ethereum whale by USD balance diff --git a/src/docs/labels/lending-user/index.md b/src/docs/labels/lending-user/index.md deleted file mode 100644 index e29ea26e2..000000000 --- a/src/docs/labels/lending-user/index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Lending User -author: Vladimir -date: 2023-06-15 -description: Lending User ---- - -## Description - -These addresses were engaged in lending activities, where they facilitated the process lending funds. - -## [Label fqn](/labels/label-fqn) - -`santiment/lending_user:v1` - -## Label Examples - -Lending user: [0xd4bb298f935cdfa7eb5e363d168f838bb65cdff4](https://etherscan.io/address/0xd4bb298f935cdfa7eb5e363d168f838bb65cdff4) - -## Available Blockchains - -- ethereum \ No newline at end of file diff --git a/src/docs/labels/lending/index.md b/src/docs/labels/lending/index.md deleted file mode 100644 index dae5341b3..000000000 --- a/src/docs/labels/lending/index.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Lending -author: Vladimir -date: 2023-04-18 -description: Lending Labels ---- - -## Description - -Lending labels denotes a crypto lending platforms like aave, compound, etc and all related contracts. - -Decentralized finance (DeFi) lending projects enable individuals to lend and borrow digital assets without intermediaries. -These platforms offer transparency, potentially higher interest rates, but also come with risks such as smart contract vulnerabilities and market volatility. - -## [Label fqn](/labels/label-fqn) - -`santiment/lending:v1` - -## Label Examples - -Aave Lending Pool Provider [0x24a42fD28C976A61Df5D00D0599C34c4f90748c8](https://etherscan.io/address/0x24a42fD28C976A61Df5D00D0599C34c4f90748c8) - -Aave aWETH token [0x030ba81f1c18d280636f32af80b9aad02cf0854e](https://etherscan.io/address/0x030ba81f1c18d280636f32af80b9aad02cf0854e) - - -## Available Blockchains - -* ethereum \ No newline at end of file diff --git a/src/docs/labels/liquidity/index.md b/src/docs/labels/liquidity/index.md deleted file mode 100644 index 58af815b9..000000000 --- a/src/docs/labels/liquidity/index.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Liquidity -author: Vladimir -date: 2023-06-15 -description: Liquidity provider label ---- - -## Description - -Liquidity providers are entities that offer both buy and sell-side liquidity to cryptocurrency. - -## [Label fqn](/labels/label-fqn) - -`santiment/liquidity:v1` - -## Label Examples - -Liquidity provider: [0x00cd2388c86c960a646d640be44fc8f83b78cec9](https://etherscan.io/address/0x00cd2388c86c960a646d640be44fc8f83b78cec9) - -Liquidity provider: [0x0232ba609782cea145ec3663f52cf7aeb4ac773c](https://etherscan.io/address/0x0232ba609782cea145ec3663f52cf7aeb4ac773c) - -## Available Blockchains -- ethereum \ No newline at end of file diff --git a/src/docs/labels/migration-address/index.md b/src/docs/labels/migration-address/index.md deleted file mode 100644 index db3bda550..000000000 --- a/src/docs/labels/migration-address/index.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Migration Address -author: Vladimir -date: 2023-06-15 -description: Migration Address ---- - -## Description -The migration address is utilized for transferring funds between wallets. -It is presumed that the migration address is owned by the same individual or entity as the addresses that are associated with it. - -## [Label fqn](/labels/label-fqn) - -`santiment/migration_address:v1` - -## Label Examples - -Migration address: [0x83ff69c6a7f7ffaebc3ec5d3db3e5dde2a003167](https://etherscan.io/address/0x83ff69c6a7f7ffaebc3ec5d3db3e5dde2a003167) - -Migration address: [0x8401a19095270f35351995c2ce9f927e47c36115](https://etherscan.io/address/0x8401a19095270f35351995c2ce9f927e47c36115) - -## Available Blockchains -- ethereum \ No newline at end of file diff --git a/src/docs/labels/miner/index.md b/src/docs/labels/miner/index.md deleted file mode 100644 index a53292ff0..000000000 --- a/src/docs/labels/miner/index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Miner -author: Alex -date: 2023-03-22 -description: Miner label ---- - -## Description - -The label denotes the address mining blocks. Address should produce at least 1 block to be considered as miner. - -In ethereum network only PoW miners are considered. There are 8331 miners labels in ethereum blockchain and new labels are not added after the Merge (September 15, 2022). - -## [Label fqn](/labels/label-fqn) - -`santiment/miner:v1` - -## Label Examples - -[0x64b5627695dad86cc339cd1655ba49cc67957552](https://etherscan.io/address/0x64b5627695dad86cc339cd1655ba49cc67957552) - -[0x002e08000acbbae2155fab7ac01929564949070d](https://etherscan.io/address/0x002e08000acbbae2155fab7ac01929564949070d) - -## Available Blockchains - -* ethereum diff --git a/src/docs/labels/multisig/index.md b/src/docs/labels/multisig/index.md deleted file mode 100644 index c107911c1..000000000 --- a/src/docs/labels/multisig/index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: MultiSig -author: Alex.g -date: 2023-06-01 -description: MultiSig Label ---- - -## Description - -Multisig wallets are a type of cryptocurrency wallets for which at least two private keys are needed to sign a transaction. Very often a multisig is a smart contract that requires several addresses to initiate a transaction. - -## [Label fqn](/labels/label-fqn) - -`santiment/multisig:v1` - -## Label Examples - -Multisig wallet: [0xcef700a5e522a731dd48f6ba746f418b1b85f593](https://etherscan.io/address/0xcef700a5e522a731dd48f6ba746f418b1b85f593) - -## Available Blockchains - -* ethereum diff --git a/src/docs/labels/nft-collection-name/index.md b/src/docs/labels/nft-collection-name/index.md deleted file mode 100644 index b46be2450..000000000 --- a/src/docs/labels/nft-collection-name/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: NFT collection name -author: Alex -date: 2023-03-22 -description: NFT collection name label ---- - -## Description - -Name of the [NFT collection](/labels/nft-collection). - -## [Label fqn](/labels/label-fqn) - -`santiment/nft_collection_name->{your_value}:v1` - -- E.g. `santiment/nft_collection_name->cryptophunksv2:v1` - -## Label Examples - -CryptoPhunksV2 NFT collection [0xf07468ead8cf26c752c676e43c814fee9c8cf402](https://etherscan.io/token/0xf07468ead8cf26c752c676e43c814fee9c8cf402) - - -## Available Blockchains - -* ethereum diff --git a/src/docs/labels/nft-collection-symbol/index.md b/src/docs/labels/nft-collection-symbol/index.md deleted file mode 100644 index 6005ad67a..000000000 --- a/src/docs/labels/nft-collection-symbol/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: NFT collection symbol -author: Katsiaryna -date: 2023-05-02 -description: NFT collection symbol label ---- - -## Description - -Symbol of the [NFT collection](/labels/nft-collection). - -## [Label fqn](/labels/label-fqn) - -`santiment/nft_collection_symbol->{your_value}:v1` - -- E.g. `santiment/nft_collection_symbol->phunks:v1` - - -## Label Examples - -CryptoPhunksV2 NFT collection has symbol PHUNK [0xf07468ead8cf26c752c676e43c814fee9c8cf402](https://etherscan.io/token/0xf07468ead8cf26c752c676e43c814fee9c8cf402) - -## Available Blockchains - -* ethereum diff --git a/src/docs/labels/nft-collection/index.md b/src/docs/labels/nft-collection/index.md deleted file mode 100644 index e23632c4b..000000000 --- a/src/docs/labels/nft-collection/index.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: NFT collection -author: Katsiaryna -date: 2023-05-02 -description: NFT collection label ---- - -## Description - -Any smart contract which is an NFT collection contract should have the `nft-collection` label assigned to it. There are two main standards for NFT contracts: ERC721 and ERC1155. We make sure to assign a label for each standard. - -NFT collections are usually identified by their [nft collection name](/labels/nft-collection-name) and [nft collection symbol](/labels/nft-collection-symbol). If the collection has a name or/and symbol that's easily accessible, we create labels for those too. - -## [Label fqn](/labels/label-fqn) - -`santiment/nft_collection:v1` - -## Address Examples - -[0x580a29fa60b86aaff102743de5cba60bb5f9de75][https://etherscan.io/address/0x580a29fa60b86aaff102743de5cba60bb5f9de75] - -## Available Blockchains - -* ethereum diff --git a/src/docs/labels/nft-influencer/index.md b/src/docs/labels/nft-influencer/index.md deleted file mode 100644 index f99c5629e..000000000 --- a/src/docs/labels/nft-influencer/index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: NFT Influencer -author: Vladimir -date: 2023-06-15 -description: NFT Influencer ---- - -## Description - -This label denotes an onchain address of some nft influencer. - -## [Label fqn](/labels/label-fqn) - -`santiment/nft_influencer:v1` - -## Label Examples - -NFT Influencer "BokkyPooBah": [0x000001f568875F378Bf6d170B790967FE429C81A](https://etherscan.io/address/0x000001f568875F378Bf6d170B790967FE429C81A) - -## Available Blockchains - -- ethereum \ No newline at end of file diff --git a/src/docs/labels/nft-marketplace/index.md b/src/docs/labels/nft-marketplace/index.md deleted file mode 100644 index 815a20012..000000000 --- a/src/docs/labels/nft-marketplace/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: NFT marketplace -author: Alex -date: 2023-03-22 -description: label ---- - -## Description - -NFT marketplace is a platforms where users can buy, sell, and trade NFTs. - -By applying the nft_marketplace label to specific addresses, you can quickly identify which wallets are actively engaged in NFT marketplace activities. This label helps provide insights into the involvement of wallets in the dynamic and rapidly growing NFT market. - -## [Label fqn](/labels/label-fqn) - -`santiment/nft_marketplace:v1` - -## Label Examples - -Blur marketplace address: [0x39da41747a83aee658334415666f3ef92dd0d541](https://etherscan.io/address/0x39da41747a83aee658334415666f3ef92dd0d541) - - -## Available Blockchains - -* ethereum \ No newline at end of file diff --git a/src/docs/labels/nft-trader-threshold/index.md b/src/docs/labels/nft-trader-threshold/index.md deleted file mode 100644 index a158ccd33..000000000 --- a/src/docs/labels/nft-trader-threshold/index.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: NFT trader threshold -author: Alex -date: 2023-03-22 -description: label ---- - -## Description - -The label is attached to the addresses that actively traded NFTs recently. During ordinary market this label duplicates [nft_trader](/labels/nft-trader) label. It differs during most active NFT market period and denotes to the most active part of the traders. - -While the NFT trader label is based on percentiles, the NFT trader threshold uses top-Nth value of trades count and volume among all NFT active addresses, with the N number recorded in the value field of the label. -The labels are calculated for two N-threshold values: 1000 and 5000. - - -## [Label fqn](/labels/label-fqn) - -`santiment/nft_trader_threshold->{your_value}:v1` - -Currently only 2 thresholds are supported: -- `santiment/nft_trader_threshold->1000:v1` -- `santiment/nft_trader_threshold->5000:v1` - - -## Label Examples - -The address was labeled as NFT trader with threshold 1000 on May, 3rd, 2023: -[0xb7b668c3dd82bbc8708d41146af74d415087969d](https://etherscan.io/address/0xb7b668c3dd82bbc8708d41146af74d415087969d) - -## Available Blockchains: - -* Ethereum diff --git a/src/docs/labels/nft-trader/index.md b/src/docs/labels/nft-trader/index.md deleted file mode 100644 index 28294ec57..000000000 --- a/src/docs/labels/nft-trader/index.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: NFT trader -author: Alex -date: 2023-03-22 -description: label ---- - -## Description - -The NFT trader label is assigned to a group of wallet addresses that have been **actively** involved in NFT trading in recent times. These labels are not permanent and can be attached or detached from addresses over time, depending on their NFT trading activity. - -To determine if an address qualifies as an NFT trader (i.e. if the address is active enough), we evaluate its NFT trades count and NFT trading volume against the 97.5 percentile of the NFT trades count and NFT trading volume of all addresses trading NFTs within a recent timeframe. This helps us identify the most active and significant NFT traders in the ecosystem. - -## [Label fqn](/labels/label-fqn) - -`santiment/nft_trader:v1` - - -## Label Examples - -The address was labeled as NFT trader on May, 2nd, 2023: -[0xb7b668c3dd82bbc8708d41146af74d415087969d](https://etherscan.io/address/0xb7b668c3dd82bbc8708d41146af74d415087969d) - - -## Available Blockchains - -* Ethereum diff --git a/src/docs/labels/nft-user/index.md b/src/docs/labels/nft-user/index.md deleted file mode 100644 index fa51700f2..000000000 --- a/src/docs/labels/nft-user/index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: NFT user -author: Katsiaryna -date: 2023-05-02 -description: label ---- - -## Description - -The label denotes an address that traded at least one NFT. - -## [Label fqn](/labels/label-fqn) - -`santiment/nft_user:v1` - -## Label Examples - -[0x708c9d44eafac41fa7217bd8390fc2b18613e739](https://etherscan.io/address/0x708c9d44eafac41fa7217bd8390fc2b18613e739) - -## Available Blockchains - -* Ethereum diff --git a/src/docs/labels/nft/index.md b/src/docs/labels/nft/index.md deleted file mode 100644 index bfaaf6a50..000000000 --- a/src/docs/labels/nft/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: NFT -author: Alex -date: 2023-03-22 -description: NFT label ---- - -## Description - -The NFT label is used to identify wallet addresses that are involved in any NFT (Non-Fungible Token) activities. By using the NFT label, you can quickly identify which wallets are involved in NFT activities and gain a better understanding of the NFT ecosystem. - -NFT group includes other labels such as [NFT User](/labels/nft-user), [NFT collection](/labels/nft-collection) and others. Visit this page to see the full child labels list. - -## [Label fqn](/labels/label-fqn) - -`santiment/nft:v1` - -## Address Examples - -[0x580a29fa60b86aaff102743de5cba60bb5f9de75][https://etherscan.io/address/0x580a29fa60b86aaff102743de5cba60bb5f9de75] - - -## Available Blockchains - -* ethereum diff --git a/src/docs/labels/opensea-username/index.md b/src/docs/labels/opensea-username/index.md deleted file mode 100644 index 4370cc57b..000000000 --- a/src/docs/labels/opensea-username/index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: OpenSea Username -author: Vladimir -date: 2023-04-18 -description: OpenSea Username ---- - -## Description - -> label under maintaince - -This label provides valuable details about the connection between the user's profile on the OpenSea platform and addresses. - -## [Label fqn](/labels/label-fqn) - -`santiment/opensea_username->erwwer:v1` - -* E.g. `santiment/opensea_username->erwwer:v1` - -## Available Blockchains - -* ethereum \ No newline at end of file diff --git a/src/docs/labels/owner/index.md b/src/docs/labels/owner/index.md deleted file mode 100644 index 6b1a2c6db..000000000 --- a/src/docs/labels/owner/index.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Owner -author: Alex -date: 2023-03-22 -description: Owner label ---- - -## Description - -Owner is a standalone label which denotes the person or company which controls a given address. Note that owner label is not a nickname. Owner is a broader term rather than nickname which is an owner's attribute (e.g. Vitalik Buterin might have several nicknames: 'Vitaliy', 'ETH_daddy', 'Jogn Galt', etc). - -In most cases Owner label is connected with other labels (such as [centralized_exchange](/labels/centralized-exchange)). - -## [Label fqn](/labels/label-fqn) - -`santiment/owner->{your_value}:v1` - -- E.g. `santiment/owner->binance:v1` -- E.g. `santiment/owner->aave_v3:v1` - -## Label Examples - -Binance: [0x28c6c06298d514db089934071355e5743bf21d60](https://etherscan.io/address/0x28c6c06298d514db089934071355e5743bf21d60) - -Aave: [0x625aE63000f46200499120B906716420bd059240](https://etherscan.io/address/0x625aE63000f46200499120B906716420bd059240) - -## Available Blockchains - -Blockchain indifferent \ No newline at end of file diff --git a/src/docs/labels/proxy/index.md b/src/docs/labels/proxy/index.md deleted file mode 100644 index 41bb93a62..000000000 --- a/src/docs/labels/proxy/index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Proxy -author: Vladimir -date: 2023-04-25 -description: Proxy label ---- - -## Description - -A proxy entity is a special type of entity that serves as an intermediary between other entities. - -For example: Instead of interacting directly with the target contract, all calls are directed through the proxy, which then delegates -the request to the intended target contract. This allows for a greater degree of control and flexibility over the -contract's behavior. - -## [Label fqn](/labels/label-fqn) - -`santiment/proxy:v1` - -## Label Examples - -MakerDAO DSProxy Contract [0x00002c65ba1e64d2fd8c6ffb7160fd6bde9e17dd] - -## Available Blockchains - -* ethereum \ No newline at end of file diff --git a/src/docs/labels/sanctioned/index.md b/src/docs/labels/sanctioned/index.md deleted file mode 100644 index 31daeac01..000000000 --- a/src/docs/labels/sanctioned/index.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Sanctioned Label -author: Vladimir -date: 2023-06-21 -description: Sanctioned Label ---- - -## Description -Label used to mark addresses that were added into sanction list. For example - OFAC Sanction list. - -## [Label fqn](/labels/label-fqn) - -`santiment/sanctioned:v1` - -## Label Examples -Tornado cash [0x03893a7c7463ae47d46bc7f091665f1893656003](https://etherscan.io/address/0x03893a7c7463ae47d46bc7f091665f1893656003) -Sanctioned [0x67d40ee1a85bf4a4bb7ffae16de985e8427b6b45](https://etherscan.io/address/0x67d40ee1a85bf4a4bb7ffae16de985e8427b6b45) - -## Available Blockchains - -* ethereum \ No newline at end of file diff --git a/src/docs/labels/scam/index.md b/src/docs/labels/scam/index.md deleted file mode 100644 index ec2875b47..000000000 --- a/src/docs/labels/scam/index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Scam -author: Vladimir -date: 2023-04-18 -description: Scam label ---- - -## Description - -Label `scam` means that address has been linked to scam activity and this information has been publicly disclosed. - -## [Label fqn](/labels/label-fqn) - -`santiment/scam:v1` diff --git a/src/docs/labels/staking/index.md b/src/docs/labels/staking/index.md deleted file mode 100644 index 1cca91641..000000000 --- a/src/docs/labels/staking/index.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Liquid staking -author: Vladimir -date: 2023-04-18 -description: Liquid Staking Label ---- - -## Description - -DeFi liquid staking projects create tokenized versions of staked assets, allowing users to earn rewards while maintaining liquidity. -These projects provide increased flexibility and higher rewards compared to traditional staking. - - -## [Label fqn](/labels/label-fqn) - -`santiment/liquid_staking:v1` - - -## Available Blockchains - -* ethereum \ No newline at end of file diff --git a/src/docs/labels/team_wallet/index.md b/src/docs/labels/team_wallet/index.md deleted file mode 100644 index 224bdfa25..000000000 --- a/src/docs/labels/team_wallet/index.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Team wallet -author: -date: 2023-06-01 -description: Team wallet label ---- - -## Description - - -## [Label fqn](/labels/label-fqn) - -`santiment/team_wallet:v1` - -## Label Examples - - -## Available Blockchains - -* ethereum \ No newline at end of file diff --git a/src/docs/labels/used-nft-marketplace/index.md b/src/docs/labels/used-nft-marketplace/index.md deleted file mode 100644 index c6c4c6fd8..000000000 --- a/src/docs/labels/used-nft-marketplace/index.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Used NFT marketplace -author: Alex -date: 2023-03-22 -description: label ---- - -## Description - -The `used_nft_marketplace` label denotes the marketplaces that NFT user traded on. - -## [Label fqn](/labels/label-fqn) - -`santiment/used_nft_marketplace->{your_value}:v1` - -* E.g. `santiment/used_nft_marketplace->blur:v1` -* E.g. `santiment/used_nft_marketplace->superrare:v1` -* E.g. `santiment/used_nft_marketplace->cryptopunks:v1` -* E.g. `santiment/used_nft_marketplace->opensea:v1` -* E.g. `santiment/used_nft_marketplace->looksrare:v1` -* E.g. `santiment/used_nft_marketplace->rarible:v1` -* E.g. `santiment/used_nft_marketplace->foundation:v1` -* E.g. `santiment/used_nft_marketplace->x2y2:v1` - -## Label Examples - -[0x708c9d44eafac41fa7217bd8390fc2b18613e739](https://etherscan.io/address/0x708c9d44eafac41fa7217bd8390fc2b18613e739) - -## Available Blockchains - -* Ethereum diff --git a/src/docs/labels/whale-usd-balance/index.md b/src/docs/labels/whale-usd-balance/index.md deleted file mode 100644 index 8ac0b0467..000000000 --- a/src/docs/labels/whale-usd-balance/index.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Whale by USD Balance -author: Alex -date: 2024-02-14 -description: Whale usd balance label ---- - -## Description - -We define an address as a whale if the address holds a specific amount of money in a coin. The minimum amount of money required depends on the coin's market capitalization. For example, if the coin's market capitalization is $100B, we label addresses holding a worth of $6.9M in this coin as whales. - -Notes: - -* For each erc20 asset whale labels are computed separately. - -* Whales are computed for coins with a minimum capitalization of $1M. - -* Thresholds and labels are recomputed daily. - - -## Rationale - -Despite the common intuition behind the definition of a whale being very simple - someone who owns a large amount of money - it can be difficult to distinguish between a whale and a non-whale address in practice. - -While there are many valid definitions of a whale, Santiment believes that a whale is an address that has the ability to influence the entire market with its stake. This implies an important consequence: the threshold between a whale and a non-whale is context-dependent, meaning it depends on the specific market. For example, imagine a low-cap coin with a total capitalization of $100k. An address holding $10k worth of that token would be considered quite large. On the other hand, $10k in ETH would be considered negligible. - -Given this, we can conclude that the line between a whale and a non-whale is not fixed. Furthermore, there is a logical connection with a coin's market capitalization. The higher the market capitalization, the larger the balance required to be classified as a whale. - - -## Methodology - -To mathematically define the relationship between market cap and whale threshold, we consulted an expert. Given the coin and its market cap, we determined the minimum sufficient balance for a whale. After analyzing the data, we reached the following conclusions: - -- The threshold increases as the market cap increases. -- The relationship between market cap and threshold is not linear. -- The function relating market cap and threshold appears to be logarithmic. - -Further analysis led us to establish a strict mathematical relationship between a coin's market capitalization and the minimum sufficient whale balance: - -![Minimal Whale Balance](image.png) - -Finally, we determine whether an address is considered a whale based on the amount of money they hold in a specific coin. The minimum amount required depends on the coin's market capitalization. - -## Threshold Examples - -Capitalization | Minimal Whale Balance -|-|-| -$1,000B|$16,6M -$500B|$14M -$100B|$6,9M -$50B|$4,8M -$10B|$2M -$5B|$1,3M -$1B|$500k -$500M|$329k -$100M|$124k -$50M|$81k -$10M|$30k -$1M|$7.3k - -## [Label fqn](/labels/label-fqn) - -`santiment/whale_usd_balance({asset_name}):v1` - -* E.g. `santiment/whale_usd_balance(ethereum):v1` - -## Label Examples - -Uniswap Whale Address (14.02.24): [0x47173b170c64d16393a52e6c480b3ad8c302ba1e](https://etherscan.io/address/0x47173b170c64d16393a52e6c480b3ad8c302ba1e) - -ETH Whale Address (14.02.24): [0xefb2e870b14d7e555a31b392541acf002dae6ae9](https://etherscan.io/address/0xefb2e870b14d7e555a31b392541acf002dae6ae9) - -## Available Blockchains - -* ethereum diff --git a/src/docs/labels/whale/index.md b/src/docs/labels/whale/index.md deleted file mode 100644 index 190c20689..000000000 --- a/src/docs/labels/whale/index.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Whale -author: Alex -date: 2023-03-22 -description: Whale label ---- - -## Description - -Whale is an address holding a substensial amount of tokens. We sort all addresses by its balance and label top 100 addresses as whales every day. For each erc20 asset whale labels are computed separately. - -Note that the addresses labelled as whale yesterday might not be a whale any more tomorrow. - -## [Label fqn](/labels/label-fqn) - -`santiment/whale({asset_name}):v1` - -* E.g. `santiment/whale(ethereum):v1` - -## Label Examples - -[0x1bd3fc5ac794e7af8e834a8a4d25b08acd9266ce](https://etherscan.io/address/0x1bd3fc5ac794e7af8e834a8a4d25b08acd9266ce) - -[0xe92d1a43df510f82c66382592a047d288f85226f](https://etherscan.io/address/0xe92d1a43df510f82c66382592a047d288f85226f) - -## Available Blockchains - -* ethereum diff --git a/src/docs/labels/withdrawal/index.md b/src/docs/labels/withdrawal/index.md deleted file mode 100644 index 66c4fe621..000000000 --- a/src/docs/labels/withdrawal/index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Withdrawal -author: Alex -date: 2023-03-22 -description: label ---- - -## Description -A withdrawal address is an address that belongs to a user and is used by a user in order to withdraw funds from a third-party (e.g CEX). -The address is considered as a withdrawal address if it has received funds from a CEX (withdraw). - -The most common case is a centralized exchange (CEX) withdrawal. See the details in the image below. - -![deposit_address](deposit-withdrawal.png) - -## [Label fqn](/labels/label-fqn) - -`santiment/cex_withdrawal:v1` - -## Label Examples -Withdrawal address from Binance: [0xd026c38bb75bac49b1f4a97b861915c669e95a71](https://etherscan.io/address/0xd026c38bb75bac49b1f4a97b861915c669e95a71) - -Withdrawal address from Bitstamp: [0xef41cb1696df22f872d16ee009bc4b7e6a57bf7f](https://etherscan.io/address/0xef41cb1696df22f872d16ee009bc4b7e6a57bf7f) - -## Available Blockchains -* ethereum diff --git a/src/docs/labels/withdrawn-from/index.md b/src/docs/labels/withdrawn-from/index.md deleted file mode 100644 index e3159d569..000000000 --- a/src/docs/labels/withdrawn-from/index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Withdrawn From -author: Vladimir -date: 2024-04-08 -description: label ---- - -## Description -A`withdrawn_from` label is used to identify the entity involved in a withdrawal action. - -The most common case is a centralized exchange (CEX) withdrawal. See the details in the image below. - - -## [Label fqn](/labels/label-fqn) - -`santiment/withdrawn_from->{your_value}:v1` - -* E.g. `santiment/withdrawn_from->binance:v1` - -## Label Examples -Withdrawn from Binance: [0xd026c38bb75bac49b1f4a97b861915c669e95a71](https://etherscan.io/address/0xd026c38bb75bac49b1f4a97b861915c669e95a71) - -Withdrawn from Bitstamp: [0xef41cb1696df22f872d16ee009bc4b7e6a57bf7f](https://etherscan.io/address/0xef41cb1696df22f872d16ee009bc4b7e6a57bf7f) - -## Available Blockchains -* ethereum diff --git a/src/docs/labels/yield/index.md b/src/docs/labels/yield/index.md deleted file mode 100644 index 0f39891f9..000000000 --- a/src/docs/labels/yield/index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Yield Farming Label -author: Vladimir -date: 2023-06-22 -description: Yield Farming Label ---- - -## Description -Label used to mark addresses that are used in Yield Farming activities - -## [Label fqn](/labels/label-fqn) - -`santiment/yield:v1` - -## Label Examples -YFV.finance: Link Pool: [0x196CF719251579cBc850dED0e47e972b3d7810Cd](https://etherscan.io/address/0x196cf719251579cbc850ded0e47e972b3d7810cd) - -Pylon.Finance: Solarite SNX Pool: [0x92a7492A1354dFFB9A9865B66e8334736eF49374](https://etherscan.io/address/0x92a7492a1354dffb9a9865b66e8334736ef49374) - -## Available Blockchains - -* ethereum \ No newline at end of file diff --git a/src/docs/metrics/active-addresses-24h/index.md b/src/docs/metrics/active-addresses-24h/index.md deleted file mode 100644 index 8183ea6a2..000000000 --- a/src/docs/metrics/active-addresses-24h/index.md +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Active Addresses 24h -author: Ivan -date: 2022-04-12 -description: Number of unique addresses participating in transactions for the last 24 hour window - ---- - -## Definition - -The number of distinct addresses that participated in a transfer for the given -asset in the past 24 hours window. Each address is counted only once for the -window. Both the senders and the receivers are counted. - -This metric is similar to the Daily Active Addresses. The difference is that the -daily active addresses is computed on whole days only - it counts the active -addresses for every day (between 00:00:00 and 23:59:59). The active addresses -24h is computed every 5 minutes and counts the active addresses for -the past 24 hours. Example: The value of the metric at 17:30pm on March 22 -contains the active addresses in the interval [17:30pm March 21, 17:30pm March -22]. - - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Non-negative number of addresses - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -## API - -Available under the `active_addresses_24h` name. - -```graphql-explorer -{ - getMetric(metric: "active_addresses_24h") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -The full list of Active Addresses metrics is: - -
    - -Open Metrics List -- active_addresses_1h -- active_addresses_24h -- active_addresses_24h_change_1d -- active_addresses_24h_change_30d -- active_addresses_24h_change_7d -- active_addresses_7d -- active_addresses_30d -- active_addresses_60d -- active_addresses_90d - -
    diff --git a/src/docs/metrics/active-deposits/index.md b/src/docs/metrics/active-deposits/index.md deleted file mode 100644 index bf5a31963..000000000 --- a/src/docs/metrics/active-deposits/index.md +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Active Deposits -author: Santiment Team -date: 2020-04-06 - -headline: "Crypto Active Addresses: Metric to Track Blockchain Activity" -description: "The active addresses metric is the number of unique addresses participating in transactions during one day. Learn more about how we calculate it." - ---- - -## Definition - -### Active Deposits - -Shows the **number of unique deposit addresses** that have been active on a -particular day for a given asset. Refer to a [deposit address explanation here](/labels/deposit) - -![ethereum daily active deposits](daily-active-deposits-ethereum.png) - -`active_deposits` metric shows the number of **daily** active deposits. `active_deposits_5m` shows the amount of active deposits for a given **5 minutes** interval. - - -### Deposit Transactions - -Deposit transactions metric shows the total number of all **incoming and outcoming transactions** involving -deposit addresses on a particular day for `deposit_transactions` and for a particlar 5 minutes interval for `deposit_transactions_5m`. - -As such, this metric accounts for both user-to-exchange transactions: - -1. from a personal wallet to a deposit address, and -2. from a deposit address to the main exchange wallet. - -Deposit-related Transactions is often valuable when used in conjunction with -**Exchange Inflow** -- [another one of our -metrics](/metrics/exchange-funds-flow/) -- which shows the total amount of -coins moving to exchange wallets on a particular day. - -So, for example, an **increase in exchange inflow** but a **plateauing number of -deposit-related transactions** means that more coins are entering the exchanges, -although the number of transactions to the exchanges stayed the same. In other -words, **the average deposit size has increased.** - -For an exchange-specific data please refer to [that page](/metrics/labeled-exchange) - ---- - -## Access - -The metric is with [restricted access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Non-negative number of addresses - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily intervals:](/metrics/details/frequency#daily-frequency) - -* `active_deposits` -* `deposit_transactions` - -[Five-Minute Intervals:](/metrics/details/frequency#five-minute-frequency) - -* `active_deposits_5m` -* `deposit_transactions_5m` - - ---- - -## Latency - -Daily Active Deposits has [on-chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -[active_deposits]() - -[deposit_transactions]() - -[active_deposits_5m]() - -[deposit_transactions_5m]() - - ---- - -## SanAPI - -```graphql-explorer -{ - getMetric(metric: "active_deposits") { - timeseriesDataJson( - slug: "maker" - from: "2019-05-09T11:25:04.894Z" - to: "2019-06-23T11:25:04.894Z" - interval: "1d" - ) - } -} -``` - -Deposit transactions are available under `deposit_transactions` and `deposit_transactions_5m` names. - - -```graphql-explorer -{ - getMetric(metric: "deposit_transactions_5m") { - timeseriesDataJson( - slug: "ethereum" - from: "2024-01-01T00:00:00.000Z" - to: "2024-01-02T00:00:00.000Z" - interval: "1h") - } -} -``` - - - diff --git a/src/docs/metrics/active-withdrawals/index.md b/src/docs/metrics/active-withdrawals/index.md deleted file mode 100644 index 864022b55..000000000 --- a/src/docs/metrics/active-withdrawals/index.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: Active Withdrawals -author: Santiment Team -date: 2024-04-03 - -headline: "Crypto Active Addresses: Metric to Track Blockchain Activity" -description: "The active addresses metric is the number of unique addresses participating in transactions during one day. Learn more about how we calculate it." - ---- - -## Definition - -### Active Withdrawals - -Shows the **number of unique withdrawal addresses** that have been active on a -particular day for a given asset. Refer to a [withdrawal address explanation here](/labels/withdrawal) - -### Withdrawal Transactions - -Withdrawal transactions metric shows the total number of all **outgoing transactions** involving -withdrawal addresses on a particular day. Basically, this metric accounts for exchange-to-user transactions. - -For an exchange-specific data please refer to [that page](/metrics/labeled-exchange) - ---- - -## Access - -The metric is with [restricted access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Non-negative number of addresses - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily intervals:](/metrics/details/frequency#daily-frequency) - -* `active_withdrawals` -* `withdrawal_transactions` - -[Five-Minute Intervals:](/metrics/details/frequency#five-minute-frequency) - -* `active_withdrawals_5m` -* `withdrawal_transactions_5m` - ---- - -## Latency - -[On-chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -[active_withdrawals]() - -[withdrawal_transactions]() - -[active_withdrawals_5m]() - -[withdrawal_transactions_5m]() - ---- - -## SanAPI - -The metric is available under the `active_withdrawals` name for daily resolution and `active_withdrawals_5m` for intraday resolution. - -```graphql-explorer -{ - getMetric(metric: "active_withdrawals") { - timeseriesDataJson( - slug: "ethereum" - from: "2023-05-09T11:25:04.894Z" - to: "2023-06-23T11:25:04.894Z" - interval: "1d" - ) - } -} -``` - - -Withdrawal transactions are available under `withdrawal_transactions` and `withdrawal_transactions_5m` names. - - -```graphql-explorer -{ - getMetric(metric: "withdrawal_transactions_5m") { - timeseriesDataJson( - slug: "ethereum" - from: "2024-01-01T00:00:00.000Z" - to: "2024-01-02T00:00:00.000Z" - interval: "1h") - } -} -``` - - - diff --git a/src/docs/metrics/age-consumed/age-consumed-technical.md b/src/docs/metrics/age-consumed/age-consumed-technical.md deleted file mode 100644 index e908bfe1b..000000000 --- a/src/docs/metrics/age-consumed/age-consumed-technical.md +++ /dev/null @@ -1,124 +0,0 @@ ---- -title: Token Age Consumed - Technical Details -author: Ivan Ivanov, Tzanko Matev -date: 2021-11-22 ---- - -We will describe here one statistic that we call the _token age consumed_. This -is a measurement that detects changes in the volume of the token circulation and -can show us when tokens that have been frozen for a long time come into -circulation. We have computed this measurement for all ERC20 tokens. In theory -it can be calculated for any cryptocurrency which has publicly readable -transactions (so not like #ZEC or #XMR) - -To understand the token age consumed, we need to rethink our idea of a token -account. At any given moment, an account has a value which is a single number. -But this number is a result of transactions coming in and going out of the -account. Some of those transactions happened a very long time ago, while others -happened only recently. - -Let's look at the following example. Assume that Alice and Bob have each one -account of SAN tokens. Both of them have 10000 tokens. Alice bought her tokens 4 -months ago and didn't move them. Bob, on the other hand, was buying and selling -large amounts of tokens the whole time. So we can imagine that Alice's tokens -were out of circulation for the entire four months, while Bob's tokens were in -circulation. In this scenario, it is not a significant event if Bob transfers -5000 of his tokens today. But it is much more critical if Alice transfers 5000 -tokens. The token age consumed is a measurement that will tell us if many people -suddenly start transferring tokens that have not moved for a long time. - -To understand how the token age consumed is calculated, imagine that the coins -in each account are ordered as a stack: Incoming transactions put money on top -of the stack, and outgoing transactions take money from the top. For every -portion of this stack, we can note the block number of the corresponding -incoming transaction. So for any given block number $t$ and any account $a$, we -can construct a stack $stack(a,t)$ that describes the account's history at that -block number. We have - -$$ -stack(a,t):= [(s_1, t_1), (s_2, t_2), \dots, (s_k, t_k)] -$$ - -Here $s_1,\dots, s_k$ are token amounts, and $t_1,\dots, t_k$ are block numbers. -Also, the sum $s_1+\cdots+s_k$ equals the current balance of the account. - -Assume that the current block number is $t$. There are several cases regarding -the account $a$: - -### No transactions - -In that case the contribution $tac(a,t)$ (token age consumed) of the account $a$ -towards the token age consumed at block $t$ is 0. - -### Incoming transaction - -In that case, we need to put the amount of the incoming transaction at the top of -our stack. If that amount was $s$, the new stack becomes - -$$ -stack(a, t+1) := [(s_1, t_1), \dots, (s_k, t_k), (s, t)] -$$ - -In that case the contribution $tac(a,t)$ of the account $a$ towards the token -age consumed at block $t$ is 0. - -### Outgoing transaction - -The outgoing transaction will _consume_ the elements at the top of the stack. If -the amount of the transaction was $s$, then all elements $(s_i, t_i)$ such that -$s_i + s_{i+1} + \cdots + s_k < s$ will be completely consumed. Let $m$ be the -smallest such index $i$. The element $(s_{m-1}, t_{m-1})$ might be partially -consumed if there was any amount left from the outgoing transaction. So the new -stack will become - -$$ -stack(a, t+1) := [(s_1, t_1), \dots, (s_{m-1} - (s- \sum_{i=m}^ks_i), t_{m-1})] -$$ - -In the case of an outgoing transaction, the account $a$ contributed to the token age -consumed at block $t$. Its contribution is: - -$$ -tac(a,t):= \sum_{i=m}^k s_i * (t-t_i) + (s-\sum_{i=m}^ks_i)*(t-t_{m-1}) -$$ - -which means all elements will be fully consumed, and their age is added -to the whole contribution, while the last consumed stack can be only partially -consumed. - -### Multiple transactions - -If there were multiple incoming and/or outgoing transactions happening at the -same block number $t$, we replace them in our calculations with a single -transaction. This transaction will be incoming if the total incoming amount is -greater than the total outgoing amount, and it will be outgoing. So we -can reduce this case to one of the cases we described above. - -After we have computed the token age consumed contribution at block $t$ for -every account, we can calculate the total token age consumed: - -$$ -tac(t) := \sum_{a} tac(a,t) -$$ - -### Example - -Imagine again that Alice and Bob are exchanging tokens. Initially, Alice had 5000 -tokens, which she obtained at block 0, and Bob doesn't have any tokens. - -First, Alice transfers 1000 tokens to Bob at block 5. Her transaction stack has a -single element $[(5000, 0)]$ and 1000 tokens are consumed from it, contributing -$1000*(5-0)=5000$ token age consumed for block 5. Now Alice transaction stack is -$[(4000, 0)]$ and Bob transaction stack is $[(1000,5)]$. - -Later Bob decides to move these tokens to an exchange and sell them, so at block -15 Bob transfers his tokens to an exchange wallet, which contributes -$1000*(15-5)=10000$ token age consumed to block 15. On the other hand Alice -transfers 2000 tokens to Bob at the same block 15, which makes the total token -age consumed for block 15 $10000 + 2000 * (15-0) = 10000 + 30000 = 40000$. The -transaction stacks of Alice is $[(2000, 0)]$, while the stack of Bob is $[(2000, -15)]$. - -At block 25, both Alice and Bob decide to transfer their tokens to an exchange, -contributing $2000 * (25 - 0) + 2000 * (25 - 15) = 2000 * 25 + 2000 * 10 = -70000$ to the total token age consumed for block 25. diff --git a/src/docs/metrics/age-consumed/index.md b/src/docs/metrics/age-consumed/index.md deleted file mode 100644 index 663e94b81..000000000 --- a/src/docs/metrics/age-consumed/index.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: Token Age Consumed metric -author: Santiment Team -date: 2020-04-06 -description: Amount of coins/tokens moved multipled by their age ---- - -_For a more in-depth technical explanation of Age Consumed, please click_ -[_here_](/metrics/age-consumed/age-consumed-technical) - ---- - -## Definition - -Age Consumed shows the amount of tokens changing addresses on a certain date, -multiplied by the time since they last moved. - -Spikes on the graph signal a large amount of tokens moving after being idle for -an extended period of time. - -One potential use case for this metric is identifying when big market players -exit the project post ICO. - -Here's the Token Age Consumed graph for [Golem](https://golem.network/), an -ERC-20 project that lets you rent other people's computing power. -![golem-age-consumed](golem-age-consumed.png) - -We can easily spot several significant spikes over time: each could be a large -early investor selling their tokens, which commonly results in a parallel price -decline. - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -Time passed × Token/Coin amount - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these assets]() - ---- - -## API - -Available under the `age_destroyed` and `age_consumed` names, one being an alias for the other: - -```graphql-explorer -{ - getMetric(metric: "age_consumed") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -The full list of Age Consumed metrics is: - -
    - -Open Metrics List - -- age_consumed -- age_consumed_change_1d -- age_consumed_change_30d -- age_consumed_change_7d - -
    \ No newline at end of file diff --git a/src/docs/metrics/amount-in-top-holders/index.md b/src/docs/metrics/amount-in-top-holders/index.md deleted file mode 100644 index dfbcc1474..000000000 --- a/src/docs/metrics/amount-in-top-holders/index.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Amount in Top Holders -author: Ivan -date: 2020-06-29 -description: Number of unique coins/tokens held by top holders ---- - -## Definition - -Show the amount of coins/tokens help by the top holders. By default the top 10 -holders are taken. - -Metrics available: - -- `amount_in_top_holders` - All holders are taken into account. -- `amount_in_exchange_top_holders` - Only holders that are known exchange addresses are taken into account. -- `amount_in_non_exchange_top_holders` - Only holders that are not exchange addresses are taken into account. - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -Token/Coin amount - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for: - -- `amount_in_top_holders` - [these assets]() -- `amount_in_exchange_top_holders` - [these assets]() -- `amount_in_non_exchange_top_holders` - [these assets]() - ---- - -## SanAPI - -The available metrics are: -- `amount_in_top_holders` -- `amount_in_exchange_top_holders` -- `amount_in_non_exchange_top_holders` - -```graphql-explorer -{ - getMetric(metric: "amount_in_top_holders") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -```graphql-explorer -{ - getMetric(metric: "amount_in_exchange_top_holders") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -```graphql-explorer -{ - getMetric(metric: "amount_in_non_exchange_top_holders") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/annual-inflation-rate/index.md b/src/docs/metrics/annual-inflation-rate/index.md deleted file mode 100644 index 3ed5a75fd..000000000 --- a/src/docs/metrics/annual-inflation-rate/index.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Annual inflation rate -author: Filip -date: 2024-03-01 -description: Annual inflation rate ---- - -## Description -The annual inflation rate of cryptocurrencies varies widely depending on the specific cryptocurrency. -Unlike traditional fiat currencies, which are often centrally controlled and have -predictable inflation rates, cryptocurrencies can have different mechanisms governing their supply. -Some cryptocurrencies, like Bitcoin, have a predetermined issuance schedule with a decreasing rate -of new coin creation over time, while others may have variable or dynamic supply mechanisms. -Additionally, factors such as network consensus rules, mining rewards, and tokenomics can influence -the inflation rate of cryptocurrencies. - - -Annual inflation rate metric: -* `annual_inflation_rate` - annual inflation rate - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Decimal percentage - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -### SanAPI - -Available under name: `annual_inflation_rate` - - -```graphql-explorer -{ - getMetric(metric: "annual_inflation_rate"){ - timeseriesDataJson( - slug: "bitcoin" - from: "2024-01-01T00:00:00Z" - to: "2024-02-01T00:00:00Z" - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/binance-derivatives/busd-binance-funding-rate/index.md b/src/docs/metrics/binance-derivatives/busd-binance-funding-rate/index.md deleted file mode 100644 index 260df7f49..000000000 --- a/src/docs/metrics/binance-derivatives/busd-binance-funding-rate/index.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Binance Contract Funding Rate (BUSD) -author: Lyudmil -date: 2021-08-25 -description: Amount of coin/tokens moved on-chain. ---- - -## Description - -Funding rates are periodic payments made to either long or short traders, calculated based on the difference between the perpetual contract prices and spot prices. When the market is bullish, the funding rate is positive and tends to rise over time. In these situations, traders who are long on a perpetual contract will pay a funding fee to traders on the opposing side. Conversely, the funding rate will be negative when the market is bearish, where traders who are short on a perpetual contract will pay a funding fee to long traders. - -More details on Binance [web-site](https://www.binance.com/en/support/faq/360033525031). - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Ratio - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Eight-Hour Intervals](/metrics/details/frequency#eight-hour-frequency) - ---- - -## Latency - -[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -### SanAPI - -Available under the `busd_binance_funding_rate` name. - -> Note: The metric is also accessible under the old name `busd_bnb_funding_rates`. -> Please start using the new name. - -```graphql-explorer -{ - getMetric(metric: "busd_binance_funding_rate") { - timeseriesDataJson( - slug: "bitcoin" - from: "2021-04-01T00:00:00Z" - to: "2021-04-07T00:00:00Z" - interval: "8h" - ) - } -} -``` diff --git a/src/docs/metrics/binance-derivatives/busd-binance-perpetual-open-interest-value/index.md b/src/docs/metrics/binance-derivatives/busd-binance-perpetual-open-interest-value/index.md deleted file mode 100644 index 859b7e912..000000000 --- a/src/docs/metrics/binance-derivatives/busd-binance-perpetual-open-interest-value/index.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Binance Perpetual Contracts Open Interest/Value (BUSD) -author: Lyudmil -date: 2022-02-08 -description: The total number of Binance perpetual contracts in existence. ---- - -## Description - -Traders are always searching for information to get an edge in the market. The most valuable information is one that provides insights into what other traders are doing - Open Interest offers this information if you know how to interpret it. By understanding open interest and its impact on crypto prices, it can help you make better-informed trading decisions. - -More details on Binance [web-site](https://www.binance.com/en/blog/futures/what-information-does-open-interest-convey-421499824684900398). - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Dollars - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -### SanAPI - Open Interest - -Available under the `busd_binance_open_interest` name. - -> Note: The metric is also accessible under the old name `busd_bnb_open_interest`. -> Please start using the new name. - -```graphql-explorer -{ - getMetric(metric: "busd_binance_open_interest") { - timeseriesDataJson( - slug: "bitcoin" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - - - ---- - -### SanAPI - Open Value - -Available under the `busd_binance_open_value` name. - -> Note: The metric is also accessible under the old name `busd_bnb_open_value`. -> Please start using the new name. - -```graphql-explorer -{ - getMetric(metric: "busd_binance_open_value") { - timeseriesDataJson( - slug: "bitcoin" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/binance-derivatives/index.md b/src/docs/metrics/binance-derivatives/index.md deleted file mode 100644 index 90c5fb6dd..000000000 --- a/src/docs/metrics/binance-derivatives/index.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Binance Derivatives -author: Santiment Team -date: 2023-06-01 ---- - -[Binance](https://www.binance.com/) is a cryptocurrency exchange which is the largest exchange in the world in terms of daily trading volume of cryptocurrencies. - -The Binance Derivative metrics available are: -- [Binance Perpetual Contract Funding Rate (USDT)](/metrics/binance-derivatives/usdt-binance-funding-rate) -- [Binance Perpetual Contract Funding Rate (BUSD)](/metrics/binance-derivatives/busd-binance-funding-rate) -- [Binance Perpetual Contracts Open Interest/Value (USDT)](/metrics/binance-derivatives/usdt-binance-perpetual-open-interest-value) -- [Binance Perpetual Contracts Open Interest/Value (BUSD)](/metrics/binance-derivatives/busd-binance-perpetual-open-interest-value) diff --git a/src/docs/metrics/binance-derivatives/usdt-binance-funding-rate/index.md b/src/docs/metrics/binance-derivatives/usdt-binance-funding-rate/index.md deleted file mode 100644 index 0b0c0e33f..000000000 --- a/src/docs/metrics/binance-derivatives/usdt-binance-funding-rate/index.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Binance Contract Funding Rate (USDT) -author: Lyudmil -date: 2021-08-25 -description: Amount of coin/tokens moved on-chain. ---- - -## Description - -Funding rates are periodic payments made to either long or short traders, calculated based on the difference between the perpetual contract prices and spot prices. When the market is bullish, the funding rate is positive and tends to rise over time. In these situations, traders who are long on a perpetual contract will pay a funding fee to traders on the opposing side. Conversely, the funding rate will be negative when the market is bearish, where traders who are short on a perpetual contract will pay a funding fee to long traders. - -More details on Binance [web-site](https://www.binance.com/en/support/faq/360033525031). - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Ratio - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Eight-Hour Intervals](/metrics/details/frequency#eight-hour-frequency) - ---- - -## Latency - -[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -### SanAPI - -Available under the `usdt_binance_funding_rate` name. - -> Note: The metric is also accessible under the old name `usdt_bnb_funding_rates`. -> Please start using the new name. - -```graphql-explorer -{ - getMetric(metric: "usdt_binance_funding_rate") { - timeseriesDataJson( - slug: "bitcoin" - from: "2021-04-01T00:00:00Z" - to: "2021-04-07T00:00:00Z" - interval: "8h" - ) - } -} -``` diff --git a/src/docs/metrics/binance-derivatives/usdt-binance-perpetual-open-interest-value/index.md b/src/docs/metrics/binance-derivatives/usdt-binance-perpetual-open-interest-value/index.md deleted file mode 100644 index 94ed85382..000000000 --- a/src/docs/metrics/binance-derivatives/usdt-binance-perpetual-open-interest-value/index.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Binance Perpetual Contracts Open Interest/Value (USDT) -author: Lyudmil -date: 2022-02-08 -description: The total number of Binance perpetual contracts in existence. ---- - -## Description - -Traders are always searching for information to get an edge in the market. The most valuable information is one that provides insights into what other traders are doing - Open Interest offers this information if you know how to interpret it. By understanding open interest and its impact on crypto prices, it can help you make better-informed trading decisions. - -More details on Binance [web-site](https://www.binance.com/en/blog/futures/what-information-does-open-interest-convey-421499824684900398). - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Dollars - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -### SanAPI - Open Interest - -Available under the `usdt_binance_open_interest` name. - -> Note: The metric is also accessible under the old name `usdt_bnb_open_interest`. -> Please start using the new name. - -```graphql-explorer -{ - getMetric(metric: "usdt_binance_open_interest") { - timeseriesDataJson( - slug: "bitcoin" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - - - ---- - -### SanAPI - Open Value - -Available under the `usdt_binance_open_value` name. - -> Note: The metric is also accessible under the old name `usdt_bnb_open_value`. -> Please start using the new name. - -```graphql-explorer -{ - getMetric(metric: "usdt_binance_open_value") { - timeseriesDataJson( - slug: "bitcoin" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/bitcoin-etf-volume/index.md b/src/docs/metrics/bitcoin-etf-volume/index.md deleted file mode 100644 index 950d55611..000000000 --- a/src/docs/metrics/bitcoin-etf-volume/index.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Bitcoin ETF Volume -author: Filip -date: 2024-04-01 -description: Bitcoin ETF Volume Metric ---- - -## Description - -The Bitcoin ETF Volume metric tracks the total volume in USD traded for a Bitcoin Exchange-Traded Fund -(ETF) within a specified period. This metric provides insight into the level of investor activity and -interest in trading Bitcoin through ETFs on traditional stock exchanges. Analyzing Bitcoin ETF volume -can help investors gauge market sentiment, liquidity, and the overall demand for Bitcoin exposure within -the traditional financial markets. - -> Note: Keep in mind that this metric is available during the working hours of the US stock exchange. - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Amount in USD - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -- arkb -- bitb -- btco -- fbtc -- gbtc -- hodl -- ibit - ---- - -### SanAPI - -Available under `etf_volume_usd_5m` name. - - -```graphql-explorer -{ - getMetric(metric: "etf_volume_usd_5m"){ - timeseriesDataJson( - slug: "ibit" - from: "2024-04-01T00:00:00Z" - to: "2024-04-03T00:00:00Z" - interval: "5m") - } -} -``` diff --git a/src/docs/metrics/bitfinex-derivatives/bitfinex-perpetual-funding-rate/index.md b/src/docs/metrics/bitfinex-derivatives/bitfinex-perpetual-funding-rate/index.md deleted file mode 100644 index f17778ad6..000000000 --- a/src/docs/metrics/bitfinex-derivatives/bitfinex-perpetual-funding-rate/index.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Bitfinex Contract Funding Rate -author: Lyudmil -date: 2022-02-08 -description: Amount of coin/tokens moved on-chain. ---- - -## Description - -Details about Bitfinex's funding rates [web-site](https://support.bitfinex.com/hc/en-us/articles/360024039494-How-are-the-Funding-interest-earnings-and-fees-calculated-at-Bitfinex). - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Ratio - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Hourly Intervals](/metrics/details/frequency#hourly-frequency) - ---- - -## Latency - -[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -### SanAPI - -Available under the `bitfinex_perpetual_funding_rate` name. - -```graphql-explorer -{ - getMetric(metric: "bitfinex_perpetual_funding_rate") { - timeseriesDataJson( - slug: "bitcoin" - from: "2021-04-01T00:00:00Z" - to: "2021-04-07T00:00:00Z" - interval: "1h" - ) - } -} -``` diff --git a/src/docs/metrics/bitfinex-derivatives/index.md b/src/docs/metrics/bitfinex-derivatives/index.md deleted file mode 100644 index 65967ce09..000000000 --- a/src/docs/metrics/bitfinex-derivatives/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Bitfinex Derivatives -author: Santiment Team -date: 2023-06-01 ---- - -[Bitfinex](https://www.bitfinex.com/) is a digital asset trading platform offering state-of-the-art services for digital currency traders and global liquidity providers. - -- [Bitfinex Perpetual Contract Funding Rate](/metrics/bitfinex-derivatives/bitfinex-perpetual-funding-rate) diff --git a/src/docs/metrics/bitmex-derivatives/index.md b/src/docs/metrics/bitmex-derivatives/index.md deleted file mode 100644 index c5c9c7338..000000000 --- a/src/docs/metrics/bitmex-derivatives/index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: BitMEX Derivatives -author: Santiment Team -date: 2023-06-01 ---- - -[BitMEX](https://www.bitmex.com/) is a P2P crypto-products trading platform. -Metrics build on top of BitMEX trading contracts. - -- [BitMEX Perpetual Contract Funding Rate](/metrics/bitmex-derivatives/perpetual-contract-funding-rate) -- [BitMEX Perpetual Contract Price](/metrics/bitmex-derivatives/perpetual-contract-price) -- [BitMEX Price Index](/metrics/bitmex-derivatives/price-index) -- [BitMEX Perpetual Contract Basis](/metrics/bitmex-derivatives/perpetual-contract-basis) -- [BitMEX Perpetual Contracts Open Interest/Value](/metrics/bitmex-derivatives/perpetual-contracts-open-interest-value) diff --git a/src/docs/metrics/bitmex-derivatives/perpetual-contract-basis/index.md b/src/docs/metrics/bitmex-derivatives/perpetual-contract-basis/index.md deleted file mode 100644 index 209df8848..000000000 --- a/src/docs/metrics/bitmex-derivatives/perpetual-contract-basis/index.md +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: BitMEX Perpetual Contract Basis -author: Anatoliy -date: 2020-06-03 -description: Contract price - index price. ---- - -## Description - -Shows the difference between BitMEX [perpetual contract's price](/metrics/bitmex-derivatives/perpetual-contract-price) of - Project Ticker and BitMEX [index (spot) price](/metrics/bitmex-derivatives/price-index) for Project Ticker. - -Available as - absolute value or ratio. In the last case it is computed using the formula: `(contract's price - index - price)/index price` - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Dollars/Ratio - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -### SanAPI - -Basis absolute value is available under the `bitmex_perpetual_basis` name. - -```graphql-explorer -{ - getMetric(metric: "bitmex_perpetual_basis") { - timeseriesDataJson( - slug: "bitcoin" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -And basis ratio - `bitmex_perpetual_basis_ratio`. - -```graphql-explorer -{ - getMetric(metric: "bitmex_perpetual_basis_ratio") { - timeseriesDataJson( - slug: "bitcoin" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/bitmex-derivatives/perpetual-contract-funding-rate/index.md b/src/docs/metrics/bitmex-derivatives/perpetual-contract-funding-rate/index.md deleted file mode 100644 index 0e9f63a8d..000000000 --- a/src/docs/metrics/bitmex-derivatives/perpetual-contract-funding-rate/index.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: BitMEX Perpetual Contract Funding Rate -author: Anatoliy -date: 2020-06-03 -description: Amount of coin/tokens moved on-chain. ---- - -## Description - -The funding rate is a fee paid by one side of the perpetual contract to the other. When the funding rate is positive, Longs pay Shorts. When the funding rate is negative, Shorts pay Longs. - -More details on BitMEX [web-site](https://www.bitmex.com/app/perpetualContractsGuide#Mechanics-of-a-Perpetual-Contract-Market). - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Ratio - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -## Frequency - -[Eight-Hour Intervals](/metrics/details/frequency#eight-hour-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -### SanAPI - -Available under the `bitmex_perpetual_funding_rate` name. - -```graphql-explorer -{ - getMetric(metric: "bitmex_perpetual_funding_rate") { - timeseriesDataJson( - slug: "bitcoin" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "8h" - ) - } -} -``` - -## Full list of metrics - -The full list of Bitmex Perpetual Funding Rate metrics is: - -
    - -Open Metrics List - -- bitmex_perpetual_funding_rate -- bitmex_perpetual_funding_rate_change_1d -- bitmex_perpetual_funding_rate_change_30d -- bitmex_perpetual_funding_rate_change_7d - -
    \ No newline at end of file diff --git a/src/docs/metrics/bitmex-derivatives/perpetual-contract-price/index.md b/src/docs/metrics/bitmex-derivatives/perpetual-contract-price/index.md deleted file mode 100644 index 6a08b0698..000000000 --- a/src/docs/metrics/bitmex-derivatives/perpetual-contract-price/index.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: BitMEX Perpetual Contract Price -author: Anatoliy -date: 2020-06-03 -description: BitMEX Perpetual Contract Price ---- - -## Description -The BitMEX Perpetual Contract Price metric refers to the current trading price of perpetual -contracts offered on the BitMEX cryptocurrency exchange. Perpetual contracts are derivative -financial instruments that closely track the underlying asset's price without an expiry date, -allowing traders to speculate on price movements without actually owning the asset. The BitMEX -Perpetual Contract Price provides insight into market sentiment and liquidity for the corresponding -cryptocurrency pair on [BitMEX's](https://www.bitmex.com/) trading platform. - -BitMEX Perpetual Contract Price metric: -* `bitmex_perpetual_price` - BitMEX Perpetual Contract Price - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Amount in USD - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -### SanAPI - -Available under the `bitmex_perpetual_price` name. - -```graphql-explorer -{ - getMetric(metric: "bitmex_perpetual_price") { - timeseriesDataJson( - slug: "bitcoin" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/bitmex-derivatives/perpetual-contracts-open-interest-value/index.md b/src/docs/metrics/bitmex-derivatives/perpetual-contracts-open-interest-value/index.md deleted file mode 100644 index 3b4988a3e..000000000 --- a/src/docs/metrics/bitmex-derivatives/perpetual-contracts-open-interest-value/index.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: BitMEX Perpetual Contracts Open Interest/Value -author: Anatoliy -date: 2020-06-03 -description: The total number of BitMEX perpetual contracts in existence. ---- - -## Description - -Open Interest shows the amount of open perpetual contracts currently on Bitmex's Project Ticker / USD trading - pairs. When open - interest reaches unusually high numbers, it can precede increased volatility in the coin's price. - -Open Value shows the value of the corresponding open interest in Satoshis (XBT/BTC). - -More details on BitMEX [web-site](https://www.bitmex.com/app/contract/XBTUSD) - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Dollars - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -### SanAPI - Open Interest - -Available under the `bitmex_perpetual_open_interest` name. - -```graphql-explorer -{ - getMetric(metric: "bitmex_perpetual_open_interest") { - timeseriesDataJson( - slug: "bitcoin" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - - ---- - -### SanAPI - Open Value - -Available under the `bitmex_perpetual_open_value` name. - -```graphql-explorer -{ - getMetric(metric: "bitmex_perpetual_open_value") { - timeseriesDataJson( - slug: "bitcoin" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/bitmex-derivatives/price-index/index.md b/src/docs/metrics/bitmex-derivatives/price-index/index.md deleted file mode 100644 index d0fe8662c..000000000 --- a/src/docs/metrics/bitmex-derivatives/price-index/index.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: BitMEX Price Index -author: Anatoliy -date: 2020-06-03 -description: Average asset price calculated using a number of data sources. ---- - -## Description - -BitMEX indices are composite, meaning that they are calculated using a number of data sources. BitMEX currently uses 9 constituents: Binance, Bitstamp, Bittrex, Coinbase, Gemini, Huobi, Itbit, Kraken, Poloniex. Aiming to be representative of the underlying asset’s market consensus price, each BitMEX index is calculated as a weighted average of the Last Price for each constituent exchange. - -More details on BitMEX [web-site](https://www.bitmex.com/app/indices). - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Dollars - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -### SanAPI - -Available under the `bitmex_composite_price_index` name. - -```graphql-explorer -{ - getMetric(metric: "bitmex_composite_price_index") { - timeseriesDataJson( - slug: "bitcoin" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/btc-and-s-and-p-500-price-divergence/index.md b/src/docs/metrics/btc-and-s-and-p-500-price-divergence/index.md deleted file mode 100644 index d5afcce56..000000000 --- a/src/docs/metrics/btc-and-s-and-p-500-price-divergence/index.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: BTC and S&P 500 Price Divergence -author: Filip -date: 2025-03-01 -description: BTC and S&P 500 Price Divergence Metric ---- - -## Description -The BTC vs. S&P 500 price divergence metric helps track how these two assets move -relative to each other. It measures the difference between their scaled prices, -showing whether Bitcoin is outperforming or lagging behind the stock market. When the -metric rises, it means Bitcoin is either dropping more than the S&P 500 or the S&P is -rallying harder than BTC. When it falls, the opposite is true—Bitcoin is holding up -better or even outpacing the stock market. This can be useful for spotting shifts in -risk appetite, market sentiment, or broader macro trends affecting both assets. - - -BTC and S&P 500 Price Divergence Metric: -* `btc_s_and_p_price_divergence` - Difference between the scaled prices of the S&P 500 and Bitcoin - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Divergence factor - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -Available for `bitcoin` - ---- - -### SanAPI - -Available under name: `btc_s_and_p_price_divergence` - - -```graphql-explorer -{ - getMetric(metric: "btc_s_and_p_price_divergence"){ - timeseriesDataJson( - slug: "bitcoin" - from: "2025-01-01T00:00:00Z" - to: "2025-01-10T00:00:00Z" - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/circulation/index.md b/src/docs/metrics/circulation/index.md deleted file mode 100644 index 1ca52cad5..000000000 --- a/src/docs/metrics/circulation/index.md +++ /dev/null @@ -1,150 +0,0 @@ ---- -title: Circulation -author: Santiment Team -date: 2020-04-06 -description: Number of unique coins/tokens being used during a time period ---- - -## Definition - -Circulation shows number of unique coins/tokens being used during a time period. - -Examples: - -- `circulation_1d` - Shows how many unique coins/tokens were transacted during a - day. If one token/coin changes hands 5 times on a given day, it will be - counted once by the token circulation, but 5 times by the transaction volume. -- `circulation_1y` - Shows how many unique coins/tokens were transacted for the - past 1 year. - -There are also circulation metrics `circulation_usd_*` that represent the USD value of all -unique coins or tokens that were transacted within a single day. Unlike simple circulation -metrics that count the unique cryptocurrencies moved, `circulation_usd_*` metrics convert -the quantity of these coins or tokens into their equivalent value in USD. - -![circulation for bitcoin](circulation-bitcoin.png) - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -Token/Coin amount - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Timebound - -[Timebound Metrics](/metrics/details/timebound) - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these -assets]() - -> **Note:** `circulation` metric and all circulation metrics are -> available for the same set of assets. - ---- - -## SanAPI - -Available under the `circulation` and `circulation_` names. - -Gets the total amount of tokens that have been sent at least once during each -day for given time period. Projects are referred to by a unique identifier -(slug). This metric is calculated daily, so the interval should be selected -accordingly. - -```graphql-explorer -{ - getMetric(metric: "circulation_1d") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -Without any suffixes like \_1d, the metric returns the number of coins/tokens -ever seen up until now, which is equal to the total supply at that datetime. - -```graphql-explorer -{ - getMetric(metric: "circulation") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -The full list of Circulation metrics is: - -
    - -Open Metrics List - -- circulation -- circulation_10y -- circulation_180d -- circulation_1d -- circulation_2y -- circulation_30d -- circulation_365d -- circulation_3y -- circulation_5y -- circulation_60d -- circulation_7d -- circulation_90d -- circulation_change_1d -- circulation_change_30d -- circulation_change_7d -- circulation_180d_change_1d -- circulation_180d_change_30d -- circulation_180d_change_7d -- circulation_usd_180d -- circulation_usd_180d_change_1d -- circulation_usd_180d_change_30d -- circulation_usd_180d_change_7d - -
    diff --git a/src/docs/metrics/community-messages-count/index.md b/src/docs/metrics/community-messages-count/index.md deleted file mode 100644 index 20ab2ce18..000000000 --- a/src/docs/metrics/community-messages-count/index.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Community Messages Count -author: Vlad -date: 2025-07-10 -description: Number of messages in a project's community chat server -# REF metrics-hub/metricshub/social_volume_unit.py ---- - -## Definition - -Community Messages Count is build on top of the [Social Data](/metrics/details/social-data). - -Community Messages Count returns the number of messages written in the -asset's own community chat (telegram server) or subreddit (reddit). - -Currently `telegram` and `reddit` are supported. - -We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. - -Experimental metrics, might undergo changes if a future. - - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Amount of documents that mention the given text pattern. - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Social Data Latency](/metrics/details/latency#social-data-latency) - ---- - -## Available Assets - -Available for [these -assets]() - -> Note: `community_messages_count_telegram`, `community_messages_count_reddit` metric are available for the same set of assets. - ---- - -## SanAPI - -Available under the `community_messages_count_reddit` and `community_messages_count_telegram` names. - -```graphql-explorer -{ - getMetric(metric: "community_messages_count_reddit") { - timeseriesDataJson( - selector: { slug: "solana" } - from: "2025-01-01T00:00:00Z" - to: "2025-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -The full list of Community Message Count metrics is: - -
    - -Open Metrics List - -- community_messages_count_telegram -- community_messages_count_reddit - -
    diff --git a/src/docs/metrics/community-social-volume/index.md b/src/docs/metrics/community-social-volume/index.md deleted file mode 100644 index 743e17917..000000000 --- a/src/docs/metrics/community-social-volume/index.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Community Social Volume -author: Vlad -date: 2025-10-24 -description: Number of messages in a project's community chat server -# REF metrics-hub/metricshub/social_volume_unit.py ---- - -## Definition - -Community Social Volume is build on top of the [Social Data](/metrics/details/social-data). - -Community Social Volume returns social volume of the asses in the -asset's own community chat (telegram server) or subreddit (reddit). - -Currently `telegram` and `reddit` are supported. - -We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. - - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Amount of documents that mention the given text pattern. - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Social Data Latency](/metrics/details/latency#social-data-latency) - ---- - -## Available Assets - -Available for [these -assets]() - -> Note: `community_social_volume_telegram`, `community_social_volume_reddit` metrics - ---- - -## SanAPI - -Available under the `community_social_volume_telegram` and `community_social_volume_reddit` names. - -```graphql-explorer -{ - getMetric(metric: "community_social_volume_reddit") { - timeseriesDataJson( - selector: { slug: "solana" } - from: "2025-01-01T00:00:00Z" - to: "2025-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -The full list of Community Message Count metrics is: - -
    - -Open Metrics List - -- community_social_volume_telegram -- community_social_volume_reddit - -
    diff --git a/src/docs/metrics/contract-interacting-address-count/index.md b/src/docs/metrics/contract-interacting-address-count/index.md deleted file mode 100644 index 9304934bb..000000000 --- a/src/docs/metrics/contract-interacting-address-count/index.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Interacting Address Count -author: Yury -date: 2022-04-21 -description: Get interacting address count for a chain address / contract ---- - -## Definition - -Get interacting address count for a chain address / contract - -![Example of usage **interacting address count** on Sanbase](conract_interacting_address.png) - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## API - -Available under the `contract_interacting_addresses_count` name: - -```graphql-explorer -{ - getMetric(metric: "contract_interacting_addresses_count") { - timeseriesDataJson( - selector: { - contractAddress: "0x857086e5e3dc7bbc98edb1639b4ffd96a667d75a" - } - from: "utc_now-90d" - to: "utc_now-60d" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/contract-transactions-count/index.md b/src/docs/metrics/contract-transactions-count/index.md deleted file mode 100644 index 72801c73a..000000000 --- a/src/docs/metrics/contract-transactions-count/index.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Transactions Count -author: Yury -date: 2022-04-21 -description: Get transactions count for a chain address / contract ---- - -## Definition - -Get transactions count for a chain address / contract - -![Example of usage **transactions count** on Sanbase](conract_interacting_address.png) - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## API - -Available under the `contract_transactions_count` name: - -```graphql-explorer -{ - getMetric(metric: "contract_transactions_count") { - timeseriesDataJson( - selector: {contractAddress: "0x857086e5e3dc7bbc98edb1639b4ffd96a667d75a"} - from: "utc_now-90d" - to: "utc_now-60d", - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/crvusd-savings/index.md b/src/docs/metrics/crvusd-savings/index.md deleted file mode 100644 index 51cd87296..000000000 --- a/src/docs/metrics/crvusd-savings/index.md +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: CrvUSD Savings -author: Filip -date: 2025-09-01 -description: CrvUSD Savings Metrics ---- - -## Description -CrvUSD Savings is a feature that allows users to deposit crvUSD and earn yield directly -on their stablecoin holdings. Savings returns are generated from lending markets and -protocol revenue, offering a low-effort way to put idle crvUSD to work. This provides -users with a safer, liquid option to grow their assets while supporting the Curve ecosystem. - - -CrvUSD Savings Metrics: -* `crvusd_savings_total_supplied` - Total supply of crvUSD in the savings contract -* `crvusd_savings_distributions` - Amount of crvUSD rewards distributed -* `crvusd_savings_apy` - Interest rate paid for depositing crvUSD - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -* `crvusd_savings_total_supplied` and `crvusd_savings_distributions`- Amount of crvUSD -* `crvusd_savings_apy` - Percentage - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for `crvusd` - ---- - -### SanAPI - -Total supplied metric: `crvusd_savings_total_supplied` - -```graphql-explorer -{ - getMetric(metric: "crvusd_savings_total_supplied"){ - timeseriesDataJson( - slug: "crvusd" - from: "2025-09-01T00:00:00Z" - to: "2025-09-07T00:00:00Z" - interval: "1d") - } -} -``` - -Distributions metric: `crvusd_savings_distributions` - -```graphql-explorer -{ - getMetric(metric: "crvusd_savings_distributions"){ - timeseriesDataJson( - slug: "crvusd" - from: "2025-09-01T00:00:00Z" - to: "2025-09-20T00:00:00Z" - interval: "1d") - } -} -``` - -Savings APY metric: `crvusd_savings_apy` - -```graphql-explorer -{ - getMetric(metric: "crvusd_savings_apy"){ - timeseriesDataJson( - slug: "crvusd" - from: "2025-09-01T00:00:00Z" - to: "2025-09-20T00:00:00Z" - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/daily-active-addresses/index.md b/src/docs/metrics/daily-active-addresses/index.md deleted file mode 100644 index be466eead..000000000 --- a/src/docs/metrics/daily-active-addresses/index.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Daily Active Addresses -author: Santiment Team -date: 2020-04-06 -description: Number of unique addresses participating in transactions during one day -# References -# -# Source code for metric computation: -# REF clickhouse-tables/daily_metrics/jobs/daily_active_addresses_job -# -# Sansheets reference -# REF google-spreadsheets-addon/ -# -# SanAPI reference -# -# REF sanbase2/lib/sanbase/clickhouse/metric ---- - -## Definition - -The number of distinct addresses that participated in a transfer for the given -asset in any given day. Each address is counted only once for the day, regardless of the amount of transfers it participates in. Both the -senders and the receivers of the asset are counted. - -![Daily Active Addresses for Bitcoin](bitcoin-daa.png) - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Non-negative number of addresses - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -## API - -Available under the `daily_active_addresses` name. - -```graphql-explorer -{ - getMetric(metric: "daily_active_addresses") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/daily-active-deposits/index.md b/src/docs/metrics/daily-active-deposits/index.md deleted file mode 100644 index abf27d527..000000000 --- a/src/docs/metrics/daily-active-deposits/index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Daily Active Deposits -author: Santiment Team -date: 2020-04-06 - ---- - -The article was moved to [Active Deposits](/metrics/active-deposits) page. \ No newline at end of file diff --git a/src/docs/metrics/daily-aggregated-financial-metrics/index.md b/src/docs/metrics/daily-aggregated-financial-metrics/index.md deleted file mode 100644 index cf4bc522e..000000000 --- a/src/docs/metrics/daily-aggregated-financial-metrics/index.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Daily Aggregated Financial Metrics in USD -author: Ivan -date: 2024-03-26 -description: Daily Aggregated OHLC Price, Trading Volume and Marketcap ---- - -## Definition - -The following metrics are computed by applying an aggregation of all the values of a metric -in a given day. - -- daily_avg_marketcap_usd -- daily_avg_price_usd -- daily_closing_marketcap_usd -- daily_closing_price_usd -- daily_high_price_usd -- daily_low_price_usd -- daily_opening_price_usd -- daily_trading_volume_usd - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Amount in USD - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[Daily Metrics Latency](/metrics/details/latency#daily-metrics-latency) - ---- - -## Available Assets - -Available Assets for [daily_avg_marketcap_usd](https://api.santiment.net/graphiql?query=%7B%0A%20%20getMetric(metric%3A%20%22daily_avg_marketcap_usd%22)%7B%0A%20%20%20%20metadata%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D) - -Use the same API call to check the available metrics for the other metrics. - ---- - -## SanAPI - -```graphql-explorer -{ - getMetric(metric: "daily_closing_price_usd") { - timeseriesDataJson( - slug: "ethereum" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/decentralized-exchange-metrics/dex_list.md b/src/docs/metrics/decentralized-exchange-metrics/dex_list.md deleted file mode 100644 index 3da2730c3..000000000 --- a/src/docs/metrics/decentralized-exchange-metrics/dex_list.md +++ /dev/null @@ -1,30 +0,0 @@ -## List of Available Decentralized Exchanges on Ethereum: - -``` -balancer -bamboodefi -bancor_v3 -chickenswap -clipper -curve -defiplaza -defiswap -dodo -elk -empiredex -kwikswap -kyberswap -mooniswap -pancake_v3 -radioshack -saddle -shibaswap -standardtech -sumswap_v2 -sushi_v2 -synapse -uniswap_v2 -uniswap_v3 -uniswap_v4 -youswap -``` diff --git a/src/docs/metrics/decentralized-exchange-metrics/index.md b/src/docs/metrics/decentralized-exchange-metrics/index.md deleted file mode 100644 index 95563da18..000000000 --- a/src/docs/metrics/decentralized-exchange-metrics/index.md +++ /dev/null @@ -1,198 +0,0 @@ ---- -title: Decentralized Exchange Metrics -author: Maksim Razhev, Serge Nedashkovsky, Filip -date: 2021-01-25 -description: DEX Metrics ---- - -> DEX metrics have been migrated to a new framework, with new data starting from May 5, 2022. -> Data between February 9, 2017 and May 5, 2022, is sourced from the old -> framework ([Available DEXs for old framework](/metrics/decentralized-exchange-metrics/old_dex_list)). -> **Although older data remains accessible through the API, we do not recommend its use.** - -## Description -Decentralized exchanges, or DEXs, revolutionize cryptocurrency trading by eliminating the need for -a central authority. Operating on blockchain technology, these exchanges empower users with direct -peer-to-peer transactions, enhancing security and control over funds. DEXs embody the principles of -transparency and trustlessness, offering users a more resilient and inclusive financial ecosystem. - -List of decentralized exchanges: [Available Decentralized Exchanges](/metrics/decentralized-exchange-metrics/dex_list). -Additionally, there is a label `unknown` for DEXs that haven't been labeled. - -Metrics are divided into four groups: - -#### Trade volume in USD segmented by DEX: -* `total_trade_volume_by_dex` - Total trading volume in USD -* `eth_based_trade_volume_by_dex` - Trading volume in USD involving ETH-based tokens[1](#eth-based-tokens) -* `stablecoin_trade_volume_by_dex` - Trading volume in USD involving Stablecoins[2](#usd-based-stablecoins) -* `other_trade_volume_by_dex` - The trading volume in USD involving tokens not falling into -any of the above categories - -#### Number of trades segmented by DEX: -* `total_trade_amount_by_dex` - Number of all trades -* `eth_based_trade_amount_by_dex` - Number of trades involving ETH-Based tokens[1](#eth-based-tokens) -* `stablecoin_trade_amount_by_dex` - Number of trades involving Stablecoins[2](#usd-based-stablecoins) -* `other_trade_amount_by_dex` - Number of trades involving tokens not falling into -any of the above categories - -#### Trade volume segmented by DEX and asset: -* `eth_trade_volume_by_token` - Trading volume in ETH between ERC20 token and ETH-Based tokens[1](#eth-based-tokens) -* `stablecoin_trade_volume_by_token` - Trading volume in USD between ERC20 token and Stablecoins[2](#usd-based-stablecoins) - -#### Token price in ETH segmented by DEX and asset: -* `token_eth_price_by_dex_5m` - Token price in ETH segmented by DEX for trades between given ERC20 token -and ETH-based tokens [1](#eth-based-tokens) - ---- -### ETH Based Tokens -ETH, WETH, ETH Kyber, ETHWrapped and Bancor ETH. -### USD-based Stablecoins -Tether, USD coin, DAI, Binance USD, TrueUSD and other stablecoins. - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -* `total_trade_volume_by_dex`, `eth_based_trade_volume_by_dex`, `stablecoin_trade_volume_by_dex`, -`other_trade_volume_by_dex` - Amount in USD -* `total_trade_amount_by_dex`, `eth_based_trade_amount_by_dex`, `stablecoin_trade_amount_by_dex`, -`other_trade_amount_by_dex` - Number of trades -* `eth_trade_volume_by_token` - Amount in ETH -* `stablecoin_trade_volume_by_token` - Amount in stablecoins -* `token_eth_price_by_dex_5m` - Amount in ETH - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -* `total_trade_volume_by_dex`, `eth_based_trade_volume_by_dex`, `stablecoin_trade_volume_by_dex`, - `other_trade_volume_by_dex`: multi-collateral-dai -* `total_trade_amount_by_dex`, `eth_based_trade_amount_by_dex`, `stablecoin_trade_amount_by_dex`, - `other_trade_amount_by_dex`: multi-collateral-dai -* `eth_trade_volume_by_token`, `stablecoin_trade_volume_by_token`, `token_eth_price_by_dex_5m`: [ERC20 assets]() - -> **Note:** `<>_trade_volume_by_dex` and `<>_trade_amount_by_dex` metrics are not asset-based. -> They are related to DEX data and `multi-collateral-dai` is placeholder for the data. - ---- - -### SanAPI - -Trade volume metrics: `total_trade_volume_by_dex`, `eth_based_trade_volume_by_dex`, -`stablecoin_trade_volume_by_dex` and `other_trade_volume_by_dex` - -```graphql-explorer -{ - getMetric(metric: "total_trade_volume_by_dex") { - timeseriesDataJson( - selector: { - slug: "multi-collateral-dai" - owner: "bancor_v3" - label: "decentralized_exchange" - } - from: "2023-01-01T00:00:00Z" - to: "2023-01-07T00:00:00Z" - interval: "5m" - ) - } -} -``` - -Number of trades metrics: `total_trade_amount_by_dex`, `eth_based_trade_amount_by_dex`, -`stablecoin_trade_amount_by_dex` and `other_trade_amount_by_dex` - -```graphql-explorer -{ - getMetric(metric: "total_trade_amount_by_dex") { - timeseriesDataJson( - selector: { - slug: "multi-collateral-dai" - owner: "sushi_v2" - label: "decentralized_exchange" - } - from: "2023-01-01T00:00:00Z" - to: "2023-01-07T00:00:00Z" - interval: "5m" - ) - } -} -``` - -Trade volume between ERC20 token and ETH-based tokens: `eth_trade_volume_by_token` - -```graphql-explorer -{ - getMetric(metric: "eth_trade_volume_by_token") { - timeseriesDataJson( - selector: { - slug: "chainlink" - owner: "uniswap_v2" - label: "decentralized_exchange" - } - from: "2023-01-01T00:00:00Z" - to: "2023-01-07T00:00:00Z" - interval: "5m" - ) - } -} -``` - -Trade volume between ERC20 token and stablecoins: `stablecoin_trade_volume_by_token` - -```graphql-explorer -{ - getMetric(metric: "stablecoin_trade_volume_by_token") { - timeseriesDataJson( - selector: { - slug: "wrapped-bitcoin" - owner: "uniswap_v3" - label: "decentralized_exchange" - } - from: "2023-01-01T00:00:00Z" - to: "2023-01-07T00:00:00Z" - interval: "5m" - ) - } -} -``` - -Token ETH Price by DEX: `token_eth_price_by_dex_5m` - -```graphql-explorer -{ - getMetric(metric: "token_eth_price_by_dex_5m") { - timeseriesDataJson( - selector: { - slug: "usd-coin" - owner: "uniswap_v3" - label: "decentralized_exchange" - } - from: "2023-01-01T00:00:00Z" - to: "2023-01-07T00:00:00Z" - interval: "5m" - ) - } -} -``` \ No newline at end of file diff --git a/src/docs/metrics/decentralized-exchange-metrics/old_dex_list.md b/src/docs/metrics/decentralized-exchange-metrics/old_dex_list.md deleted file mode 100644 index d9a73059d..000000000 --- a/src/docs/metrics/decentralized-exchange-metrics/old_dex_list.md +++ /dev/null @@ -1,26 +0,0 @@ -## List of Available Decentralized Exchanges (old framework): - -``` -0x_v1 -0x_v2 -0x_v3 -Airswap -Balancer -Bancor -Curve -DDEX -DEXTop -Etherdelta -Gnosis -IDEX -KyberNetwork -OasisDEX -Synthetix -TokenStore -Uniswap -UniswapV2 -dYdX -sushiswap -``` - -> Note: DEX metrics have been migrated to a new framework. \ No newline at end of file diff --git a/src/docs/metrics/deprecated-metrics/deprecated-defi-metrics.md b/src/docs/metrics/deprecated-metrics/deprecated-defi-metrics.md deleted file mode 100644 index 4c4192e9f..000000000 --- a/src/docs/metrics/deprecated-metrics/deprecated-defi-metrics.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: Deprecated DeFi -author: Serge Nedashkovsky, Maksim Razhev, Anatoliy -date: 2020-12-24 -description: DeFi Metrics ---- - - -Note: The underlying data for metrics is no longer supported. -**Although data remains accessible through the API, we do not recommend its use.** - - -### Description - -Some of the DeFi-related metrics have their own pages: - -**MakerDAO Special Metrics**: -[MakerDAO metrics](/metrics/lending-and-borrowing-protocols/makerdao/) - -**Metrics related to DeFi protocols**: -[Flow and balance metrics](/metrics/labeled-balance) - -On this page the following metrics are defined: - -* `defi_total_value_locked_usd` - Shows total value locked in DeFi projects, available in USD . -* `defi_total_value_locked_eth` - Shows total value locked in DeFi projects, available in ETH. - ---- - -### Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -### Measuring Unit - -Amount of USD/ETH - ---- - -### Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -### Frequency - -[Hourly Intervals](/metrics/details/frequency#hourly-frequency) - ---- - -### Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -### Available Assets - -Available for `ethereum`. - ---- - -## SanAPI - -Amount of total locked ETH coins is available under the `defi_total_value_locked_eth` name. - -```graphql-explorer -{ - getMetric(metric: "defi_total_value_locked_eth") { - timeseriesDataJson( - slug: "ethereum" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1h" - ) - } -} -``` - -Denominated in USD - `defi_total_value_locked_usd`. - -```graphql-explorer -{ - getMetric(metric: "defi_total_value_locked_usd") { - timeseriesDataJson( - slug: "ethereum" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1h" - ) - } -} -``` diff --git a/src/docs/metrics/deprecated-metrics/deprecated-makerdao-metrics.md b/src/docs/metrics/deprecated-metrics/deprecated-makerdao-metrics.md deleted file mode 100644 index 35ff4b76a..000000000 --- a/src/docs/metrics/deprecated-metrics/deprecated-makerdao-metrics.md +++ /dev/null @@ -1,163 +0,0 @@ ---- -title: Deprecated MakerDAO Metrics -author: Maksim Razhev, Serge Nedashkovsky, Filip -date: 2021-01-28 -description: Deprecated MakerDAO Metrics ---- - - -Note: MakerDAO metrics have been migrated to a new framework. -**Although older data remains accessible through the API, we do not recommend its use.** -The old metrics will stop being computed and they will be removed. - - -## Description - -Metrics related to MakerDAO protocols. - -**Single-Collateral DAI**: - -* `scd_locked_token` - The volume of WETH locked in Single-Collateral DAI contract. -* `scd_collat_ratio` - Single-Collateral DAI Collateralization Ratio - -**Multi-Collateral DAI**: - -* `mcd_locked_token` - The volume of collateral locked in Multi-Collateral DAI contracts, -measured by a token[1] -* `mcd_liquidation` - Amount of liquidated tokens[2] -* `mcd_erc20_supply` - DAI ERC20 token total supply -* `mcd_supply` - The total amount of Multi-Collareral DAI tokens: DAI ERC20 Supply plus DAI in DSR -* `mcd_collat_ratio_weth` - These metrics show the collateralization ratio of MCD collateral tokens. - -> [1]: Please switch to the new metric `makerdao_total_supplied_usd`, -> [2]: Please switch to the new metric `makerdao_action_liquidations_usd` - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -The following metrics' unit is amount of coins: -- `mcd_locked_token` -- `scd_locked_token` -- `mcd_erc20_supply` -- `mcd_supply` - -The rest: -- MakerDAO contract parameter values ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -The following metrics have [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) -- `mcd_supply` - [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - -The rest of the metrics have [Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets -Collateral assets of Single-Collateral DAI: -* `weth` - -Collateral assets of Multi-Collateral DAI: -* `weth` -* `basic-attention-token` -* `kyber-network` -* `0x` -* `yearn-finance` -* `wrapped-bitcoin` -* `chainlink` -* `loopring` -* `weth-b` -* `decentraland` -* `balancer` -* `compound` - -USD-based Stablecoin collaterals: -* `tether` -* `paxos-standard-token` -* `usdc-b` -* `dai` -* `trueusd` -* `gemini-dollar` - -Assets available for metrics: -* `scd_locked_token`, `mcd_collat_ratio_weth`, `scd_collat_ratio` - `weth` -* `daily_dai_collat_ratio_stablecoin` - USD-based stablecoin collaterals -* `daily_dai_collat_ratio_wbtc` - `wrapped-bitcoin` -* `mcd_erc20_supply`, `mcd_supply`, `msd_dsr` - `multi-collateral-dai` ---- - -### SanAPI - -Token Locked in Multi-Collateral CDPs - -```graphql-explorer -{ - getMetric(metric: "mcd_locked_token") { - timeseriesDataJson( - slug: "weth" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d") - } -} -``` - -DAI ERC20 token total supply: -```graphql-explorer -{ - getMetric(metric: "mcd_erc20_supply") { - timeseriesDataJson( - slug: "multi-collateral-dai" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d") - } -} -``` - -DAI Total supply: -```graphql-explorer -{ - getMetric(metric: "mcd_supply") { - timeseriesDataJson( - slug: "multi-collateral-dai" - from: "2020-04-02T00:00:00Z" - to: "2020-04-03T00:00:00Z" - interval: "5m") - } -} -``` - -SCD Collateral Ratio: -```graphql-explorer -{ - getMetric(metric: "scd_collat_ratio") { - timeseriesDataJson( - slug: "weth" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d") - } -} -``` - diff --git a/src/docs/metrics/deprecated-metrics/deprecated-social-metrics.md b/src/docs/metrics/deprecated-metrics/deprecated-social-metrics.md deleted file mode 100644 index 2697e4731..000000000 --- a/src/docs/metrics/deprecated-metrics/deprecated-social-metrics.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Deprecated Social Metrics -author: Ivan -date: 2024-05-13 ---- - -## Overview - -The social metrics are computed for each media source - twitter, telegram, etc. -For some time the Twitter source was split into multiple sources - `twitter_nft`, -`twitter_news` and `twitter_crypto`. -There is also a combined `twitter` source, which includes data from all sub-sources. -The metrics for these sub-sources have not been computed since April 2023. -Since May 9 2024, the metrics for these sub-sources have been completely removed from the API. - -## Deprecated metrics - -- sentiment_volume_consumed_twitter_crypto -- sentiment_volume_consumed_twitter_news -- sentiment_volume_consumed_twitter_nft -- sentiment_balance_twitter_crypto -- sentiment_balance_twitter_news -- sentiment_balance_twitter_nft -- sentiment_negative_twitter_crypto -- sentiment_negative_twitter_news -- sentiment_negative_twitter_nft -- sentiment_positive_twitter_crypto -- sentiment_positive_twitter_news -- sentiment_positive_twitter_nft -- social_volume_newsapi_crypto -- social_volume_twitter_crypto -- social_volume_twitter_news -- social_volume_twitter_nft -- social_dominance_newsapi_crypto -- social_dominance_twitter_crypto_1h_moving_average -- social_dominance_twitter_crypto_24h_moving_average -- social_dominance_twitter_news_1h_moving_average -- social_dominance_twitter_news_24h_moving_average -- social_dominance_twitter_nft_1h_moving_average -- social_dominance_twitter_nft_24h_moving_average -- social_dominance_twitter_crypto -- social_dominance_twitter_news -- social_dominance_twitter_nft diff --git a/src/docs/metrics/deprecated-metrics/deprecated-uniswap-metrics.md b/src/docs/metrics/deprecated-metrics/deprecated-uniswap-metrics.md deleted file mode 100644 index ec9fc1c05..000000000 --- a/src/docs/metrics/deprecated-metrics/deprecated-uniswap-metrics.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Deprecated Uniswap Airdrop Metrics -author: Filip -date: 2024-04-01 ---- - - -Note: The Airdrop occurred in September 2020, but there are no more claims. -**Although data remains accessible through the API, we do not recommend its use.** - - -## Definition - -The Uniswap Airdrop Metrics provide insights into the distribution of tokens resulting from the Uniswap -protocol's decentralized exchange activity. This airdrop, which took place in September 2020, allocated -tokens to users based on their past interactions with the Uniswap platform. - -Uniswap Airdrop Metrics: -- `uniswap_total_lp_claims_amount` - The amount of tokens claimed by both users and liquidity providers up to that point in time -- `uniswap_user_claims_count` - The amount of claims by users -- `uniswap_user_claims_amount` - The amount of tokens claimed given to users -- `uniswap_lp_claims_amount` - The amount of tokens claimed given to liquidity providers -- `uniswap_total_claims_percent` - The percentage of claimed tokens -- `uniswap_total_claims_amount` - The amount of tokens claimed by both users and liquidity providers up to that point in time -- `uniswap_top_claimers` - The biggest claimers sorted by amount they claimed in a given period -- `uniswap_claims_amount` - The amount of tokens claimed by both users and liquidity providers -- `uniswap_claims_count` - The amount of claims claimed by both users and liquidity providers -- `uniswap_total_user_claims_amount` - The amount of tokens claimed by users up to that point in time -- `uniswap_lp_claims_count` - The amount of claims by liquidity providers -- `uniswap_total_claims_count` - The total amount of claims by both users and liquidity providers up to that point in time -- `uniswap_total_user_claims_count` - The total amount of claims by users up to that point in time -- `uniswap_total_lp_claims_count` - The total amount of claims by liquidity providers up to that point in time - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -Metrics that have `amount` in name represent the number of tokens. -Metrics that have `count` in name represent the number of claims. -Metrics that have `percent` in name represent the percentage. - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-minute frequency](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -`uniswap` - ---- - -## API - -```graphql-explorer -{ - getMetric(metric: "uniswap_claims_amount") { - timeseriesDataJson( - slug: "uniswap" - from: "2020-09-15T00:00:00Z" - to: "2020-10-01T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/deprecated-metrics/index.md b/src/docs/metrics/deprecated-metrics/index.md deleted file mode 100644 index afe055053..000000000 --- a/src/docs/metrics/deprecated-metrics/index.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Deprecated Metrics -author: Filip -date: 2024-04-01 ---- - -## Deprecated Metrics - - -Deprecated metrics are ones that our system has designated as being out of date or obsolete. -These metrics are no longer actively supported or recommended for use in current analysis or -reporting. They represent historical data points that may not accurately reflect current trends -or insights. While the data for deprecated metrics still exists within our system, we do not -recommend using them due to their deprecated status. Relying on deprecated metrics can lead to inaccurate -analysis and decision-making, as they may no longer align with the most up-to-date information and -methodologies. It's crucial for users to be aware of the deprecation status of these metrics and to -transition to alternative, more relevant metrics for their analysis needs. - - -## Why Do We Deprecate Metrics? - -Metrics become deprecated for various reasons, reflecting the dynamic nature of our systems and data -analysis practices. Here's why certain metrics may be marked as deprecated: - -1. **Adaptation to Changing Needs**: Over time, shifts in business priorities, market dynamics, or user -requirements may render certain metrics obsolete or redundant. Metrics that no longer serve a meaningful -purpose due to changes in events, processes, or stakeholder demands are deprecated to streamline analysis -efforts and maintain focus on metrics that drive actionable insights. - -2. **Improving Data Integrity**: Deprecating metrics helps maintain data integrity by discouraging the -use of outdated or unreliable indicators that may skew analyses or mislead decision-making. By phasing -out obsolete metrics, we uphold the quality and accuracy of our analytical outputs, ensuring that -stakeholders can confidently rely on the insights derived from our data. - -3. **Evolution of Data Sources**: As our data infrastructure advances, we often transition to new and improved -data sources that offer enhanced accuracy, granularity, or coverage. Metrics tied to outdated data sources -become deprecated as we migrate towards more reliable sources, ensuring that our analyses are based on -the most up-to-date and comprehensive information available. - -## Why Do We Keep Them? - -While deprecated metrics may no longer be actively supported, it's essential to stay informed about their -deprecation to ensure accurate and relevant analysis. By understanding why metrics are deprecated and -identifying suitable replacements, you can maintain the integrity and effectiveness of your data analysis -processes. - -## List Of Deprecated Metrics - - -- [Deprecated MakerDAO Metrics](/metrics/deprecated-metrics/deprecated-makerdao-metrics) - -MakerDAO metrics have been migrated to a new framework -- [Deprecated Defi Metrics](/metrics/deprecated-metrics/deprecated-defi-metrics) - The underlying data for metrics is -no longer supported -- [Deprecated Uniswap Airdrop Metrics](/metrics/deprecated-metrics/deprecated-uniswap-metrics) - The Airdrop -occurred in September 2020, but there are no more claims -- [Deprecated Social Metrics](/metrics/deprecated-metrics/deprecated-social-metrics) - Some of the socual sources were combined into one. - diff --git a/src/docs/metrics/deribit-derivatives/deribit-perpetual-funding-rate/index.md b/src/docs/metrics/deribit-derivatives/deribit-perpetual-funding-rate/index.md deleted file mode 100644 index e803e7d97..000000000 --- a/src/docs/metrics/deribit-derivatives/deribit-perpetual-funding-rate/index.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Deribit Contract Funding Rate -author: Lyudmil -date: 2022-02-08 -description: Amount of coin/tokens moved on-chain. ---- - -## Description - -The Deribit perpetual contract features a continuous measurement of the difference between the mark price of the contract and the Deribit BTC Index. The percentage difference between these two price levels is the basis for the 8-hourly funding rate that is applied to all outstanding perpetual contracts. - -More details on Deribit [web-site](https://www.deribit.com/kb/futures). - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Ratio - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Hourly Intervals](/metrics/details/frequency#hourly-frequency) - ---- - -## Latency - -[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -### SanAPI - -Available under the `deribit_perpetual_funding_rate` name. - -```graphql-explorer -{ - getMetric(metric: "deribit_perpetual_funding_rate") { - timeseriesDataJson( - slug: "bitcoin" - from: "2021-04-01T00:00:00Z" - to: "2021-04-07T00:00:00Z" - interval: "1h" - ) - } -} -``` diff --git a/src/docs/metrics/deribit-derivatives/index.md b/src/docs/metrics/deribit-derivatives/index.md deleted file mode 100644 index 9d5b08af3..000000000 --- a/src/docs/metrics/deribit-derivatives/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Deribit Derivatives -author: Santiment Team -date: 2023-06-01 ---- - -[Deribit](https://www.deribit.com/) is a derivatives platform for traders of all backgrounds and trading styles. - -- [Deribit Perpetual Contract Funding Rate](/metrics/deribit-derivatives/deribit-perpetual-funding-rate) diff --git a/src/docs/metrics/details/access.md b/src/docs/metrics/details/access.md deleted file mode 100644 index f0f5ded83..000000000 --- a/src/docs/metrics/details/access.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Access -author: Ivan -date: 2021-03-22 ---- - -- [Free Access](#free-access) -- [Restricted Access](#restricted-access) - -## Free Access - -Metrics with free access have full historical and realtime data available -in the `Free` plan and all paid plans. - -## Restricted Access - -Metrics with restricted access have partial access to the metric data. -The restrictions depend both on the product used (Sanbase, SanAPI) and the -subscription plan used (Free, Basic, Pro, etc.). - -Some of the metrics that are available on Sanbase might not be available in the -Free and Basic SanAPI plans, but only in Pro and higher. - -## Detailed Access Restrictions per product/plan - -Detailed access restrictions per product and plan can be found here: - -- [SanAPI Free](https://api.santiment.net/graphiql?query=%7B%0A%20%20getAccessRestrictions(plan%3A%20FREE%2C%20product%3A%20SANAPI)%20%7B%0A%20%20%20%20name%0A%20%20%20%20type%0A%20%20%20%20isAccessible%0A%20%20%20%20isRestricted%0A%20%20%20%20restrictedFrom%0A%20%20%20%20restrictedTo%0A%20%20%7D%0A%7D%0A) -- [SanAPI Basic](https://api.santiment.net/graphiql?query=%7B%0A%20%20getAccessRestrictions(plan%3A%20BASIC%2C%20product%3A%20SANAPI)%20%7B%0A%20%20%20%20name%0A%20%20%20%20type%0A%20%20%20%20isAccessible%0A%20%20%20%20isRestricted%0A%20%20%20%20restrictedFrom%0A%20%20%20%20restrictedTo%0A%20%20%7D%0A%7D%0A) -- [SanAPI Pro](https://api.santiment.net/graphiql?query=%7B%0A%20%20getAccessRestrictions(plan%3A%20PRO%2C%20product%3A%20SANAPI)%20%7B%0A%20%20%20%20name%0A%20%20%20%20type%0A%20%20%20%20isAccessible%0A%20%20%20%20isRestricted%0A%20%20%20%20restrictedFrom%0A%20%20%20%20restrictedTo%0A%20%20%7D%0A%7D%0A) -- [Sanbase Free](https://api.santiment.net/graphiql?query=%7B%0A%20%20getAccessRestrictions(plan%3A%20FREE%2C%20product%3A%20SANBASE)%20%7B%0A%20%20%20%20name%0A%20%20%20%20type%0A%20%20%20%20isAccessible%0A%20%20%20%20isRestricted%0A%20%20%20%20restrictedFrom%0A%20%20%20%20restrictedTo%0A%20%20%7D%0A%7D%0A) -- [Sanbase Pro](https://api.santiment.net/graphiql?query=%7B%0A%20%20getAccessRestrictions(plan%3A%20PRO%2C%20product%3A%20SANBASE)%20%7B%0A%20%20%20%20name%0A%20%20%20%20type%0A%20%20%20%20isAccessible%0A%20%20%20%20isRestricted%0A%20%20%20%20restrictedFrom%0A%20%20%20%20restrictedTo%0A%20%20%7D%0A%7D%0A) -- [Sanbase Pro+](https://api.santiment.net/graphiql?query=%7B%0A%20%20getAccessRestrictions(plan%3A%20PRO%2C%20product%3A%20SANBASE)%20%7B%0A%20%20%20%20name%0A%20%20%20%20type%0A%20%20%20%20isAccessible%0A%20%20%20%20isRestricted%0A%20%20%20%20restrictedFrom%0A%20%20%20%20restrictedTo%0A%20%20%7D%0A%7D%0A) - -Description of the fields: - -- `type` - Either [query](/glossary/#query) or [metric](/glossary/#metric) -- `name` - The name of the query or metric. Check the [query](/glossary/#query) and [metric](/glossary/#metric) definition and examples in order to understand what the name represents exactly. -- `isAccessible` - Shows if the given metric/query is accessible for the provided product/plan. -- `isRestricted` - Shows if any time (historical or realtime) restrictions are applied. -- `restrictedFrom` - Shows the first date the given product/plan has access to for the specific metric/query. If it is `null` then no restrictions are applied. -- `restrictedTo` - Shows the last date the given product/plan has access to for the specific metric/query. If it is `null` then no restrictions are applied. - -> Note: The `isRestricted`, `restrictedFrom` and `restrictedTo` fields are meaningful only if `isAccessible` is `true`. diff --git a/src/docs/metrics/details/change_metrics.md b/src/docs/metrics/details/change_metrics.md deleted file mode 100644 index 943a115eb..000000000 --- a/src/docs/metrics/details/change_metrics.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Change Metrics -author: Ivan -date: 2022-04-12 ---- - -- [Definition](#definition) -- [Units](#units) -- [Examples](#examples) - - [price_usd_change_1d](#price_usd_change_1d) - - [circulation_180d_change_1d](#circulation_180d_change_1d) -- [API examples](#api-examples) - - [Get timeseries data of a change metric](#get-timeseries-data-of-a-change-metric) - - [Get aggregated value for multiple assets](#get-aggregated-value-for-multiple-assets) - metric](#get-timeseries-data-of-a-change-metric) - - [Get aggregated value for multiple - assets](#get-aggregated-value-for-multiple-assets) - -## Definition - -The metrics with the suffix `_change_` indicate the percent value -change at the given time compared to `interval` time ago. This allows the -percent changes to be fetched historically and to be plotted on charts. - -Change metrics' names are formed from the original metric name and a change -suffix. Available change intervals and their suffixes are: - -- `_change_1h` - 1 hour. Available only for USD price -- `_change_1d` - 1 day -- `_change_7d` - 7 days -- `_change_30d` - 30 days - -> Note: Change metrics are also available for some of the [Timebound -> Metrics](/metrics/details/timebound). In such cases, both suffixes are -> appended, and their order is important. In all cases, the order is timebound -> suffix, followed by change suffix. - -## Units - -The metric units are numbers where `0` corresponds to 0% change, `1` corresponds -to 100% change. Negative values indicate decrease. These values cannot be -aggregated using `SUM`. The default aggregation is `LAST`. -## Examples - -### price_usd_change_1d - -This metric represents the 24h price percent change. - -### circulation_180d_change_1d - -This metric represents the 24h percent change of the `circulation_180d` -[timebound metric](/metrics/details/timebound) - -## API examples - -### Get timeseries data of a change metric - -```graphql-explorer -{ - getMetric(metric: "price_usd_change_1d") { - timeseriesDataJson( - slug: "bitcoin" - from: "utc_now-7d" - to: "utc_now" - interval: "1d" - ) - } -} -``` - -### Get aggregated value for multiple assets - -```graphql -{ - # The default aggregation is LAST. The last known value, but - # no older than 6 hours, is returned for every asset - allProjects(page: 1, pageSize: 20){ - slug - priceChange24h: aggregatedTimeseriesData( - metric: "price_usd_change_1d" - from: "utc_now-6h" - to: "utc_now") - tradingVolumeChange24h: aggregatedTimeseriesData( - metric: "volume_usd_change_1d" - from: "utc_now-6h" - to: "utc_now") - } -} -``` - - -[**Run in -Explorer**](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22price_usd_change_1d%22%29+%7B%0A++++timeseriesData%28%0A++++++slug%3A+%22bitcoin%22%0A++++++from%3A+%22utc_now-7d%22%0A++++++to%3A+%22utc_now%22%0A++++++interval%3A+%221d%22%0A++++%29+%7B%0A++++++datetime%0A++++++value%0A++++%7D%0A++%7D%0A%7D) - diff --git a/src/docs/metrics/details/data-type.md b/src/docs/metrics/details/data-type.md deleted file mode 100644 index dd68ee175..000000000 --- a/src/docs/metrics/details/data-type.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: Latency -author: Ivan -date: 2020-04-10 ---- - -- [Timeseries Data](#timeseries-data) -- [Histogram Data](#histogram-data) - -## Timeseries Data - -Timeseries data is a sequence taken at successive equally spaced points in time -(every 5 minutes, every day, every year, etc.). - -The metric is represtented as a list of data points, where every point is -represented by a tuple containing a `datetime` an a `value`. - -### Example (timeseries data) - -The `daily_active_addresses` metric is represented as pairs of date `D` and a -number `N` with the following meaning: The count of the unique addresses `N` -that participated in at least one transaction, either as sender or receiver, -during the day `D`. - -The daily active addresses for bitcoin in the period April 01 - April 04 is represented -as the following list: - -```json -[ - { - "datetime": "2020-04-01T00:00:00Z", - "value": 808416 - }, - { - "datetime": "2020-04-02T00:00:00Z", - "value": 803826 - }, - { - "datetime": "2020-04-03T00:00:00Z", - "value": 754343 - }, - { - "datetime": "2020-04-04T00:00:00Z", - "value": 655906 - } -] -``` - -## Histogram Data - -A histogram is an approximate representation of the distribution of numerical or -categorical data. - -The metric is represented as a list of data points, where every point is represented -represented by a tuple containing a `range` an a `value`. - -### Example (histogram data) - -The `price_histogram` (or `spent_coins_cost`) shows at what price were acquired -the coins/tokens transacted on a given day `D`. The metric is represented as a -list of price ranges and values with the following meaning: Out of all -coins/tokens transacted on day `D`, `value` amount of them were acquired when -the price was in the range `range`. - -On April 07, the bitcoins that circulated during that day were 124k and the average -price for the day was \$7307. -Out of all of the 124k bitcoins, 13.8k of them were acquired when the price was -in the range $8692.08 - $10845.62, so they were last moved when the price was higher. -The same logic applies for all of the ranges. - -```json -[ - { - "range": [77.92, 2231.46], - "value": 141.62 - }, - { - "range": [2231.46, 4385], - "value": 109.3 - }, - { - "range": [4385, 6538.54], - "value": 8881.84 - }, - { - "range": [6538.54, 7307.7], - "value": 98208.83 - }, - { - "range": [7307.7, 8692.08], - "value": 2582.64 - }, - { - "range": [8692.08, 10845.62], - "value": 13804.97 - }, - { - "range": [10845.62, 12999.16], - "value": 130.33 - }, - { - "range": [12999.16, 15152.7], - "value": 10.58 - }, - { - "range": [15152.7, 17306.24], - "value": 331.73 - }, - { - "range": [17306.24, 19459.78], - "value": 34.45 - }, - { - "range": [19459.78, 21613.32], - "value": 0.12 - } -] -``` diff --git a/src/docs/metrics/details/frequency.md b/src/docs/metrics/details/frequency.md deleted file mode 100644 index e6d6bad62..000000000 --- a/src/docs/metrics/details/frequency.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Frequency -author: Ivan -date: 2020-04-06 ---- - -- [Five-minute frequency](#five-minute-frequency) -- [Hourly frequency](#hourly-frequency) -- [Eight-hour frequency](#eight-hour-frequency) -- [Daily frequency](#daily-frequency) - -## Five-minute frequency - -One value is computed for each 5-minute interval and each asset. The date and -time is taken according to the UTC timezone. - -Example: The value of the Transaction Volume metric for Bitcoin on June 10, 2019 -will have 288 distinct values for the intervals: - -- `2019-06-10 00:00:00 UTC` and `2019-06-10 00:04:59 UTC` -- `2019-06-10 00:05:00 UTC` and `2019-06-10 00:09:59 UTC` -- `2019-06-10 00:10:00 UTC` and `2019-06-10 00:14:59 UTC` -
    ...
    -- `2019-06-10 23:55:00 UTC` and `2019-06-10 23:59:59 UTC` - -If the data is needed at daily intervals, different metrics have different -default and proper aggregations that are applied to get this value. - -Examples: - -- Daily Transaction Volume is the `SUM` of all 5-minute interval transaction - volumes during the day. -- Daily Price in USD can be either `LAST` or `AVG` - -## Hourly frequency - -One value is computed for every hour of the day. - -Example: The emerging trends are being computed for every round hour in a day. - -## Eight-hour frequency - -One value is computed for every eight hours of the day. - -Example: The binance funding rate metrics are being computed once every eight hours in a day. - -## Daily frequency - -One value is computed for each day and each asset. The day is taken according to -the UTC timezone. - -Example: The value of the Daily Active Addresses metric for Bitcoin on June 10, -2019 will contain the number of distinct addresses for transfers that happened -between 2019-06-10 00:00:00 UTC and 2019-06-10 23:59:59 UTC. diff --git a/src/docs/metrics/details/index.md b/src/docs/metrics/details/index.md deleted file mode 100644 index 944ab6946..000000000 --- a/src/docs/metrics/details/index.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Metrics Details -headline: "Metrics Details: Reference Pages and Concepts" -description: "Index of the detailed reference pages used across Santiment metrics (access, data types, frequencies, latency, timebound variants, and more)." -author: Santiment Team -date: 2025-10-06 ---- - -Use this page to discover the detailed reference docs that many metric pages link to. Each article explains a core concept or parameter used throughout the metrics documentation. - - - -- [Access](/metrics/details/access) -- [Finalized Metrics](/metrics/finalized) -- [Data Type](/metrics/details/data-type) -- [Frequency](/metrics/details/frequency) -- [Latency](/metrics/details/latency) - - - - - -- [Timebound](/metrics/details/timebound) -- [Interval Timebound](/metrics/details/interval_timebound) -- [Stack Coin Age Model](/metrics/details/stack-coin-age-model) - - - - - -- [Social Data](/metrics/details/social-data) - - - - - -- [Supply Distribution Parameters](/metrics/details/supply_distribution_parameters) - - diff --git a/src/docs/metrics/details/interval_timebound.md b/src/docs/metrics/details/interval_timebound.md deleted file mode 100644 index d3ef325dc..000000000 --- a/src/docs/metrics/details/interval_timebound.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Interval Timebound -author: Ante -date: 2022-06-01 ---- - -- [Definition](#definition) - -## Definition - -Typically metrics are computed by taking into account all coins/tokens. - -For some metrics, it makes sense also to compute a derivation of them on the -subset of coins/tokens that have been moved at least once no longer than X -and no less than Y days/years ago. - -UTXO blockchains naturally define the age of a coin, but this is not true for -account-based blockchains. To define the age of a coin in account-based -blockchains we developed our own [Coin Age -Model](/metrics/details/stack-coin-age-model) - -Interval Timebound metrics names are formed from the original metric name plus a -interval timebound suffix. Available interval timebound suffixes are: - -- `0d_1d` - 0 to 1 day -- `1d_7d` - 1 to 7 days -- `7d_30d` - 7 to 30 days -- `30d_60d` - 1 to 2 months -- `60d_90d` - 2 to 3 months -- `90d_180d` - 3 to 6 months -- `180d_365d` - 6 months to 1 year -- `365d_2y` - 1 to 2 years -- `2y_3y` - 2 to 3 years -- `3y_5y` - 3 to 5 years -- `5y_10y` - 5 to 10 years -- `10y_20y` - 10 to 20 years - -Examples: - -- realized_cap_hodl_waves_3y_to_5y - The Realized Cap HODL Waves metric is - computed by considering only the coins/tokens that were active in the past - 5 years but not less than 3 years. -- spent_coins_age_band_60d_to_90d - The number of tokens transacted at least once - on a given day that are older than 60 days but not more than 90 days. diff --git a/src/docs/metrics/details/latency.md b/src/docs/metrics/details/latency.md deleted file mode 100644 index b8e4df9ca..000000000 --- a/src/docs/metrics/details/latency.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Latency -author: Vlad -date: 2025-11-20 ---- - -- [On-Chain Latency](#on-chain-latency) -- [Funding Rates Latency](#funding-rates-latency) -- [Price Latency](#price-latency) -- [Development Activity Latency](#development-activity-latency) - -## On-Chain Latency - -In order to compute on-chain data, a number block confirmations are required -before fetching the data for a given block. Measured in time: - -- Bitcoin - Around 30 minutes -- Ethereum - Around 5 minutes -- Bitcoin Cash - Around 5 minutes -- Litecoin - Around 5 minutes -- Binance Chain - Around 5 minutes -- XRPL Chain - Around 5 minutes - -After the block is considered confirmed and its data is fetched, the data -processing can take anywhere from a few minutes to few hours. The upper limits -are: - -- For 5-minute interval metrics processing the data can take up to 20 minutes - most -- For daily metrics processing the data can take up to 2 hours - -## Social Data Latency - -Each one of the social data source: - -- Telegram -- Reddit -- Bitcointalk -- Twitter -- 4chan -- Youtube Videos - -is being processed separately and usually doesn't take longer than 1 minute. - -The emerging trends are computed once per hour so they become available a few -minutes after every round hour. - -The data for assets is usually computed and it takes 5-10 minutes to compute. - -Data for text terms is computed on-the-fly on the raw data and can be accessed as soon as the -text messages are stored in our database. - -## Funding Rates Latency - -The funding rates are updated every 15 minutes - -## Price Latency - -The prices are updated every 5 minutes - -## Development Activity Latency - -The development activity metrics are updated every 1 hour with max delays of 6 -hours - -## Daily Metrics Latency - -The daily metrics have one value per day. The value is finalized at least 1 hour -after the day is over, using the UTC timezone. diff --git a/src/docs/metrics/details/social-data.md b/src/docs/metrics/details/social-data.md deleted file mode 100644 index 0104f438c..000000000 --- a/src/docs/metrics/details/social-data.md +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: Social Data -author: Ivan Ivanov, Ivan Klimuk, Vladislav Volynets -date: 2024-06-26 ---- - -## Definition - -By **Social data**, we consider a set of crypto-related discussions from the -internet that we collect and store in the form of text documents. It includes -chat conversations, forum posts and comments, tweets, and other pieces of text -(usually pretty short). In addition to the text itself, we also store some -metadata that depends on the data source: user_id, hashtags, chat_title, etc. -The **Social data** serves as a base layer for various statistics and metrics -that we build on top of it. - -## How the data is collected -We have a custom data scraper for each of the data sources we track. The -scrapers collect all the new incoming messages/posts/comments in real-time. We -also have a historical scraper to fetch historical text data from the past for -almost all sources. We store the data in a NoSQL database, which enables us to -run full-text search queries on top of it very fast. - -## Available Assets - -For each data source, we have a curated list of accounts/sub-sources from where -we scrape the data. We collect all the available text documents and don't -separate the incoming data by assets, i.e., the metrics we build on top of the -social data are theoretically available for **any asset** (although in fact, for -projects with a small market capitalization, the level of conversation around -them is usually very low). - -## Available data sources - -### Telegram - -We track a curated list with over 400 crypto-related Telegram chats. For each -of them, we have the entire history of the chat. - -In the metric name this source is available as `telegram`. Example: `social_volume_telegram`. - -**Latency**. We collect the messages in real-time (1-2s delay max.) - -**History**. Each chat has its complete historical data; the oldest discussion starts -at `2016-03-29`. - ---- - -### Twitter - -We track a curated list with over 4000 crypto-related and NFT-related Twitter accounts. For -each of them, we collect their tweets, their retweets, and all the replies to -their tweets. - -In the metric name this source is typed as `twitter`. Example: `social_volume_twitter`. - -**Latency**: We collect all the tweets in real-time. - -**History**: The historical data starts at `2018-02-13`. - ---- - -### Reddit - -We track a curated list with over 350 crypto-related subreddits. For each of -them we collect the posts themselves, as well as all the comments to these -posts. - -In the metric name this source is typed as `reddit`. Example: `social_volume_reddit`. - -**Latency**: All the posts and comments are collected in real-time (1-2s delay -max.) - -**History**: The historical data starts at `2016-01-01`. - ---- - -### Bitcointalk - -We collect all the new public posts from -[bitcointalk.org](https://bitcointalk.org). We also have the full historical -data for the whole forum. - -In the metric name this source is typed as `bitcointalk`. Example: `social_volume_bitcointalk`. - -**Latency**: The scraper goes through all the new messages once per 10 seconds. - -**History**: we have collected the entire forum history, starting from -`2009-11-22`. - ---- - -### Youtube Videos - -We collect the transcribed text from youtube videos from a manually curated list of channels. - -In the metric name this source is typed as `youtube_videos`. Example: `social_volume_youtube_videos` - -**Latency**: The scraper goes through all the new videos once per day. - -**History**: The historical data starts at `2021-06-02` - ---- - -### 4chan - -We collect posts from [4chan.org/biz](https://boards.4chan.org/biz/) - -In the metric name this source is typed as `4chan`. Example: -`social_volume_4chan` - -**Latency**: The scraper goes though all the new posts once per 5 minute. - -**History**: The historical data starts at `2023-02-05` - - -### Farcaster - -We collect posts from [Farcaster](https://www.farcaster.xyz/) - -In the metrics' names this source is typed as `farcaster`. Example: -`social_volume_farcaster` - -**Latency**: The scraper goes though all the new posts once per 5 minute. - -**History**: The historical data starts at `2024-04-01` - ---- - -### Total - -A combination of all available sources. - -In the metric name this source is typed as `total`. Example: `social_volume_total`. - diff --git a/src/docs/metrics/details/stack-coin-age-model/index.md b/src/docs/metrics/details/stack-coin-age-model/index.md deleted file mode 100644 index 0eb395d31..000000000 --- a/src/docs/metrics/details/stack-coin-age-model/index.md +++ /dev/null @@ -1,260 +0,0 @@ ---- -title: Stack Coin Age model -author: Santiment Team -date: 2020-04-02 -description: Introducing the Stack Coin Age model. Extending metrics to Accound-based blockchains. ---- - - -- [Overview](#overview) -- [Introduction](#introduction) -- [Bitcoin UTXOs and coin age](#bitcoin-utxos-and-coin-age) -- [Account-based blockchains](#account-based-blockchains) -- [The stack coin age model](#the-stack-coin-age-model) -- [Acknowledgments](#acknowledgments) -- [References](#references) - -## Overview - -## Introduction - -Blockchain data gives us a unique opportunity to perform novel economic -research. There have been several metrics developed for Bitcoin that exploit the -availability of onchain data and show us a picture of the Bitcoin economy which -is impossible to get in the fiat world. - -These include: -- Bitcoin-days destroyed; -- Аge distribution (also known as HODL waves); -- Realized capitalization. - -Those metrics are Bitcoin-specific, because they rely on the UTXO model and its -natural way of defining the _age_ of a given coin. - -At Santiment we have managed to **extend these metrics to account-based -blockchains** like Ethereum. To achieve that, we have developed an alternative -notion of _age_ which can be applied to virtually any blockchain. As an example, -here's the **coin age distribution** for our own SAN token: - -![SAN Age Distribution](santiment-age-distribution.png) - -and here is the **realized cap for Ethereum**: - -![ETH realized cap (aka realized value)](ethereum-realized-cap.png) - -In this article we want to describe how exactly we generalize the -above-mentioned metrics. They are all based on the notion of **coin age**, which -measures how long a given coin has stayed in a given wallet. - -Bitcoin and other UTXO-based blockchains give us a natural way of defining coin -age. While this definition is natural, it is based on technical details and is -not really related to any **economic properties** of the blockchain. - -We are going to propose a different coin age model, which we call _stack-based -coin age_. Our custom model actually has financial justifications, and can -easily be applied to any blockchain. - -This article covers a technical subject. We've written several articles (and -will publish many more in the future) explaining what Santiment metrics actually -tell us about different types of behavior of market participants. - -## Bitcoin UTXOs and coin age - -The Bitcoin blockchain uses the so-called **UTXO model** for keeping track of -coins. UTXO stands for "Unspent Transaction Output". - -Each Bitcoin address holds of a bunch of _outputs_; each output contains a -certain amount of coins. A Bitcoin transaction consists of a list of old outputs -that are going to be destroyed or _spent_, and a list of new outputs that are -going to be created. The total amount of coins in the spent outputs must be -greater or equal to the total amount of coins in the new outputs. The difference -between the amounts is sent to the miner that creates the block. - -In a way, the UTXO model resembles paper money. You can think of your Bitcoin -address as a wallet and of the unspent outputs as the coins and notes in the -wallet. There is one small difference $-$ normal coins do not get destroyed in -transactions. - -But imagine the following fantastical scenario. You have a \$5 note in your -wallet and you want to buy bread for \$1. When you give your note to the cashier, -it gets incinerated and two brand new notes appear out of thin air. One \$1 note -goes to the cashier and another \$3.90 note is put back to your wallet. 10 cents -go to a magical fairy that just performed this operation. This is, in essence, -how the Bitcoin UTXO model works. - -![bitcoin-utxo-model](bitcoin-utxo-model.png) You can assign an _age_ to each -note or coin in your wallet which would simply tell you how long it stayed -there. Let's say that the \$5 note in our example was taken from an ATM machine -on January 1st and you used it to buy bread on February 1st. At the time of -purchase, then, the age of this particular \$5 note would be 31 days. When you -spend the note you "destroy" \$31\*5=155\$ dollar-days. - -In the UTXO model, similarly, we can associate an _age_ to each output using the -time when the output was created. More importantly, we get a canonical way to -associate an age to _each satoshi_, because each satoshi currently in existence -belongs to a given unspent output. - -This notion of coin age is what allows us to define the metrics that we -described above. To compute _Bitcoin-days destroyed_, we take all Bitcoins spent -at any given time and multiply each by its age to arrive at the total. The _age -distribution_ metrics show us how many Bitcoins have a given age at a given -point in time. The _realized capitalization_ gives us the total cost of -acquisition; in other words, for each existing satoshi we take its dollar price -at the time when it was created and sum those together. - -Bitcoin transactions explained You can assign an age to each note or coin in -your wallet which would simply tell you how long it stayed there. Let’s say that -the \$5 note in our example was taken from an ATM machine on January 1st and you -used it to buy bread on February 1st. At the time of purchase, then, the age of -this particular \$5 note would be 31 days. When you spend the note you “destroy” -31 ∗ 5 = 155 dollar-days. - -In the UTXO model, similarly, we can associate an age to each output using the -time when the output was created. More importantly, we get a canonical way to -associate an age to each satoshi, because each satoshi currently in existence -belongs to a given unspent output. - -This notion of coin age is what allows us to define the metrics that we -described above. To compute Bitcoin-days destroyed, we take all Bitcoins spent -at any given time and multiply each by its age to arrive at the total. The age -distribution metrics show us how many Bitcoins have a given age at a given point -in time. The realized capitalization gives us the total cost of acquisition; in -other words, for each existing satoshi we take its dollar price at the time when -it was created and sum those together. - -## Account-based blockchains - -If we want to develop similar metrics for Ethereum and other blockchains, we -first have to figure out how to define _coin age_ for them. Unlike Bitcoin, -however, Ethereum uses an _account model_. What this means is that, instead of -many outputs, to each address we associate just a single number, which -represents its balance. When we move coins between addresses, those balances get -updated. - -The account model is very similar to the way a traditional bank account works. -Imagine again that you go to buy bread for \$1, except this time you are using -your debit card. - -Let's say that your bank account has \$100, and the baker's bank account has -$200. You give your debit card to the cashier, they swipe it and give it back. -As the card gets swiped, your account balance changes to \$98.90 and the baker's -account balance changes to \$201. Again, 10 cents are paid as a transaction fee. - -Here's the question $-$ what is the age of the money currently sitting in your -bank account? Let's say that you received one transfer of \$50 on December 1st -and another transfer of \$50 on January 1st. When you spent one dollar for bread -(again on February 1st) which dollar did you spend? Did you take one of the -dollars that you received in December, or one of the dollars you got in January? -Or maybe you took 50 cents from December and 50 cents from January? In each of -these scenarios, the age of the spent dollar, as well as the age of the -remaining money in your account, would be different. - -We can see that for account-based assets, there is no canonical way to associate -coin age. - -Let's think again about the Bitcoin coin age. We showed how we associate age to -coins using unspent outputs and how we use that data to define various metrics. -It turns out that those metrics can give us valuable information about the -overall Bitcoin economy. But the coin age model that we used to derive those -metrics has no intrinsic economic meaning! When studying the fiat economy, it doesn't -really matter which note we choose to pay for bread, if we have several notes in our wallet. - -Similarly, when you make a Bitcoin transaction you $-$ or rather your Bitcoin -wallet software $-$ choose which unspent outputs to use to make that transaction. -Your choice affects the coin ages, yes, but from an economic point of view -- -your choice is entirely irrelevant. - -_We have managed to derive valuable metrics of Bitcoin's economy from a notion -of coin age, which, economically speaking, is essentially arbitrary. Any other -reasonable way to assign coin age which works for all assets would be at least -as valid. Hence we can expect that metrics derived from alternative coin age -models will expose the same information about the assets' economy._ - -## The stack coin age model - -So let's invent a better model. Let's go back to the buying bread example and -decide to abide by the following rule $-$ when I pay in cash I always **choose -the most recent coins** and notes that I have in my wallet to pay the cashier. - -I can easily follow this rule with notes and coins, but I can also pretend to -follow it when I pay with a debit card. If I have received \$50 on December 1st -and another \$50 on January 1st, I will pretend that when I buy bread on February -1st, I use the \$1 coming from the most recent transfer. - -This allows me to assign ages again. Before I bought the bread, I had \$50 whose -age was 2 months and \$50 whose age was 1 month. In my transaction I spent \$1.1 -(one dollar to the cashier and a 10p fee) whose age was one month (which -destroyed \$31*1.1=34.1 dollar-days). After that I am left with \$50 with an age -of 2 months and \$48.9 with an age of 1 month. - -By making this choice, we imagine that our account is like a _stack_ $-$ when money -comes in, it is put on the top, and when it goes out, it is taken from the top. - -![Stack coin age model](stack-coin-age-model.png) The stack model can be applied -to all blockchains $-$ both UTXO and account-based. And unlike the canonical coin -age model for UTXO-based blockchains, it actually has some economic meaning. - -In economics, money supply is split into different types: M0, M1, M2, M3 and M4, -according to their liquidity. M0 are all coins and notes in circulation, M1 -includes assets that are easily convertible to coins and notes, M2 includes -short-term deposits and M3 includes longer-term deposits. - -We don't yet have Bitcoin or Ethereum deposits but we still have coins that are -more liquid and others that are less liquid. We can have a single address that -holds large quantities of ETH, but the transactions that it is a part of are all -for relatively small amounts. This scenario is very common for exchange wallets. -It would be good to be able to split the money in such addresses in more liquid -and less liquid segments. The stack coin age model allows us to do just that. - -Let's see how our model compares to Bitcoin's canonical model. One simple way to -compare the two is to compute a metric using both models and contrast the -resulting values. Here is the comparison between our own stack-based realized -cap and the original metric: - -![utxo vs. stack-based realized cap](utxo-vs-stacks.svg) - -You can see that the values of the two metrics are almost the same. - -The reason for this uncanny similarity is actually quite simple $-$ most Bitcoin -addresses are used only for a single output. More precisely at the time of -writing there are around 473 million different addresses in the Bitcoin -blockchain, and of those about 411 million (or about _87%_) are used for only -two transactions $-$ one incoming and one outgoing. For these addresses any two -reasonable coin age models would produce the same ages. - -There are however some areas of the chart where the stack-based realized cap is -slightly lower than the utxo-based metric. We do not yet understand the -significance of the difference between the two different realized cap measures -and why the stack-based metric is always lower than the UTXO-based one. - -## Acknowledgments - -The stack coin age model was first developed at the end of 2017 by Michail -Lopatchouk from [IBA](https://ibagroupit.com/en/). Maksim, Santiment's founder -and CEO, had asked him if it is possible to develop an Ethereum and ERC20 -equivalent to the _Bitcoin-days destroyed_ metric. Milan, Tzanko and Valentin -from [Santiment](https://santiment.net) optimized the calculations and used the -model to create Ethereum equivalents for _age distribution_ and _realized -cap_. - -## References - -Akiron. “Bitcoin Days Destroyed.” -[bitcoin days destroyed](https://en.bitcoin.it/wiki/Bitcoin_Days_Destroyed). - -Bansal, Dhruv. “Bitcoin Data Science (Pt. 1): HODL Waves.” -[hodl waves](https://unchained.com/blog/tag/hodl-waves/). - -Carter, Nic. “Bitcoin Honeybadger 2018 Bitcoin Conference, Riga, Day 2.” -[bitcoin honeybadged 2018](https://www.youtube.com/watch?v=D2WXxgZ8h-0&t=78m8s). - -Carter, Nic, Antoine Le Calvez, and Coinmetrics team. 2018. “Introducing -Realized Capitalization.” 2018. -[introducing realized capitalization](https://coinmetrics.io/realized-capitalization/). - -Coinmetrics. “Data Downloads - Coin Metrics.” -[coinmetrics](https://coinmetrics.io/community-network-data/). - -/u/jratcliff63367. “An Area Chart Showing the Distribution of Bitcoins Based on -Age of Last Use Throughout History.” -[bitcoin age distribution](https://www.reddit.com/r/Bitcoin/comments/2n205b/an_area_chart_showing_the_distribution_of/). diff --git a/src/docs/metrics/details/supply_distribution_parameters.md b/src/docs/metrics/details/supply_distribution_parameters.md deleted file mode 100644 index 767a87543..000000000 --- a/src/docs/metrics/details/supply_distribution_parameters.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: Supply Distribution Parameters -author: Filip -date: 2024-04-01 ---- - -- [Available intervals](#available-intervals) -- [Available thresholds](#available-thresholds) -- [Available labels](#available-labels) -- [Available negative labels](#available-negative-labels) - -## Available intervals - -The available intervals for the supply distribution metrics offer a spectrum of balance ranges. -An interval is defined by two values: the first representing the lowest balance and the second -representing the highest balance within that range. - -* `0_to_0.001` -* `0.001_to_0.01` -* `0.01_to_0.1` -* `0.1_to_1` -* `1_to_10` -* `10_to_100` -* `100_to_1k` -* `1k_to_10k` -* `10k_to_100k` -* `100k_to_1M` -* `1M_to_10M` -* `10M_to_100M` -* `100M_to_1B` -* `1B_to_inf` -* `total` - interval from 0 to inf - -## Available thresholds - -The available thresholds for the supply distribution metrics provide a range of balance thresholds, -with each threshold representing the minimum balance required for an address to be included in the -calculation. - -* `1` -* `10` -* `100` -* `1k` -* `10k` -* `100k` -* `1M` - -## Available labels - -* `exchange` -* `infrastructure` -* `miner` -* `whale` -* `all` - -## Available negative labels - -* `nonExchange` -* `nonInfrastructure` -* `nonMiner` -* `nonWhale` diff --git a/src/docs/metrics/details/timebound.md b/src/docs/metrics/details/timebound.md deleted file mode 100644 index c59d816b4..000000000 --- a/src/docs/metrics/details/timebound.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Timebound -author: Ivan -date: 2022-04-12 ---- - -- [Definition](#definition) -- [Examples](#examples) - - [circulation_1d](#circulation_1d) - -## Definition - -Typically metrics are computed by taking into account all coins/tokens. - -For some metrics, it makes sense also to compute a derivation of them on the -subset of coins/tokens that have been moved at least once no longer than X -days/years ago. - -UTXO blockchains naturally define the age of a coin, but this is not true for -account-based blockchains. To define the age of a coin in account-based -blockchains we developed our own [Coin Age -Model](/metrics/details/stack-coin-age-model) - -Timebound metrics names are formed from the original metric name plus a -timebound suffix. Available timebound suffixes are: - -- `_1d` - 1 day -- `_7d` - 7 days -- `_30d` - 30 days -- `_60d` - 60 days -- `_90d` - 90 days -- `_180d` - 180 days -- `_365d` - 365 days -- `_2y` - 2 years -- `_3y` - 3 years -- `_5y` - 5 years -- `_10y` - 10 years - -> Note: There are metrics that support only part of the timebounds. For example, the -> mean_coin_age has only `_90d`, `_180d`, `_365d`, `_2y`, `_3y` and `_5y`. - -Examples: - -- mvrv_usd_30d - The MVRV metric is computed by considering only the - coins/tokens that were active in the past 30 days. -- circulation_3y - The number of tokens transacted at least once in the past 3 - years. If a coin/token is considered dead/lost (sent to graveyard address, the - owner lost private key, etc.), such circulation can approximate total supply - minus lost/dead coins. - -## Examples - -### circulation_1d - -The `circulation_1d` metric counts the number of coins/tokens that participated -in on-chain transactions in the past 24 hours. - -On one particular day, Alice sends 20 ETH to Bob, Bob sends 10 ETH to Charlie -and Charlie sends 5 ETH to Dean. - -```bash -Alice -- 20 ETH --> Bob - | - 10 ETH - | - v -Dean <-- 5 ETH -- Charlie -``` - -In this scenario the transaction volume is 20 + 10 + 5 = 35 ETH, but the ETH in -circulation is 20 ETH. - -This difference can be explained as having twenty \$1 bills. Alice sends all of -them to Bob, Bob sends 10 of the received bills to Charlie, and Charlie sends 5 -of them to Dean. There are 20 dollars in circulation total in this case. - -One of the most valuable properties of circulation is that it is immune to -mixers and gives a much better view of the actual amount of tokens that are -being transacted on-chain. diff --git a/src/docs/metrics/development-activity/development-activity-contributors-count/index.md b/src/docs/metrics/development-activity/development-activity-contributors-count/index.md deleted file mode 100644 index 6d9a7a48a..000000000 --- a/src/docs/metrics/development-activity/development-activity-contributors-count/index.md +++ /dev/null @@ -1,150 +0,0 @@ ---- -title: Development Activity Contributors Count -author: Santiment Team -date: 2022-04-18 -description: Development activity contributors count in public Github repositories ---- - -## Definition - -The Development Activity Contributors Count metrics show the unique number of -people (represented as Github accounts) that have contributed to a public -Github repository in an organization that is followed. Only those events that -constitute 'pure' development work are taken into consideration. - -There are 3 development activity contributors count metrics available: -- `dev_activity_contributors_count` - Computed on-the-fly using the Github - data. Because of this the metric can compute data for any asset or just any - random Github organization that has public repositories like Google, - Facebook, or any other organization. -- `dev_activity_contributors_count_7d` - Precomputed metric for each asset. - Each data point shows the number of unique contributors for the past 7 days. -- `ecosystem_dev_activity_contributors_count_7d` - Precomputed for each - ecosystem. Each data point shows the number of unique contributors for the past 7 days. - -> Note: The precomputed metrics `dev_activity_contributors_count_7d` and -> `ecosystem_dev_activty_contributors_count_7d` cannot be aggregated using the -> `SUM` aggregation, i.e. you cannot obtain the number of monthly contributors -> by taking the sum of 4 weekly values. This is because the same contributors -> may or may not make up the separate values, so the `SUM` operation can count -> some contributors multiple times. To achieve monthly contributors, use the -> `dev_activity_contributors_count` metric with `interval: "30d"` - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Number of github accounts - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -- `dev_activity_contributors_count` - [Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) -- `dev_activity_contributors_count_7d` - [Daily Intervals](/metrics/details/frequency#daily-frequency) -- `ecosystem_dev_activty_contributors_count_7d` - [Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[Development Activity Data Latency](/metrics/details/latency#development-activity-latency) - ---- - -## Available Assets - -- `dev_activity_contributors_count` $-$ [available assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric:%20%22dev_activity_contributors_count%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) -- `dev_activity_contributors_count_7d` $-$ [available assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22dev_activity_contributors_count_7d%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) -- `ecosystem_dev_activity_contributors_count_7d` $-$ [available ecosystems](https://api.santiment.net/graphiql?query=%7B%0A%20%20getEcosystems%20%7B%0A%20%20%20%20name%0A%20%20%7D%0A%7D%0A) - ---- - -## SanAPI - -Fetch hourly `dev_activity_contributors_count` for an asset: - -```graphql-explorer -{ - getMetric(metric: "dev_activity_contributors_count") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-03-01T00:00:00Z" - interval: "1h" - ) - } -} -``` - ---- - -Fetch monthly `dev_activity_contributors_count` for an asset: - -```graphql-explorer -{ - getMetric(metric: "dev_activity_contributors_count") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-03-01T00:00:00Z" - interval: "30d" - ) - } -} -``` - ---- - -Fetch the precomputed weekly `dev_activity_contributors_count_7d` for an asset: - -```graphql-explorer -{ - getMetric(metric: "dev_activity_contributors_count_7d") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-03-01T00:00:00Z" - interval: "7d" - ) - } -} -``` - ---- - -Because `dev_activity_contributors_count_7d` is precomputed, you can also fetch -an aggregated value for many assets at the same time: - -```graphql -{ - allProjects( - selector: { - baseProjects: {slugs: ["bitcoin", "ethereum", "santiment", "maker"]} - }) { - slug - contributors: aggregatedTimeseriesData( - metric: "dev_activity_contributors_count_7d" - from: "utc_now-1d" - to: "utc_now" - aggregation: LAST - ) - } -} -``` - -**[Run in Explorer](https://api.santiment.net/graphiql?query=%7B%0A%20%20allProjects(%0A%20%20%20%20selector%3A%20%7B%0A%20%20%20%20%20%20baseProjects%3A%20%7Bslugs%3A%20%5B%22bitcoin%22%2C%20%22ethereum%22%2C%20%22santiment%22%2C%20%22maker%22%5D%7D%0A%20%20%20%20%7D)%20%7B%0A%20%20%20%20%20%20slug%0A%20%20%20%20%20%20contributors%3A%20aggregatedTimeseriesData(%0A%20%20%20%20%20%20%20%20metric%3A%20%22dev_activity_contributors_count_7d%22%0A%20%20%20%20%20%20%20%20from%3A%20%22utc_now-1d%22%0A%20%20%20%20%20%20%20%20to%3A%20%22utc_now%22%0A%20%20%20%20%20%20%20%20aggregation%3A%20LAST%0A%20%20%20%20%20%20)%0A%20%20%7D%0A%7D%0A)** - ---- diff --git a/src/docs/metrics/development-activity/development-activity/index.md b/src/docs/metrics/development-activity/development-activity/index.md deleted file mode 100644 index 6bc671ef9..000000000 --- a/src/docs/metrics/development-activity/development-activity/index.md +++ /dev/null @@ -1,177 +0,0 @@ ---- -title: Development Activity Metric -author: Santiment Team -description: The development activity metrics provide data and insight about the amount of work done in Github public repositories. -date: 2024-04-04 - ---- - -## Definition - -Development Activity metric shows the 'pure' development activity. It excludes events that are not related to development like: - -- Comments on issues; -- Issues created and closed; -- Creating of forks; -- Comments on commits; -- People following an issue; -- Downloading releases; -- Watching a repository; -- Project management events; -- Other. - -This allows for better comparison between projects that use GitHub for issue tracking and -projects that use an external tool (like Notion) for issue tracking. If such events are not -excluded then some projects have inflated activity just by discussing -what they are going to build without actually building it. Inactive projects -might have non-zero activity caused by people creating issues and asking the -team to fix something, without any actual work being done. - -There are 3 development activity metrics available: -- `dev_activity` - Computed on-the-fly using the Github data. Because of this - the metric can compute data for any asset or just any random Github - organization that has public repositories like Google, Facebook, or any other - organization. -- `dev_activity_1d` - Precomputed daily metric for each asset that is available - on Santiment. This allows the metric to be aggregated when the value is - needed for all assets at once. -- `ecosystem_dev_activity` - Precomputed for each ecosystem. An ecosystem dev - activity is defined as the sum of the dev activities of all assets that - belong to it. For example the `ethereum` ecosystem contains all the projects - that build on the Ethereum blockchain or contribute to the blockchain in any - other way. - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -## Frequency - -- `dev_activity` - [Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) -- `dev_activity_1d` - [Daily Intervals](/metrics/details/frequency#daily-frequency) -- `ecosystem_dev_activity` - [Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[Development Activity Data Latency](/metrics/details/latency#development-activity-latency) - ---- - -## Available Assets - -- `dev_activity` $-$ [available assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric:%20%22dev_activity%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) -- `dev_activity_1d` $-$ [available assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric:%20%22dev_activity_1d%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) -- `ecosystem_dev_activity` $-$ [available ecosystems](https://api.santiment.net/graphiql?query=%7B%0A%20%20getEcosystems%20%7B%0A%20%20%20%20name%0A%20%20%7D%0A%7D%0A) - ---- - -## SanAPI - -Fetch the dev activity for an asset: - -```graphql-explorer -{ - getMetric(metric: "dev_activity") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-13T00:00:00Z" - to: "2020-01-18T00:00:00Z" - interval: "1d" - ) - } -} -``` - ---- - -Fetch the `dev_activity` for an arbitrary organization. You need to provide only the organization name -to the parameter, not the whole URL. Github links look like this: `https://github.com//`. - -```graphql-explorer -{ - getMetric(metric: "dev_activity") { - timeseriesDataJson( - selector: {organization: "google"} - from: "2020-01-13T00:00:00Z" - to: "2020-01-18T00:00:00Z" - interval: "1d" - ) - } -} -``` - ---- - -Fetch the `ecosystem_dev_activity`, combining the dev activities of all assets -that contribute to that ecosystem: - -```graphql-explorer -{ - getEcosystems(ecosystems: ["Ethereum"]) { - timeseriesData( - metric: "ecosystem_dev_activity" - from: "2024-03-01T00:00:00Z" - to: "2024-03-10T00:00:00Z" - interval: "1d" - ) - { - datetime - value - } - } -} -``` - ---- - -To check what assets are part of the ecosystem and what are their github links: - -```graphql -{ - getEcosystems(ecosystems: ["Ethereum"]){ - name - projects{ - slug - githubLinks - } - } -} -``` - -**[Run in Explorer](https://api.santiment.net/graphiql?query=%7B%0A%20%20getEcosystems(ecosystems%3A%20%5B%22ethereum%22%5D)%7B%0A%20%20%20%20name%0A%20%20%20%20projects%7B%0A%20%20%20%20%20%20slug%0A%20%20%20%20%20%20githubLinks%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A)** - ---- - -## Full list of metrics - -The full list of Dev Activity metrics is: - -
    - -Open Metrics List - -- 30d_moving_avg_dev_activity_change_1d -- dev_activity -- dev_activity_1d -- dev_activity_change_1d -- ecosystem_dev_activity - -
    \ No newline at end of file diff --git a/src/docs/metrics/development-activity/github-activity-contributors-count/index.md b/src/docs/metrics/development-activity/github-activity-contributors-count/index.md deleted file mode 100644 index a11fe9fd8..000000000 --- a/src/docs/metrics/development-activity/github-activity-contributors-count/index.md +++ /dev/null @@ -1,152 +0,0 @@ ---- -title: Github Activity Contributors Count -author: Santiment Team -date: 2022-04-18 -description: Github Activity Contributors count in public Github repositories ---- - -## Definition - -The Github Activity Contributors Count metrics show the unique number of -people (represented as Github accounts) that have contributed to a public -Github repository in an organization that is followed. - -There are 3 development activity contributors count metrics available: -- `github_activity_contributors_count` - Computed on-the-fly using the Github - data. Because of this the metric can compute data for any asset or just any - random Github organization that has public repositories like Google, - Facebook, or any other organization. -- `github_activity_contributors_count_7d` - Precomputed weekly metric for each - asset that is available on Santiment. This allows the metric to be aggregated - when the value is needed for all assets at once. -- `ecosystem_github_activity_contributors_count_7d` - Precomputed for each - ecosystem. The metric is defined as the total count of unique contributors - that contributed to the github organization of at least one of assets that - belong to it. - -> Note: The precomputed metrics `github_activity_contributors_count_7d` and -> `ecosystem_github_activty_contributors_count_7d` cannot be aggregated using the -> `SUM` aggregation, i.e. you cannot obtain the number of monthly contributors -> by taking the sum of 4 weekly values. This is because the same contributors -> may or may not make up the separate values, so the `SUM` operation can count -> some contributors multiple times. To achieve monthly contributors, use the -> `github_activity_contributors_count` metric with `interval: "30d"` - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Number of github accounts - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -- `github_activity_contributors_count` - [Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) -- `github_activity_contributors_count_7d` - [Daily Intervals](/metrics/details/frequency#daily-frequency) -- `ecosystem_github_activity_contributors_count_7d` - [Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[Development Activity Data Latency](/metrics/details/latency#development-activity-latency) - ---- - -## Available Assets - -- `github_activity_contributors_count` $-$ [available assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric:%20%22github_activity_contributors_count%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) -- `github_activity_contributors_count_7d` $-$ [available assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22github_activity_contributors_count_7d%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) -- `ecosystem_github_activity_contributors_count_7d` $-$ [available ecosystems](https://api.santiment.net/graphiql?query=%7B%0A%20%20getEcosystems%20%7B%0A%20%20%20%20name%0A%20%20%7D%0A%7D%0A) - ---- - -## SanAPI - -Fetch hourly `github_activity_contributors_count` for an asset: - -```graphql-explorer -{ - getMetric(metric: "github_activity_contributors_count") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-03-01T00:00:00Z" - interval: "1h" - ) - } -} -``` - ---- - -Fetch monthly `github_activity_contributors_count` for an asset: - -```graphql-explorer -{ - getMetric(metric: "github_activity_contributors_count") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-03-01T00:00:00Z" - interval: "30d" - ) - } -} -``` - ---- - -Fetch the precomputed weekly `github_activity_contributors_count_7d` for an asset: - -```graphql-explorer -{ - getMetric(metric: "github_activity_contributors_count_7d") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-03-01T00:00:00Z" - interval: "7d" - ) - } -} -``` - ---- - -Because `github_activity_contributors_count_7d` is precomputed, you can also fetch -an aggregated value for many assets at the same time: - -```graphql -{ - allProjects( - selector: { - baseProjects: {slugs: ["bitcoin", "ethereum", "santiment", "maker"]} - }) { - slug - contributors: aggregatedTimeseriesData( - metric: "github_activity_contributors_count_7d" - from: "utc_now-1d" - to: "utc_now" - aggregation: LAST - ) - } -} -``` - -**[Run in Explorer](https://api.santiment.net/graphiql?query=%7B%0A%20%20allProjects(%0A%20%20%20%20selector%3A%20%7B%0A%20%20%20%20%20%20baseProjects%3A%20%7Bslugs%3A%20%5B%22bitcoin%22%2C%20%22ethereum%22%2C%20%22santiment%22%2C%20%22maker%22%5D%7D%0A%20%20%20%20%7D)%20%7B%0A%20%20%20%20%20%20slug%0A%20%20%20%20%20%20contributors%3A%20aggregatedTimeseriesData(%0A%20%20%20%20%20%20%20%20metric%3A%20%22github_activity_contributors_count_7d%22%0A%20%20%20%20%20%20%20%20from%3A%20%22utc_now-1d%22%0A%20%20%20%20%20%20%20%20to%3A%20%22utc_now%22%0A%20%20%20%20%20%20%20%20aggregation%3A%20LAST%0A%20%20%20%20%20%20)%0A%20%20%7D%0A%7D%0A)** - ---- diff --git a/src/docs/metrics/development-activity/github-activity/index.md b/src/docs/metrics/development-activity/github-activity/index.md deleted file mode 100644 index 51cf0df6d..000000000 --- a/src/docs/metrics/development-activity/github-activity/index.md +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: Github Activity -author: Santiment Team -date: 2023-06-01 - ---- - -## Definition - -Unlike [Development Activity](metrics/development-activity/development-activity) which excludes some of the events, the GitHub Activity metric uses all events to compute the metric. - - -There are 3 github activity metrics available: - -- `github_activity` - Computed on-the-fly using the Github data. Because of this the metric can compute data for any - asset or any random Github organization that has public repositories like Google, Facebook, or any other organization. -- `github_activity_1d` - Precomputed daily metric for each asset that is available on Santiment. This allows the metric - to be aggregated when the value is needed for all assets at once. -- `ecosystem_github_activity` - Precomputed for each ecosystem. An ecosystem github activity is defined as - the sum of the github activities of all assets that belong to it. For example the `ethereum` ecosystem - contains all the projects that build on the Ethereum blockchain or contribute to the blockchain in any other way. - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -## Frequency - -- `github_activity` - [Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) -- `github_activity_1d` - [Daily Intervals](/metrics/details/frequency#daily-frequency) -- `ecosystem_github_activity` - [Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[Development Activity Data Latency](/metrics/details/latency#development-activity-latency) - ---- - -## Available Assets - -- `github_activity` $-$ [available assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric:%20%22github_activity%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) -- `github_activity_1d` $-$ [available assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric:%20%22github_activity_1d%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) -- `ecosystem_github_activity` $-$ [available ecosystems](https://api.santiment.net/graphiql?query=%7B%0A%20%20getEcosystems%20%7B%0A%20%20%20%20name%0A%20%20%7D%0A%7D%0A) - ---- - -## SanAPI - -Fetch the dev activity for an asset: - -```graphql-explorer -{ - getMetric(metric: "github_activity") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-13T00:00:00Z" - to: "2020-01-18T00:00:00Z" - interval: "1d" - ) - } -} -``` - ---- - -Fetch the `github_activity` for an arbitrary organization. You need to provide only the organization name -to the parameter, not the whole URL. Github links look like this: `https://github.com//`. - -```graphql-explorer -{ - getMetric(metric: "github_activity") { - timeseriesDataJson( - selector: {organization: "google"} - from: "2020-01-13T00:00:00Z" - to: "2020-01-18T00:00:00Z" - interval: "1d" - ) - } -} -``` - ---- - -Fetch the `ecosystem_github_activity`, combining the dev activities of all assets -that contribute to that ecosystem: - -```graphql-explorer -{ - getEcosystems(ecosystems: ["ethereum"]) { - timeseriesDataJson( - metric: "ecosystem_github_activity" - from: "2024-03-01T00:00:00Z" - to: "2024-03-10T00:00:00Z" - interval: "1d") - } -} -``` - ---- - -To check what assets are part of the ecosystem and what are their github links: - -```graphql -{ - getEcosystems(ecosystems: ["ethereum"]){ - name - projects{ - slug - githubLinks - } - } -} -``` - -**[Run in Explorer](https://api.santiment.net/graphiql?query=%7B%0A%20%20getEcosystems(ecosystems%3A%20%5B%22ethereum%22%5D)%7B%0A%20%20%20%20name%0A%20%20%20%20projects%7B%0A%20%20%20%20%20%20slug%0A%20%20%20%20%20%20githubLinks%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A)** - ---- - -GitHub Activity Change for Ethereum Repository Over 7 Days - -```graphql-explorer -{ - getMetric(metric: "github_activity_change_30d") { - timeseriesDataJson( - selector: {slug: "ethereum"} - from: "2024-01-01T00:00:00Z" - to: "2024-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - ---- - -## Full list of metrics - -The full list of GitHub Activity metrics is: - -
    - -Open Metrics List - -- ecosystem_github_activity -- github_activity_change_30d - -
    \ No newline at end of file diff --git a/src/docs/metrics/development-activity/index.md b/src/docs/metrics/development-activity/index.md deleted file mode 100644 index b1c92e71d..000000000 --- a/src/docs/metrics/development-activity/index.md +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: Development Activity Metrics -author: Santiment Team -date: 2023-06-01 ---- - -## Metrics - -The development-related data allows the definition of different metrics. -These metrics include: -- [Development Activity](/metrics/development-activity/development-activity/) - - Ignore the non-development related events. Excluding this allows values of - projects who use Github for issue tracking and projects who do not use Github - for issue tracking to be faily compared -- [Development Activity Contributors Count](/metrics/development-activity/development-activity-contributors-count/) - - Track the number of unique development activity contributors. -- [Github Activity](/metrics/development-activity/github-activity/) - Count all - events for a project. -- [Github Activity Contributors Count](/metrics/development-activity/github-activity-contributors-count) - - Track the number of unique github activity contributors. - ---- - -## Why Development Activity matters? - -The development activity of a project that Santiment tracks is done in the -project's public GitHub repositories. The work done in private repositories -cannot be tracked. In crypto, a lot of the work is done in public repositories, -so this metric is available for many projects. - -A developer's time is an expensive resource, so high development activity -implies that: - -- The project is serious about its business proposition; -- The project will likely ship new features in the future and address existing issues; -- It's less likely that the project is just an exit scam. - -Simply put, development-related metrics can be used to gauge a project's commitment to -creating a working product, and continuously polishing and upgrading its -features. - -> **Note:** Only development work done in public github repositories can be tracked. -> Work done in private/unknown repositories or public repositories outside -> GitHub won't be counted. In Github, switching a repository from private to public does -> not emit events for past actions, so the development activity will track only the work -> done after making the repository public. - ---- - -## How is development activity tracked? - -Development-related metrics are using the events emitted by Github. The metrics -**do not** use the number of commits in a repository. - -When developers work they encapsulate their code changes in commits. When a -repository page [like this](https://github.com/santiment/sanbase2) is opened in -github one of the first things shown is the number of commits. - -![github-status-bar](./github-status-bar.png) - -One naturally would think that counting commits is an accurate approximation of -development activity. A lot of the data aggregators track the number of Github -commits, an unfortunate solution that returns skewed data. - -### Why is counting commits not optimal? - -There are a lot of projects that fork (copy everything up until this moment) -other blockchains' source code and make small changes on top of it, without the -intent of proposing these changes back to the original repository. The process -of forking inherits all commits, but this is other people's work -- this is -not work done by the team that makes the fork. - -#### Example -For example, if a person forks the [Bitcoin Github -repository](https://github.com/bitcoin/bitcoin) they will inherit all 40,000+ -commits, while performing just one action of forking. - -### How Santiment measures development activity? - -At Santiment, we implemented a more reliable approach $-$ tracking the number of -[Github events](https://docs.github.com/en/rest/using-the-rest-api/github-event-types?apiVersion=2022-11-28) -that the project generates. Pushing a commit generates an event, -but there are also many other activities that generate an event: - -- Creating an Issue -- Creating a Pull Request -- Commenting an issue/Pull Request -- Forking/starring/watching a repository -- many others. - -More importantly, when a project is forked, it does not inherit any of the -already emitted events. Our custom method dramatically improves both accuracy -and serviceability of Github data. The reason is that the process of forking a -repository generates just a single `ForkEvent` instead creating an event for -every commit that gets inherited. - -At the time of writing this the [bitcoin](https://github.com/bitcoin/bitcoin) -repository has around 40k commits and [Bitoin -SV](https://github.com/bitcoin-sv/bitcoin-sv) repository has around 18.9k -commits. Let's take a look at the events counting approach: - -Bitcoin: ![bitcoin-dev-activity](./bitcoin-dev-activity.png) - -Bitcoin SV: ![bitcoin-sv-dev-activity](./bitcoin-sv-dev-activity.png) - -We observe that Bitcoin has a high development activity all the time. -Meanwhile, Bitcoin SV has 0 dev activity most of the time. - -If you want to learn more about the difference - and the benefits of our bespoke -approach - I highly suggest [this -piece](https://medium.com/santiment/tracking-github-activity-of-crypto-projects-introducing-a-better-approach-9fb1af3f1c32) -by Valentin, our ex-CTO. - ---- - -## As a Trading Strategy - -While not common, Development-related metrics can also be used as a novel -trading strategy. Some time ago, we tested a portfolio of only the top ERC20 -projects by development activity, refreshed each month. - -We backtested the strategy from August 2017 to October 2018. [The portfolio -1](https://santiment.net/blog/github-activity-portfolio/) turned a profit, but -didn't beat hodling BTC overall. -![dev-activity-backtest](./dev-activity-backtest.png) - -However, our portfolio was also more volatile than hodling over time, -registering significantly larger tops in January and May of 2018. If you were to -sell at one of those intersections instead, our Github portfolio would in fact -be the winner. - -As a custom metric, dev activity can help you understand a project's dedication -to its product, and in turn - its end users. - ---- diff --git a/src/docs/metrics/difficulty/index.md b/src/docs/metrics/difficulty/index.md deleted file mode 100644 index 4586735b7..000000000 --- a/src/docs/metrics/difficulty/index.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Difficulty -author: Filip -date: 2025-11-01 -description: Difficulty Metric ---- - -## Description -The difficulty metric in the PoW network measures how hard it is for miners to find a -valid hash for a new block. In bitcoin network it automatically adjusts roughly every -two weeks to maintain an average block time of 10 minutes, ensuring network stability -despite changes in total mining power. As more miners join the network, the difficulty -increases, making mining more challenging, while a drop in mining power lowers it. - -Difficulty Metric: -* `avg_difficulty` - The average Bitcoin network difficulty over a 24-hour period - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Scaling factor that indicates how much harder it is to mine a block compared to the -baseline difficulty of 1 - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for `bitcoin` - ---- - -### SanAPI - -Available under name: `avg_difficulty` - - -```graphql-explorer -{ - getMetric(metric: "avg_difficulty"){ - timeseriesDataJson( - slug: "bitcoin" - from: "2025-11-01T00:00:00Z" - to: "2025-11-10T00:00:00Z" - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/dormant-circulation/index.md b/src/docs/metrics/dormant-circulation/index.md deleted file mode 100644 index 983289c96..000000000 --- a/src/docs/metrics/dormant-circulation/index.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Dormant Circulation -author: Ivan -date: 2020-06-29 -description: Number of unique coins/tokens transferred after being idle for some time ---- - -## Definition - -Dormant Circulation shows number of unique coins/tokens transacted on a given day that -have not been moved for big amount of time. - -Examples: - -- `dormant_circulation_10y` - Shows how many coins/tokens that have not been moved - for more than 10 years were transacted during a day. This is useful for spotting - when really old Bitcoins move. -- `dormant_circulation_90d` - Shows how many coins/tokens that have not been moved - for more than 90 days were transacted during a day. This is the smallest interval - supported for that metric. - -There are also dormant circulation metrics `dormant_circulation_usd_*` that represent the USD value of all -unique coins or tokens that were transacted within a single day that have not been moved for some time. - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -Token/Coin amount - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Timebound - -[Timebound Metrics](/metrics/details/timebound) - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these -assets]() - -> **Note:** All dormant circulation metrics are available for the same set of assets. - ---- - -## SanAPI - -Available under the `dormant_circulation_` names. - -The smallest supported interval is 90 days. -The biggest supported interval is 10 years. - -```graphql-explorer -{ - getMetric(metric: "dormant_circulation_90d") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -The full list of Dormant Circulation metrics is: - -
    - -Open Metrics List - -- dormant_circulation_10y -- dormant_circulation_180d -- dormant_circulation_2y -- dormant_circulation_365d -- dormant_circulation_365d_change_1d -- dormant_circulation_365d_change_30d -- dormant_circulation_365d_change_7d -- dormant_circulation_3y -- dormant_circulation_5y -- dormant_circulation_90d -- dormant_circulation_usd_180d -- dormant_circulation_usd_180d_change_1d -- dormant_circulation_usd_180d_change_30d -- dormant_circulation_usd_180d_change_7d - -
    diff --git a/src/docs/metrics/dydx-derivatives/dydx-perpetual-funding-rate/index.md b/src/docs/metrics/dydx-derivatives/dydx-perpetual-funding-rate/index.md deleted file mode 100644 index e87a96ab2..000000000 --- a/src/docs/metrics/dydx-derivatives/dydx-perpetual-funding-rate/index.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: dYdX Contract Funding Rate -author: Lyudmil -date: 2022-02-08 -description: Amount of coin/tokens moved on-chain. ---- - -## Description - -Funding is calculated algorithmically based on the Index Price and sampled Mid-Market Prices for the perpetual. When the rate is positive (perpetual trades at a premium relative to index), traders who are long will make payments to traders who are short. When the rate is negative (perpetual trades at a discount relative to index), this is reversed and shorts will pay longs. Traders make or receive payments in proportion to the size of their market position. These payments are exchanged solely between traders, and are neither paid nor received by the exchange. - -More details on dYdX [web-site](https://help.dydx.exchange/en/articles/4797443-perpetual-funding-rate). - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Ratio - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Hourly Intervals](/metrics/details/frequency#hourly-frequency) - ---- - -## Latency - -[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -### SanAPI - -Available under the `dydx_perpetual_funding_rate` name. - -```graphql-explorer -{ - getMetric(metric: "dydx_perpetual_funding_rate") { - timeseriesDataJson( - slug: "bitcoin" - from: "2021-04-01T00:00:00Z" - to: "2021-04-07T00:00:00Z" - interval: "1h" - ) - } -} -``` diff --git a/src/docs/metrics/dydx-derivatives/index.md b/src/docs/metrics/dydx-derivatives/index.md deleted file mode 100644 index 8f0ad174a..000000000 --- a/src/docs/metrics/dydx-derivatives/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: dYdX Derivatives -author: Santiment Team -date: 2023-06-01 ---- - -[dYdX](https://dydx.exchange/) is a leading decentralized exchange that currently supports perpetual trading. dYdX runs on smart contracts on the Ethereum blockchain, and allows users to trade with no intermediaries. - -- [dYdX Perpetual Contract Funding Rate](/metrics/dydx-derivatives/dydx-perpetual-funding-rate) diff --git a/src/docs/metrics/emerging-trends/index.md b/src/docs/metrics/emerging-trends/index.md deleted file mode 100644 index 6b08153ad..000000000 --- a/src/docs/metrics/emerging-trends/index.md +++ /dev/null @@ -1,171 +0,0 @@ ---- -title: Emerging trends -author: Ivan Klimuk -date: 2025-07-10 -description: List of words getting more than the average social attraction in the past 24 hours ---- - -![Emerging trends on Sanbase](emerging-trends.png) - -## Definition - -The **Emerging trends** (or **Trending words**) is a list of words that describe -the topics which _emerged_ faster than any others over the last 24 hours. By -"emerging" we mean getting more social attraction from the crowd, being -discussed much more than any other topic. - -We detect these words by computing the so called _hype score_ for each single -word that is present in the [social data](/metrics/details/social-data/) after filtering -and cleaning the data. Once this number is calculated, the words are ranked -according to the corresponding scores in a descending order. The top 10 words in -the resulting list are the top emerging trends. - -We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. - ---- - -## Access - -The metric's realtime data is **free**. -The metric's historical data is with [restricted access](/metrics/details/access#restricted-access). - ---- - -### Filtering and Cleaning - -In order to reduce the level of noise, spam and duplicates while calculating the -hype scores, we apply some preprocessing to the text data, namely: - -1. Clean all the texts from - [stopwords](https://en.wikipedia.org/wiki/Stop_words) and non-alphabetic - characters. - -2. Transform each pair `(user_id, text_documents)` to a [bag of - words](https://en.wikipedia.org/wiki/Bag-of-words_model) representation and - remove all the bag of words duplicates. - -3. For all the text documents that have more than a certain amount of words in - general (usually 5) - remove the exact duplicates (i.e. messages that look - exactly the same are considered only once). - -These steps help to make the approach robust to spam and multiple replications -of the same word or short word combinations. - ---- - -### Hype Score - -After the processing is done, for each of the words we calculate the **hype -score** (or **trend score**). For any timestamp $t$ we define the hype score as -follows: - -$$ -HypeScore(t) := \frac{(v_t ^n - \frac{1}{14} \sum_{i=t-15}^{t-1} v_i^n) * v_t^n * -\log_{10} u_t}{1 + \frac{1}{14} \sum_{i=t-15}^{t-1} v_i^n} -$$ - -where: - -- $v_i^n$ is the _normalized_ social volume of the word at the moment $i$ (i.e. - the usual [social volume](/metrics/social-volume) - divided by the total amount of messages in that particular [data - source](/metrics/details/social-data/)), - -- $u_t$ is the total amount of unique users that have used the word under - consideration at least once. - -On an intuitive level the hype score tends to be a measuring of how rapidly the -social volume of a certain word increased over the last 24 hours in comparison -to the past 2 weeks. This is done by comparing the current social volume change -to the average social volume of the past 14 days. - -Additionally we multiply this factor by $\log(\text{unique\_users})$ $-$ this way words -with a high social volume and a relatively low amount of unique users, that -mentioned it at least once, will have a smaller hype score. For example, if a -given word was used many times by exactly one user (i.e. most probably it's -heavy spam) this word will have a hype score of **0** thanks to the -$\log(\text{unique\_users})$ component. On the other hand, words with 100 and 200 users -will have more or less the same chance to get a higher hype score. - -It's also worth noticing that we use the **normalized** social volume instead of -the regular one. This makes it easier to compare the resulting hype score across -different data sources with different average daily volumes of talks. - ---- - -### Ranking the Words - -Once the texts are cleaned and each word has it's hype score, we first rank the -words in descending order (the highest hype score goes to the top) and then -combine the results across different data sources if necessary: this is done by -averaging the hype score for each word across all desired data sources and -ranking the words afterwards again. In case a given word is present in source 1 -and is not present in source 2 we assume that it's hype score in the second data -source is 0. - ---- - -## Measuring Unit - -The [hype score](#hype-score) doesn't really have a qualitative meaning, it can -be treated as a relative number: the higher it gets - the faster a given word is -"emerging". - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -Emerging Trends are available at [hourly intervals](/metrics/details/frequency#hourly-frequency) - ---- - -## Latency - -Emerging Trends have [social data Latency](/metrics/details/latency#social-data-latency) - ---- - -## Available Assets - -The algorithm takes into account all the [social data](/metrics/details/social-data/), -so the list may or may not contain asset names and tickers. We do track the -emerging projects separately for the assets only, but currently it is not -available through any of the products. - ---- - -## How to Access - -### [Sanbase](https://app.santiment.net/social-trends) - -The emerging trends are available in the _`Labs`_ section. - -### [SanAPI](https://api.santiment.net) - -The emerging trends are available as part of the API, the metric is called -`getTrendingWords`: - -```graphql -{ - getTrendingWords( - from: "2020-01-01T12:00:00Z" - to: "2020-01-01T13:00:00Z" - size: 10 - interval: "1h" - ) { - datetime - topWords { - word - score - } - } -} -``` - -**[Run in Explorer]()** diff --git a/src/docs/metrics/etf-flow/index.md b/src/docs/metrics/etf-flow/index.md deleted file mode 100644 index 0a39d045f..000000000 --- a/src/docs/metrics/etf-flow/index.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: ETF Flow Metrics -author: Santiment Team -date: 2025-03-28 -description: Inflow/Outflow from ETF providers ---- - -## Description - -Those metrics provide insights into the movement of funds within Exchange-Traded Funds (ETFs), tracking both inflows and outflows. ETFs issue and redeem shares throughout trading hours and report at the end of the trading day. -The following two metrics help assess investor sentiment, liquidity trends, and overall market interest in ETFs from different providers. - -- `daily_etf_flow` - Represents the net amount of money flowing in and out of ETFs on a daily basis, measured in USD, and categorized by provider. -- `total_etf_flow` - Cumulative ETF flow since inception, reflecting the long-term investment trends and total net capital movements per provider in USD. - - - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -USD - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#daily-metrics-latency) - ---- - -## Available Assets - -- gbtc -- ibit -- fbtc -- arkb -- btco -- bitb -- hodl -- brrr -- btc -- btcw -- ezbtc - ---- - -### SanAPI - -`daily_etf_flow`: - -```graphql-explorer -{ - getMetric(metric: "daily_etf_flow") { - timeseriesDataJson( - selector: { slug: "gbtc" } - from: "2025-03-15T00:00:00Z" - to: "2020-03-30T00:00:00Z" - interval: "1d" - ) - } -} -``` - -`total_etf_flow`: - -```graphql-explorer -{ - getMetric(metric: "total_etf_flow") { - timeseriesDataJson( - selector: { slug: "gbtc" } - from: "2025-03-15T00:00:00Z" - to: "2020-03-30T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/eth-2/index.md b/src/docs/metrics/eth-2/index.md deleted file mode 100644 index 933689009..000000000 --- a/src/docs/metrics/eth-2/index.md +++ /dev/null @@ -1,260 +0,0 @@ ---- -title: ETH 2.0 Metrics -author: Maksim Razhev, Filip -date: 2021-01-28 -description: ETH 2.0 Metrics ---- - -## Description - -Metrics that show stats related to the ETH 2.0 Staking Contract - -- `eth2_stakers_count` - Amount of addresses that sent ETH to the ETH 2.0 Staking Contract -- `eth2_stakers_realized_value_usd_` - [Realized value](/metrics/realized-value) of stakers addresses. - Metric is available for different [time bounds](/metrics/details/timebound). -- `eth2_stakers_mvrv_usd_` - [MVRV](/metrics/mvrv) of stakers addresses. - Metric is available for different [time bounds](/metrics/details/timebound). -- `eth2_roi` - The annual return on staking in the ETH 2.0 contract - -ETH 2.0 histogram metrics - see [examples](#sanapi) for details how to query it: - -- `eth2_top_stakers` - Top addresses by staked amount -- `eth2_staked_amount_per_label` - Total staked amount by label -- `eth2_staked_address_count_per_label` - Amount of addresses that staked ETH by label - -Beacon chain metrics: - -- `eth_beacon_deposits` - Amount of ETH deposited into the Beacon Chain contract -- `eth_beacon_validator_withdrawals` - Withdrawals made by validators from the Ethereum Beacon Chain contract -- `eth_beacon_reward_withdrawals` - Withdrawals of rewards by validators from the Ethereum Beacon Chain contract - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -- `eth2_stakers_count` - Amount of addresses -- `eth2_roi` - Percents -- `eth2_stakers_realized_value_usd_` and `eth2_stakers_mvrv_usd_` - USD -- `eth_beacon_deposits`, `eth_beacon_validator_withdrawals` and - `eth_beacon_reward_withdrawals` - Amount in ETH - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -`ethereum` - ---- - -### SanAPI - -ETH 2.0 Staker Count: - -```graphql-explorer -{ - getMetric(metric: "eth2_stakers_count") { - timeseriesDataJson( - selector: { slug: "ethereum" } - from: "2020-12-05T00:00:00Z" - to: "2020-12-06T00:00:00Z" - interval: "5m" - ) - } -} -``` - -ETH 2.0 Staking ROI: - -```graphql-explorer -{ - getMetric(metric: "eth2_roi") { - timeseriesDataJson( - selector: { slug: "ethereum" } - from: "2020-12-05T00:00:00Z" - to: "2020-12-06T00:00:00Z" - interval: "5m" - ) - } -} -``` - -ETH 2.0 Total Staked Amount: - -```graphql-explorer -{ - getMetric(metric: "balance_per_owner") { - timeseriesDataJson( - selector: { - slug: "ethereum" - label: "eth2stakingcontract" - owner: "eth2stakingcontract" - } - from: "2020-12-05T00:00:00Z" - to: "2020-12-06T00:00:00Z" - interval: "5m" - ) - } -} -``` - -Staked amount per label: - -```graphql -{ - getMetric(metric: "eth2_staked_amount_per_label") { - histogramData( - selector: { slug: "ethereum" } - from: "utc_now-70d" - to: "utc_now" - ) { - values { - __typename - ... on StringLabelFloatValueList { - data { - label - value - } - } - } - } - } -} -``` - -[**Run in Explorer**]() - -Count of addresses that staked: - -```graphql -{ - getMetric(metric: "eth2_staked_address_count_per_label") { - histogramData( - selector: { slug: "ethereum" } - from: "utc_now-10d" - to: "utc_now" - ) { - values { - ... on StringLabelFloatValueList { - data { - label - value - } - } - } - } - } -} -``` - -[**Run in Explorer**]() - -Top stakers: - -```graphql -{ - getMetric(metric: "eth2_top_stakers") { - histogramData( - selector: { slug: "ethereum" } - from: "utc_now-10d" - to: "utc_now" - limit: 2 - ) { - values { - ... on StringAddressStringLabelFloatValueList { - data { - address - label - value - } - } - } - } - } -} -``` - -[**Run in Explorer**]() - -Available under the `eth2_stakers_realized_value_usd_` -and `eth2_stakers_mvrv_usd_` names. - -```graphql-explorer -{ - getMetric(metric: "eth2_stakers_realized_value_usd_365d") { - timeseriesDataJson( - slug: "ethereum" - from: "2023-01-01T00:00:00Z" - to: "2023-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -Available under the `eth_beacon_deposits`, `eth_beacon_validator_withdrawals` and -`eth_beacon_reward_withdrawals` names. - -```graphql-explorer -{ - getMetric(metric: "eth_beacon_deposits") { - timeseriesDataJson( - slug: "ethereum" - from: "2023-01-01T00:00:00Z" - to: "2023-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -
    -ETH 2.0 histogram metrics -- eth2_top_stakers -- eth2_staked_amount_per_label -- eth2_staked_address_count_per_label -
    - -
    -ETH 2.0 metrics -- eth_beacon_deposits -- eth_beacon_validator_withdrawals -- eth_beacon_reward_withdrawals -- eth2_stakers_count -- eth2_roi -- eth2_stakers_realized_value_usd_365d -- eth2_stakers_realized_value_usd_2y -- eth2_stakers_realized_value_usd_3y -- eth2_stakers_realized_value_usd_5y -- eth2_stakers_realized_value_usd_10y -- eth2_stakers_mvrv_usd_365d -- eth2_stakers_mvrv_usd_2y -- eth2_stakers_mvrv_usd_3y -- eth2_stakers_mvrv_usd_5y -- eth2_stakers_mvrv_usd_10y -
    diff --git a/src/docs/metrics/ethena-protocol/index.md b/src/docs/metrics/ethena-protocol/index.md deleted file mode 100644 index 3d39c47a7..000000000 --- a/src/docs/metrics/ethena-protocol/index.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Ethena Protocol -author: Filip -date: 2024-07-01 -description: Ethena Protocol Metrics ---- - -## Description -Ethena is a synthetic dollar protocol on Ethereum that offers a crypto-native financial solution -independent of traditional banking, along with a globally accessible dollar-denominated savings -instrument called the "Internet Bond". Ethena's synthetic dollar, USDe, achieves scalability and -stability by delta-hedging Ethereum and Bitcoin collateral. The stability of USDe's peg is -maintained through derivatives positions against protocol-held collateral. The "Internet Bond" -generates yield from staked assets and the funding and basis spread from perpetual and futures -markets, providing an on-chain crypto-native monetary solution. Ethena staking involves locking -USDe to earn rewards in the form of sUSDe, which represents staked USDe within the network. -This staking process supports the network's stability and governance, providing users with returns -while contributing to the overall robustness of the Ethena ecosystem. - -Ethena staking metrics: -* `ethena_staking_deposits` - Amount of USDe deposited into the staking contract -* `ethena_staking_withdrawals` - Amount of USDe withdrawn from the staking contract -* `ethena_staking_apy` - Interest rate paid for staking USDe - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -* `ethena_staking_deposits` and `ethena_staking_withdrawals` - Amount of USDe -* `ethena_staking_apy` - Percentage - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for `ethena-staked-usde` - ---- - -### SanAPI - -Deposit and withdraw metrics: `ethena_staking_deposits` and `ethena_staking_withdrawals` - -```graphql-explorer -{ - getMetric(metric: "ethena_staking_deposits"){ - timeseriesDataJson( - slug: "ethena-staked-usde" - from: "2024-06-01T00:00:00Z" - to: "2024-06-10T00:00:00Z" - interval: "1d") - } -} -``` - -Staking APY metric: `ethena_staking_apy` - -```graphql-explorer -{ - getMetric(metric: "ethena_staking_apy"){ - timeseriesDataJson( - slug: "ethena-staked-usde" - from: "2024-06-01T00:00:00Z" - to: "2024-06-10T00:00:00Z" - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/ethereum-fees/index.md b/src/docs/metrics/ethereum-fees/index.md deleted file mode 100644 index 51a2d2968..000000000 --- a/src/docs/metrics/ethereum-fees/index.md +++ /dev/null @@ -1,185 +0,0 @@ ---- -title: Ethereum fees -author: Filip -date: 2024-03-01 -description: Ethereum fees ---- - -## Description -Gas fees are the fees paid for the computational efforts required to execute a transaction or -operation within a smart contract on the Ethereum network. Each operation in a transaction consumes -a specific amount of gas. -The total gas fee you pay consists of several components: -- Base fee: This is a mandatory fee established by the network for processing a transaction. -- Priority fee: An additional, voluntary payment intended to motivate node operators to prioritize -your transaction. -- Units of gas used: Gas signifies computational effort. More complex tasks, such as interacting -with a smart contract, require more gas compared to simpler actions like sending a transaction. - -The base fee is computed independently of the current block and instead relies on the preceding blocks, -enhancing predictability for users regarding transaction fees. Upon block creation, this base fee -is burned, effectively removing it from circulation. - -The gas units consumed per transaction represent the amount of gas used during the transaction, -essentially reflecting the complexity of the transaction. - - -Ethereum fees metrics: -- `fees`: Total fees paid in ETH over a daily interval -- `fees_intraday`: Total fees paid in ETH over 5-minute time intervals -- `fees_usd`: Total fees paid in USD over a daily interval -- `fees_usd_intraday`: Total fees paid in USD over 5-minute time intervals - -Aggregated fees metrics: -- `average_fees_usd`: Average fees paid in USD over a daily interval -- `average_fees_usd_5m`: Average fees paid in USD over 5-minute time intervals -- `median_fees_usd`: Median fees paid in USD over a daily interval -- `median_fees_usd_5m`: Median fees paid in USD over 5-minute time intervals - -Fees burnt metrics: -- `fees_burnt_5m`: Fees burnt (removed from circulation) in ETH within a 5-minute interval -- `fees_burnt_usd_5m`: Fees burnt (removed from circulation) in USD within a 5-minute interval - -Fees to network circulation metric: -- `fees_to_network_circulation_usd_1d`: Calculated using the formula: -$$ -\frac{\text{fees} * \text{daily\_avg\_price\_usd}}{\text{network\_circulation\_usd\_1d}} -$$ -where $\text{network\_circulation\_usd\_1d}$ represents the total value in USD of all coins moved on Ethereum - -Gas used metrics: -- `avg_gas_used` - Average amount of gas consumed per transaction over 5-minute time intervals in Gwei -- `total_gas_used` - Total amount of gas used over 5-minute time intervals - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -- Fees metrics - amount in ETH or USD -- `avg_gas_used` - amount in Gwei -- `total_gas_used` - gas units - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for `ethereum` - ---- - -### SanAPI - -Fees metrics in ETH: `fees` and `fees_intraday` - -```graphql-explorer -{ - getMetric(metric: "fees") { - timeseriesDataJson( - slug: "ethereum" - from: "2024-03-01T00:00:00Z" - to: "2024-03-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -Fees metrics in USD: `fees_usd` and `fees_usd_intraday` - -```graphql-explorer -{ - getMetric(metric: "fees_usd_intraday") { - timeseriesDataJson( - slug: "ethereum" - from: "2024-03-01T00:00:00Z" - to: "2024-03-07T00:00:00Z" - interval: "5m" - ) - } -} -``` - -Aggregated fees metrics: `average_fees_usd`, `average_fees_usd_5m`, -`median_fees_usd` and `median_fees_usd_5m` - -```graphql-explorer -{ - getMetric(metric: "average_fees_usd_5m") { - timeseriesDataJson( - slug: "ethereum" - from: "2024-03-01T00:00:00Z" - to: "2024-03-07T00:00:00Z" - interval: "5m" - ) - } -} -``` - -Fees burnt metrics: `fees_burnt_5m` and `fees_burnt_usd_5m` - -```graphql-explorer -{ - getMetric(metric: "fees_burnt_5m") { - timeseriesDataJson( - slug: "ethereum" - from: "2024-03-01T00:00:00Z" - to: "2024-03-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -Fees to network circulation metric: `fees_to_network_circulation_usd_1d` - -```graphql-explorer -{ - getMetric(metric: "fees_to_network_circulation_usd_1d") { - timeseriesDataJson( - slug: "ethereum" - from: "2024-03-01T00:00:00Z" - to: "2024-03-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -Gas used metrics: `avg_gas_used` and `total_gas_used` - -```graphql-explorer -{ - getMetric(metric: "avg_gas_used") { - timeseriesDataJson( - slug: "ethereum" - from: "2024-03-01T00:00:00Z" - to: "2024-03-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/ethereum-spent/index.md b/src/docs/metrics/ethereum-spent/index.md deleted file mode 100644 index faa19315b..000000000 --- a/src/docs/metrics/ethereum-spent/index.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: Ethereum Spent -author: Ivan -date: 2020-06-29 -description: Ethereum spent of ERC20 project ICO wallets ---- - -## Definition - -Track the amount of ETH leaving the wallets where ICO funds were collected. - -> Note: Transactions are not followed to exchanges. - -#### Example - -Below is the ETH spent over time of Golem plotted against the Golem price and ETH price. -Enabling the ETH is useful to give you an approximation for the value in USD that this -ETH movement generated. Most often ICOs move ethereum out of their ICO wallets to -sell them on exchanges to fund the project. - -![golem-eth-spent](golem-eth-spent.png) - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Ethereum amount - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these -assets](https://api.santiment.net/graphiql?query=%7B%0A%20%20allErc20Projects%20%7B%0A%20%20%20%20slug%0A%20%20%7D%0A%7D%0A) - ---- - -## SanAPI - -### Timeseries data - -Available as a field of the project graphql type, fetch the amount of ETH spent for every `interval` in the time range. - -```graphql -{ - projectBySlug(slug: "santiment") { - ethSpentOverTime( - from: "2019-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "30d" - ) { - datetime - ethSpent - } - } -} -``` - -**[Run in -Explorer]()** - -### Aggregated data per project - -In order to fetch how many ETH every project spent in a the last N days, you can execute the following GraphQL query (the `days` can contain any number of days): - -```graphql -{ - allProjects { - slug - ethSpent(days: 30) - } -} -``` - -**[Run in -Explorer]()** diff --git a/src/docs/metrics/exchange-funds-flow/index.md b/src/docs/metrics/exchange-funds-flow/index.md deleted file mode 100644 index 0f3236c54..000000000 --- a/src/docs/metrics/exchange-funds-flow/index.md +++ /dev/null @@ -1,160 +0,0 @@ ---- -title: Exchange Inflow/Outflow -author: Santiment Team -date: 2021-11-25 -description: Amount of coins/token going in or out of exchanges ---- - -## Definition - -There are three separate metrics regarding exchange funds flow: - -- `exchange_inflow` - How many coins/tokens are moved from non-exchange to - exchange wallets. -- `exchange_outflow` - How many coins/tokens are moved from exchange to - non-exchange wallets. -- `exchange_balance` - The difference inflow-outflow (inflow minus outflow). The - usefulness of this metric comes from the fact that transactions from - missing/unknown exchange wallets to missing/unknown exchange wallets cancel - each other. - -Some of the metrics have a USD equivalent - the raw value is multiplied by the -price of the coin/token at the given date. The available USD metrics are -`exchange_inflow_usd` and `exchange_outflow_usd` - -![bitcoin funds in/outflow](bitcoin-funds-inflow-outflow.png) -![bitcoin funds balance](bitcoin-funds-flow-balance.png) - -For an exchange-specific data please refer to [that page](/metrics/labeled-exchange) - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Amount of coins/tokens - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Change Metrics - -[Change Metrics:](/metrics/details/change_metrics) - -* `exchange_inflow_change_1d` -* `exchange_inflow_change_7d` -* `exchange_inflow_change_30d` - -* `exchange_outflow_change_1d` -* `exchange_outflow_change_7d` -* `exchange_outflow_change_30d` - -* `exchange_balance_change_1d` -* `exchange_balance_change_7d` -* `exchange_balance_change_30d` - -* `exchange_inflow_usd_change_1d` -* `exchange_inflow_usd_change_7d` -* `exchange_inflow_usd_change_30d` - -* `exchange_outflow_usd_change_1d` -* `exchange_outflow_usd_change_7d` -* `exchange_outflow_usd_change_30d` - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Use Case - -It's not uncommon for large inflows of tokens to the exchange to precede -rapid price growth. - -Here's that exact scenario in case of -[aeternity](https://aeternity.com/), a blockchain platform that enables -scalable smart contracts: - -![aeternity funds flow balance](aeternity-funds-flow-balance.png) - -> Note: Aeternity moved from ERC20 to their own blockchain and Santiment does not have data for this new blockchain. - -When a large amount of tokens flow out of the exchange, on the other -hand, the price is likely to fall soon thereafter. - ---- - -## Available Assets - -Available for [these -assets]() - -> Note: All of the metrics are available for the same set of assets. - ---- - -## SanAPI - -Available under the `exchange_balance`, `exchange_inflow` and `exchange_outflow` names. - -```graphql-explorer -{ - getMetric(metric: "exchange_balance") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T12:00:00Z" - to: "2020-01-03T12:00:00Z" - interval: "1d" - ) - } -} -``` - ---- - -```graphql-explorer -{ - getMetric(metric: "exchange_inflow") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T12:00:00Z" - to: "2020-01-03T12:00:00Z" - interval: "1d" - ) - } -} -``` - ---- - -```graphql-explorer -{ - getMetric(metric: "exchange_outflow") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T12:00:00Z" - to: "2020-01-03T12:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/finalized/index.md b/src/docs/metrics/finalized/index.md deleted file mode 100644 index e5bfc9194..000000000 --- a/src/docs/metrics/finalized/index.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Finalized Metrics -headline: "Finalized metrics via onlyFinalizedData" -description: "Request guaranteed, finalized values for select metrics via the onlyFinalizedData flag in our GraphQL API." -author: Santiment Team -date: 2025-10-06 ---- - -Santiment provides a way to access finalized metric data points through our API. -Data points are flagged as final for a given interval, meaning no further backfills or adjustments will occur for that timestamp. This is especially useful when you need guaranteed consistency for analysis, dashboards, or reporting. - - -Finalized here means the value is considered final for the requested interval. It does not change afterwards due to late-arriving data or corrections. - - - - -Set `onlyFinalizedData: true` in your GraphQL query. For example, requesting daily finalized Transaction Volume for Bitcoin Cash: - -```graphql-explorer -{ - getMetric(metric: "transaction_volume"){ - timeseriesDataJson( - selector:{slug: "bitcoin-cash"} - from: "utc_now-6h" - to: "utc_now" - interval: "5m" - onlyFinalizedData: true - ) - } -} -``` - - - - - - -This feature is currently in testing and implemented for Bitcoin Cash and for a limited subset of metrics: - -- `active_addresses_1h` -- `active_addresses_24h` -- `active_addresses_30d` -- `active_addresses_7d` -- `active_addresses_delta_1h` -- `active_addresses_delta_24h` -- `active_addresses_delta_30d` -- `active_addresses_delta_7d` -- `nvt_transaction_volume` -- `stack_age_consumed_5min` -- `transaction_volume` -- `transaction_volume_5min` - -The assets and metrics coverage will expand in the future. - - - - -Requesting finalized data introduces additional latency. - - - - -- [Frequency](/metrics/details/frequency) -- [Latency](/metrics/details/latency) -- [Data Type](/metrics/details/data-type) - - - diff --git a/src/docs/metrics/ftx-derivatives/ftx-perpetual-funding-rate/index.md b/src/docs/metrics/ftx-derivatives/ftx-perpetual-funding-rate/index.md deleted file mode 100644 index f37dc83de..000000000 --- a/src/docs/metrics/ftx-derivatives/ftx-perpetual-funding-rate/index.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: FTX Contract Funding Rate -author: Lyudmil -date: 2022-02-08 -description: Amount of coin/tokens moved on-chain. ---- - -## Description - -If the perpetual is trading at a premium to the underlying index, long positions pay funding to the short positions. If the perpetual is trading at a discount to the underlying index, short positions pay funding to long positions. The funding rate to be paid/received is determined by the following formula: - -``position size * TWAP of ((future mark price - index) / index) / 24`` - -More details on FTX [web-site](https://help.ftx.com/hc/en-us/articles/360027946571-Funding). - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Ratio - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Hourly Intervals](/metrics/details/frequency#hourly-frequency) - ---- - -## Latency - -[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -### SanAPI - -Available under the `ftx_perpetual_funding_rate` name. - -```graphql-explorer -{ - getMetric(metric: "ftx_perpetual_funding_rate") { - timeseriesDataJson( - slug: "bitcoin" - from: "2021-04-01T00:00:00Z" - to: "2021-04-07T00:00:00Z" - interval: "1h" - ) - } -} -``` diff --git a/src/docs/metrics/ftx-derivatives/index.md b/src/docs/metrics/ftx-derivatives/index.md deleted file mode 100644 index edb852edc..000000000 --- a/src/docs/metrics/ftx-derivatives/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: FTX Derivatives -author: Santiment Team -date: 2023-06-01 ---- - -FTX is a cryptocurrency exchange built by traders, for traders. FTX offers innovative products including industry-first derivatives, options, volatility products and leveraged tokens. We strive to develop a platform robust enough for professional trading firms and intuitive enough for first-time users. - -- [FTX Perpetual Contract Funding Rate](/metrics/ftx-derivatives/ftx-perpetual-funding-rate) diff --git a/src/docs/metrics/fully-diluted-valuation/index.md b/src/docs/metrics/fully-diluted-valuation/index.md deleted file mode 100644 index d73964d77..000000000 --- a/src/docs/metrics/fully-diluted-valuation/index.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Fully Diluted Valuation in USD -author: Ante -date: 2024-09-03 -description: Fully Diluted Valuation in USD ---- - -## Definition - -The fully diluted valuation in USD is derived as the price of an asset in USD multiplied by the total supply of the same asset. - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -USD - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -Available for [these assets](https://api.santiment.net/graphiql?query=%7B%0A%20%20getMetric(metric%3A%20%22fully_diluted_valuation_usd%22)%7B%0A%20%20%20%20metadata%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D) - ---- - -## SanAPI - -```graphql-explorer -{ - getMetric(metric: "fully_diluted_valuation_usd") { - timeseriesDataJson( - slug: "ethereum" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/funding-rates-aggregated/index.md b/src/docs/metrics/funding-rates-aggregated/index.md deleted file mode 100644 index 06db64694..000000000 --- a/src/docs/metrics/funding-rates-aggregated/index.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Funding Rates Aggregated -author: Ante -date: 2023-11-28 -description: Total number of outstanding or open contracts in the market. ---- - -## Definition -The funding rate is a recurring fee that long positions pay to short positions, or vice versa, at predetermined intervals (usually every 8 hours). The goal is to ensure that the price of the perpetual contract stays close to the spot price of the underlying asset. -Perpetual futures contracts are a type of derivative that tracks the price of an underlying asset and is designed to closely mimic the spot market. - -Funding rates aggregated metrics use [Open Interest](/metrics/open-interest) for aggregation. Meaning the contract with the biggest open interest will have the biggest impact on the final funding rate aggregated value. -There are three types of funding rates aggregated metrics: -- Funding rates aggregated by exchange - represents the aggregation of all funding rates by open interest on given exchange for a given asset -- Funding rates aggregated by settlement currency - represents the aggregation of all funding rates by open interest per settlement currency for a given asset -- Total funding rates aggregated by asset - represents the aggregation of all funding rates by open interest for a given asset ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -Decimal percentage - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-minute Intervals](/metrics/details/frequency#five-minute-freqency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#funding-rates-latency) - ---- - -## Available Assets - -- Funding rates aggregated by exchange is available for [these - assets]() - -- Funding rates aggregated by settlement currency is available for [these - assets]() - -- Total funding rates aggregated by asset is available for [these - assets]() - ---- - -## Available Exchanges - -`Binance`, `Bitfinex`, `Bitget`, `Bitmex`, `Btcex`, `Bybit`, `Crosstower`, `Cryptodotcom`, `Deribit`, `Kraken`, `Okex` - ---- - -## SanAPI - -- Funding rates aggregated by exchange available under the `funding_rates_aggregated_by_exchange` name. -- Funding rates aggregated by settlement currency is available for `funding_rates_aggregated_by_settlement_currency` name. -- Total funding rates aggregated by asset is available for `total_funding_rates_aggregated_per_asset` name. - -```graphql-explorer -{ - getMetric(metric: "funding_rates_aggregated_by_exchange") { - timeseriesDataJson( - selector: { - slug: "ethereum" - owner: "binance" - } - from: "2023-11-27T00:00:00Z" - to: "2023-11-28T00:00:00Z" - interval: "5m" - ) - } -} -``` - - ---- - -```graphql-explorer -{ - getMetric(metric: "funding_rates_aggregated_by_settlement_currency") { - timeseriesDataJson( - selector: { - slug: "ethereum" - owner: "USDT" - } - from: "2023-11-27T00:00:00Z" - to: "2023-11-28T00:00:00Z" - interval: "5m" - ) - } -} -``` - - - ---- - -```graphql-explorer -{ - getMetric(metric: "total_funding_rates_aggregated_per_asset") { - timeseriesDataJson( - selector: { - slug: "ethereum" - } - from: "2023-11-27T00:00:00Z" - to: "2023-11-28T00:00:00Z" - interval: "5m" - ) - } -} -``` diff --git a/src/docs/metrics/gho-savings/index.md b/src/docs/metrics/gho-savings/index.md deleted file mode 100644 index e45970eca..000000000 --- a/src/docs/metrics/gho-savings/index.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: GHO Savings -author: Filip -date: 2025-10-01 -description: GHO Savings Metrics ---- - -## Description -GHO Savings is a feature within the Aave Protocol that allows users to deposit the GHO -stablecoin to earn a passive yield through the GHO Savings Rate (GSR). When users deposit -GHO into the savings contract, they receive sGHO tokens, which represent their deposit -and continuously accrue interest at the current GSR. This mechanism encourages long-term -GHO holding, enhances liquidity stability, and provides users with a low-risk way to earn -yield directly within the Aave ecosystem. - -Sky Savings metrics: -* `gho_savings_deposits` - Amount of GHO deposited into the savings contract -* `gho_savings_withdrawals` - Amount of GHO withdrawn from the savings contract -* `gho_savings_total_supplied` - Total supply of GHO in the savings contract - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -Amount of GHO - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for `gho` - ---- - -### SanAPI - -Deposit and withdraw metrics: `gho_savings_deposits` and `gho_savings_withdrawals` - -```graphql-explorer -{ - getMetric(metric: "gho_savings_deposits"){ - timeseriesDataJson( - slug: "gho" - from: "2025-10-01T00:00:00Z" - to: "2025-10-07T00:00:00Z" - interval: "1d") - } -} -``` - -Total supplied metric: `gho_savings_total_supplied` - -```graphql-explorer -{ - getMetric(metric: "gho_savings_total_supplied"){ - timeseriesDataJson( - slug: "gho" - from: "2025-10-01T00:00:00Z" - to: "2025-10-07T00:00:00Z" - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/gini-index/index.md b/src/docs/metrics/gini-index/index.md deleted file mode 100644 index c34249e96..000000000 --- a/src/docs/metrics/gini-index/index.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Gini Index -author: Filip -date: 2024-03-01 -description: Gini index ---- - -## Description -The Gini index is a statistical measure of income or wealth distribution within a population, -ranging from 0 (perfect equality) to 1 (perfect inequality). It quantifies the extent of economic -inequality, with lower values indicating more equitable distributions and higher values indicating -greater disparities. - -Mathematically, the Gini index is calculated using the Lorenz curve, which plots the cumulative share -of income or wealth held by the bottom x% of the population against the cumulative share of the -population. The Gini index is then calculated as the area between the Lorenz curve and the line of -perfect equality, divided by the total area under the line of perfect equality. - -The Gini index can also be applied to cryptocurrencies to measure the distribution of wealth or -coins within a particular cryptocurrency ecosystem. By analyzing the distribution of cryptocurrency -holdings among addresses or users, the Gini index can provide insights into the concentration of -wealth or coins within the cryptocurrency network. - - -Gini index metric: -* `gini_index` - Gini index - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Value between 0 and 1 - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -### SanAPI - -Available under name: `gini_index` - - -```graphql-explorer -{ - getMetric(metric: "gini_index"){ - timeseriesDataJson( - slug: "bitcoin" - from: "2024-01-01T00:00:00Z" - to: "2024-02-01T00:00:00Z" - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/historical-balance/index.md b/src/docs/metrics/historical-balance/index.md deleted file mode 100644 index 598e4df8d..000000000 --- a/src/docs/metrics/historical-balance/index.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Historical Balance -author: Yury -date: 2022-04-21 -description: Metric returns historical balance for a chain address / contract ---- - -## Definition - -Metric returns historical balance for a chain address / contract -[Example of usage Historical Balance on Sanbase](https://app.santiment.net/labs/balance?address=0x876eabf441b2ee5b5b0554fd502a8e0600950cfa&assets[]=shiba-inu&from=2021-10-20T19%3A00%3A00.000Z&isLog=false&priceMetrics[]=shiba-inu&to=2022-04-21T18%3A59%3A59.999Z) - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Number of tokens - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## API - -Available under the `historicalBalance` name: - -```graphql -query historicalBalance($from: DateTime!, $to: DateTime!, $address: String!, $interval: interval!, $slug: String!, $infrastructure: String) { - historicalBalance( - address: $address - interval: $interval - from: $from - to: $to - selector: {slug: $slug, infrastructure: $infrastructure} - ) { - datetime - balance - } -} -``` - -Query variables: -```json -{ - "address": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", - "from": "2021-10-17T21:00:00.000Z", - "interval": "4h", - "metric": "historicalBalance", - "slug": "weth", - "to": "2022-04-18T20:59:59.999Z" -} -``` - -[**Run in explorer**](https://api.santiment.net/graphiql?query=query%20historicalBalance(%24from%3A%20DateTime!%2C%20%24to%3A%20DateTime!%2C%20%24address%3A%20String!%2C%20%24interval%3A%20interval!%2C%20%24slug%3A%20String!%2C%20%24infrastructure%3A%20String)%20%7B%0A%20%20historicalBalance(%0A%20%20%20%20address%3A%20%24address%0A%20%20%20%20interval%3A%20%24interval%0A%20%20%20%20from%3A%20%24from%0A%20%20%20%20to%3A%20%24to%0A%20%20%20%20selector%3A%20%7Bslug%3A%20%24slug%2C%20infrastructure%3A%20%24infrastructure%7D%0A%20%20)%20%7B%0A%20%20%20%20datetime%0A%20%20%20%20balance%0A%20%20%7D%0A%7D%0A&variables=%20%7B%0A%09%09%22address%22%3A%20%220xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d%22%2C%0A%09%09%22from%22%3A%20%222021-10-17T21%3A00%3A00.000Z%22%2C%0A%09%09%22interval%22%3A%20%224h%22%2C%0A%09%09%22metric%22%3A%20%22historicalBalance%22%2C%0A%09%09%22slug%22%3A%20%22weth%22%2C%0A%09%09%22to%22%3A%20%222022-04-18T20%3A59%3A59.999Z%22%0A%09%7D) diff --git a/src/docs/metrics/huobi-derivatives/huobi-perpetual-funding-rate/index.md b/src/docs/metrics/huobi-derivatives/huobi-perpetual-funding-rate/index.md deleted file mode 100644 index a9816f717..000000000 --- a/src/docs/metrics/huobi-derivatives/huobi-perpetual-funding-rate/index.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Huobi Contract Funding Rate -author: Lyudmil -date: 2022-02-08 -description: Amount of coin/tokens moved on-chain. ---- - -## Description - -Funding rate aims to ensure that the transaction price of Perpetual Swap closely follows the underlying reference price. The Funding rate for each period is calculated from the data of the previous period and has been determined at the beginning of the current period. It will not be changed during the period and will be applied in funding calculation at the end of the current period. Meanwhile, in this period, the estimated funding rate for the next period is calculated every minute, and the last calculated estimated funding rate will be used as the rate for the next period. - -More details on Huobi [web-site](https://help.dydx.exchange/en/articles/4797443-perpetual-funding-rate). - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Ratio - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[8-Hour Intervals](/metrics/details/frequency#hourly-frequency) - ---- - -## Latency - -[Funding Rates Latency](/metrics/details/latency#funding-rates-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -### SanAPI - -Available under the `huobi_perpetual_funding_rate` name. - -```graphql-explorer -{ - getMetric(metric: "huobi_perpetual_funding_rate") { - timeseriesDataJson( - slug: "bitcoin" - from: "2021-04-01T00:00:00Z" - to: "2021-04-07T00:00:00Z" - interval: "8h" - ) - } -} -``` diff --git a/src/docs/metrics/huobi-derivatives/index.md b/src/docs/metrics/huobi-derivatives/index.md deleted file mode 100644 index 1f3b2c9c7..000000000 --- a/src/docs/metrics/huobi-derivatives/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Huobi Derivatives -author: Santiment Team -date: 2023-06-01 ---- - -[Huobi](https://huobi.com/) is a world-leading Bitcoin (BTC) exchange. They offer clients digital currency announcements including USDT, BTC, ETH, EOS, XPR, LTC, etc. They're more authoritative in Bitcoin price and markets than other exchanges. Huobi Trading Platform offers the most trading and investment information on digital assets. - -- [Huobi Perpetual Contract Funding Rate](/metrics/huobi-derivatives/huobi-perpetual-funding-rate) diff --git a/src/docs/metrics/index.md b/src/docs/metrics/index.md deleted file mode 100644 index 22e3a7e5f..000000000 --- a/src/docs/metrics/index.md +++ /dev/null @@ -1,212 +0,0 @@ ---- -title: Santiment Crypto Metrics Overview -headline: "Crypto Metrics: Explore our Set of Onchain Social & Dev Metrics" -description: "Crypto metrics to delve into key on-chain, social, financial and development data to better understand and navigate the ever-evolving cryptocurrency landscape" -author: Santiment Team -date: 2024-04-17 ---- - - - - - -There are metrics that are deprecated, scheduled for deprecation, or the -metrics are available under a new name and the old name should be not used. - -- [Deprecated Metrics](/metrics/deprecated-metrics) -- [Renamed Metrics](/metrics/renamed-metrics) - - - - - -- [Breakdown of Santiment's Top 15 Metrics](https://www.youtube.com/watch?v=FFJB48Z8tfM) -- [Top metrics for new users](https://www.youtube.com/watch?v=c6q4RsQvA58) -- [Finding future crypto pumps](https://www.youtube.com/watch?v=2UpK0CnzzuE) -- [Social Trends metrics](https://www.youtube.com/watch?v=p60ZlNes8WEo) -- [Using Top Stakeholders metrics](https://www.youtube.com/watch?v=lLyd8GzPixY) -- [How to use MVRV](https://www.youtube.com/watch?v=vbYQLNJ40yw) - - - - - -- [Finalized Metrics](/metrics/finalized) - - - - - -Traditional fundamentals including price, volume and market cap, mean coin age - -- [Price in USD, BTC and USDT](/metrics/price) -- [Marketcap in USD](/metrics/marketcap) -- [Trading Volume in USD](/metrics/trading-volume) -- [Fully Diluted Valuation in USD](/metrics/fully-diluted-valuation) -- [Decentralized Exchange Metrics](/metrics/decentralized-exchange-metrics) -- [Ethereum Fees](/metrics/ethereum-fees) -- [Ethereum Spent](/metrics/ethereum-spent) -- [Mean Coin Age](/metrics/mean-coin-age) -- [OHLC (Open-High-Low-Close)](/metrics/price/#ohlc) -- [Price Volatility](/metrics/price-volatility) -- [RSI](/metrics/rsi) -- [Annual Inflation Rate](/metrics/annual-inflation-rate) -- [Gini Index](/metrics/gini-index) -- [Transacted Coin Acquisition Cost](/metrics/transacted-coin-acquisition-cost) -- [Daily Aggregated Financial Metrics in USD](/metrics/daily-aggregated-financial-metrics) -- [BTC and S&P 500 Price Divergence](/metrics/btc-and-s-and-p-500-price-divergence) -- [M2 Money Supply](/metrics/m2-money-supply) - - - - - -Metrics build on top of [Social Data](/metrics/details/social-data) - -They are taken from measuring social activity on crypto-related forums and -channels, plus custom sentiment measurements analyzing crowd behavior. - -- [Community Messages Count](/metrics/community-messages-count) -- [Community Social Volume](/metrics/community-social-volume) -- [Emerging Trends](/metrics/emerging-trends) -- [Sentiment Metrics](/metrics/sentiment-metrics) -- [Social Dominance](/metrics/social-dominance) -- [Social Volume](/metrics/social-volume) -- [Social Volume AI](/metrics/social-volume-ai) -- [Unique Social Volume](/metrics/unique-social-volume) -- [Trending Words Rank](/metrics/trending-words-rank) - - - - - -[Development Activity Metrics](/metrics/development-activity) are used to measure a team’s development activity. - -- [Development Activity](/metrics/development-activity/development-activity) -- [Github Activity](/metrics/development-activity/github-activity) -- [Development Activity Contributors Count](/metrics/development-activity/development-activity-contributors-count) -- [Development Activity](/metrics/development-activity/development-activity-contributors-count) - - - - - -- [MVRV](/metrics/mvrv) -- [NVT](/metrics/nvt) -- [Realized Value](/metrics/realized-value) -- [Mean Realized Price](/metrics/mean-realized-price) -- [Network Profit Loss](/metrics/network-profit-loss) -- [Realized Market Capitalization Hodl Waves](/metrics/realized-market-capitalization-hodl-waves) - - - - - -- [Daily Active Addresses](/metrics/daily-active-addresses) -- [Active Addresses 24h](/metrics/active-addresses-24h) -- [Active Deposits](/metrics/active-deposits) -- [Active Withdrawals](/metrics/active-withdrawals) -- [Network Growth](/metrics/network-growth) - - - - - -- [Age Consumed](/metrics/age-consumed) -- [Amount in Top Holders](/metrics/amount-in-top-holders) -- [Bitcoin ETF Volume](/metrics/bitcoin-etf-volume) -- [Circulation](/metrics/circulation) -- [CrvUSD Savings](/metrics/crvusd-savings) -- [Difficulty](/metrics/difficulty) -- [Dormant Circulation](/metrics/dormant-circulation) -- [ETF Flow](/metrics/etf-flow) -- [ETH 2.0](/metrics/eth-2) -- [Ethena Protocol](/metrics/ethena-protocol) -- [Exchange Funds Flow](/metrics/exchange-funds-flow) -- [GHO Savings](/metrics/gho-savings) -- [Labeled Balance](/metrics/labeled-balance) -- [Labeled Exchange](/metrics/labeled-exchange) -- [Lending and Borrowing Protocols](/metrics/lending-and-borrowing-protocols) -- [MakerDAO DAI Savings Rate](/metrics/makerdao-dai-savings-rate) -- [New Deployed Contracts](/metrics/new-deployed-contracts) -- [Pendle Markets](/metrics/pendle-markets) -- [Sky Savings](/metrics/sky-savings) -- [Spent Coins Age Band](/metrics/spent-coins-age-band) -- [Stock To Flow ratio](/metrics/stock-to-flow) -- [Supply Distribution](/metrics/supply-distribution) -- [Supply On Or Outside Exchanges](/metrics/supply-on-or-outside-exchanges) -- [Thermocap](/metrics/thermocap) -- [Top Holders](/metrics/top-holders) -- [Total Supply](/metrics/total-supply) -- [Transaction Count](/metrics/transaction-count) -- [Transaction Size](/metrics/transaction-size) -- [Transaction Volume](/metrics/transaction-volume) -- [Transaction Volume In Profit Or Loss](/metrics/transaction-volume-in-profit-or-loss) -- [Velocity](/metrics/velocity) -- [Whale Transaction Count](/metrics/whale-transaction-count) -- [Whale Transaction Volume](/metrics/whale-transaction-volume) - - - - - -- [Funding Rates Aggregated](/metrics/funding-rates-aggregated) -- [Open Interest](/metrics/open-interest) -- [BitMEX](/metrics/bitmex-derivatives) -- [Binance](/metrics/binance-derivatives) -- [Bitfinex](/metrics/bitfinex-derivatives) -- [Deribit](/metrics/deribit-derivatives) -- [FTX](/metrics/ftx-derivatives) -- [dYdX](/metrics/dydx-derivatives) -- [Huobi](/metrics/huobi-derivatives) - - - - - -- [NFT Collection Holders Balance](/metrics/nft-collection-holders-balance) -- [NFT Collection Price](/metrics/nft-collection-price) -- [NFT Market Volume](/metrics/nft-market-volume) -- [NFT Network Profit Loss](/metrics/nft-network-profit-loss) -- [NFT Trades Count](/metrics/nft-trades-count) -- [NFT Trade Volume USD](/metrics/nft-trade-volume-usd) - - - - - -We have a bunch of API methods related to blockchain addresses. -The list of supported blockchains [can be found here](/sanapi/supported-blockchains/). -Some of this methods return [timeseries](/sanapi/metrics/#timeseriesdata) and other return tables, eg "Top Trasfres Table". - -- [Historical Balance](/metrics/historical-balance) -- [Labelled Historical Balance](/metrics/labelled-historical-balance) -- [Latest Transactions](/metrics/latest-transactions) - - -- [Contract Transaction Count](/metrics/contract-transactions-count) -- [Contract Interacting Address Count](/metrics/contract-interacting-address-count) - - - - - -[XRP Ledger (XRPL)](https://xrpl.org/) is a decentralized, public blockchain led by a global developer community. - -Santiment provides key metrics about the XRPL Chain which are listed below. -The rest of metrics are also available for XRP. - -The XRP-specific metrics are: - -#### Holders metrics - -- [Number of accounts](/metrics/xrpl-metrics/number-of-accounts) - -#### Activity metrics - -- [DEX Volume in USD](/metrics/xrpl-metrics/dex-volume) -- [Number of assets issued](/metrics/xrpl-metrics/assets-issued) -- [Number of active trustlines](/metrics/xrpl-metrics/trustline-count) -- [Liquidty in XRPL AMM Pools](/metrics/xrpl-metrics/liquidity-amm-pools) - - diff --git a/src/docs/metrics/labeled-balance/index.md b/src/docs/metrics/labeled-balance/index.md deleted file mode 100644 index 26b3eaa45..000000000 --- a/src/docs/metrics/labeled-balance/index.md +++ /dev/null @@ -1,164 +0,0 @@ ---- -title: Labeled Balance -author: Maksim Razhev -date: 2021-01-28 -description: Labeled Balance Metrics ---- - -## Description -Metrics that show labeled addresses inflow, outflow and balances - -* `inflow_per_label_and_owner` - inflow of a given owner -* `outflow_per_label_and_owner` - outflow of a given owner -* `balance_per_label_and_owner_delta` - balance change of a given owner -* `balance_per_owner` - balance of a given owner - -Please note that metrics may undergo changes in historical values due to automated recalculations triggered monthly. We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. Additionally, adjustments to labels automatically trigger recalculation of labeled balances. - -Available [labels](/labels): -* `centralized_exchange` -* `decentralized_exchange` -* `defi` -* `eth2stakingcontract` -* `deposit` - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit -Amount of tokens - ---- - -## Data Type -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency -[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets -* `ethereum` -* For [these ERC20 assets]() - ---- - -### SanAPI -Inflow per label and owner (example DAI inflow to Compound): -```graphql-explorer -{ - getMetric(metric: "inflow_per_label_and_owner") { - timeseriesDataJson( - selector: { - slug: "uniswap" - owner: "1inch" - label: "decentralized_exchange" - } - from: "2023-12-10T00:00:00Z" - to: "2023-12-11T00:00:00Z" - interval: "1h" - ) - } -} -``` - -Inflow per label (example DAI inflow to all DeFi protocols): -```graphql-explorer -{ - getMetric(metric: "inflow_per_label_and_owner") { - timeseriesDataJson( - selector: { - slug: "lido-dao" - label: "defi" - } - from: "2023-12-10T00:00:00Z" - to: "2023-12-11T00:00:00Z" - interval: "1h" - ) - } -} -``` - -Outflow per label and owner (example DAI outflow to Compound): -```graphql-explorer -{ - getMetric(metric: "outflow_per_label_and_owner") { - timeseriesDataJson( - selector: { - slug: "uniswap" - owner: "1inch" - label: "decentralized_exchange" - } - from: "2023-12-10T00:00:00Z" - to: "2023-12-11T00:00:00Z" - interval: "1h" - ) - } -} -``` - -Outflow per label: -```graphql-explorer -{ - getMetric(metric: "outflow_per_label_and_owner") { - timeseriesDataJson( - selector: { - slug: "lido-dao" - label: "defi" - } - from: "2023-12-10T00:00:00Z" - to: "2023-12-11T00:00:00Z" - interval: "1h" - ) - } -} -``` - -Balance delta per label and owner (example DAI balance delta of Aave): -```graphql-explorer -{ - getMetric(metric: "balance_per_label_and_owner_delta") { - timeseriesDataJson( - selector: { - slug: "uniswap" - owner: "1inch" - label: "decentralized_exchange" - } - from: "2023-12-10T00:00:00Z" - to: "2023-12-11T00:00:00Z" - interval: "1h" - ) - } -} -``` - -Balance per label and owner (example DAI balance of Aave): -```graphql-explorer -{ - getMetric(metric: "balance_per_owner") { - timeseriesDataJson( - selector: { - slug: "multi-collateral-dai" - owner: "aave" - label: "defi" - } - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1h" - ) - } -} -``` diff --git a/src/docs/metrics/labeled-exchange/index.md b/src/docs/metrics/labeled-exchange/index.md deleted file mode 100644 index b8874dcb3..000000000 --- a/src/docs/metrics/labeled-exchange/index.md +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: Labeled Exchange -author: Alex -date: 2024-04-01 -description: Exchange Labeled Metrics ---- - -## Description - -Exchange-labeled metrics showcase exchange metrics from the perspective of a single exchange. For instance, instead of retrieving [active_deposits](/metrics/active-deposits) data for all exchanges, you can specifically query active deposits related to Binance only. [Full list of available exchange names](labels/centralized-exchange/#see-also) - ---- - -Supported_metrics: - -* `active_deposits_per_exchange` - The number of unique deposit addresses that have been active on a particular day for a given asset within a specific exchange. Essentially, this metric serves as an indicator of how many users have deposited a given asset into the specified exchange. - -* `deposit_transactions_per_exchange` - The total number of all incoming and outgoing transactions involving deposit addresses on a specific day within a particular exchange. ---- - -* `active_withdrawals_per_exchange` - The number of unique withdrawal addresses that have withdrawn a particular asset from a given exchange. -* `withdrawal_transactions_per_exchange` - The total number of withdrawal transactions for a given asset from a specified centralized exchange. ---- - -* `exchange_inflow_per_exchange` - The volume of coins/tokens transferred from non-exchange wallets to wallets associated with a specified exchange. -* `exchange_outflow_per_exchange` - The volume of coins/tokens transferred from wallets associated with a given exchange to non-exchange wallets. -* `exchange_balance_per_exchange` - The net balance resulting from the difference between inflow and outflow (inflow minus outflow) for a particular exchange. - -Please note that metrics may undergo changes in historical values due to automated recalculations triggered monthly. We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. Additionally, adjustments to labels automatically trigger recalculation of labeled balances. - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -* `active_deposits_per_exchange`, `active_withdrawals_per_exchange` - Amount of addresses -* `deposit_transactions_per_exchange`, `withdrawal_transactions_per_exchange` - Amount of transactions -* `exchange_balance_per_exchange`, `exchange_inflow_per_exchange`, `exchange_outflow_per_exchange` - Amount of coins/tokens - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-freqency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -Available for [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22active_deposits_per_exchange%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) - ---- - -### SanAPI - -Binance Active Deposits: - -```graphql-explorer -{ - getMetric(metric: "active_deposits_per_exchange") { - timeseriesDataJson( - selector: { - slug: "ethereum" - owner: "binance" - label: "centralized_exchange" - } - from: "2024-03-01T00:00:00Z" - to: "2024-03-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - - - -Binance Withdrawals Transactions -```graphql-explorer -{ - getMetric(metric: "withdrawal_transactions_per_exchange") { - timeseriesDataJson( - selector: { - slug: "ethereum" - owner: "binance" - label: "centralized_exchange" - } - from: "2020-03-01T00:00:00Z" - to: "2020-03-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - - -Binance Flow Balance -```graphql-explorer -{ - getMetric(metric: "exchange_balance_per_exchange") { - timeseriesDataJson( - selector: { - slug: "ethereum" - owner: "binance" - label: "centralized_exchange" - } - from: "2020-03-01T00:00:00Z" - to: "2020-03-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/labelled-historical-balance/index.md b/src/docs/metrics/labelled-historical-balance/index.md deleted file mode 100644 index 3e356e4f9..000000000 --- a/src/docs/metrics/labelled-historical-balance/index.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Labelled Historical Balance -author: Santiment team -date: 2024-04-17 -description: Get historical balance for a given label ---- - -## Definition - -`labelled_historical_balance` shows a historical balance for a provided [label FQN](/labels/label-fqn). I.e. it shows a total combined balance for all addresses labelled with a given label FQN. For instance, all centralized exchange addresses or all miner addresses. - -`labelled_historical_balance_changes` shows a change in the historical balance. - -You can find available labels along with [label FQNs](/labels/label-fqn) at [labels academy section](labels/#domains). -Here are some label FQN examples: -* `santiment/centralized_exchange:v1` -* `santiment/fund:v1` -* `santiment/miner:v1` -* `santiment/owner->binance:v1` -* `santiment/whale_usd_balance(ethereum):v1` - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -Number of tokens - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Available Assets - -Available for [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22labelled_historical_balance%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) - ---- - -## API - -Available under `labelled_historical_balance`. The query below fetches a total `ethereum` balance of all `centralized_exchange` addresses. - -```graphql-explorer -{ - getMetric(metric: "labelled_historical_balance") { - timeseriesDataJson( - from: "2024-03-01T00:00:00Z" - to: "2024-03-07T00:00:00Z" - interval: "1d" - selector: {labelFqn: "santiment/centralized_exchange:v1", slug: "ethereum"} - ) - } -} -``` - -`labelled_historical_balance_changes` - -```graphql-explorer -{ - getMetric(metric: "labelled_historical_balance_changes") { - timeseriesDataJson( - from: "2024-03-01T00:00:00Z" - to: "2024-03-07T00:00:00Z" - interval: "1d" - selector: {labelFqn: "santiment/centralized_exchange:v1", slug: "ethereum"} - ) - } -} -``` diff --git a/src/docs/metrics/latest-transactions/index.md b/src/docs/metrics/latest-transactions/index.md deleted file mode 100644 index 2d77849bd..000000000 --- a/src/docs/metrics/latest-transactions/index.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Latest Transactions -author: Yury -date: 2022-04-21 -description: Get latest transactions for a chain address ---- - -## Definition - -Get latest transactions for a chain address -[Example of usage **latest transactions** on Sanbase](https://app.santiment.net/labs/balance?address=0x876eabf441b2ee5b5b0554fd502a8e0600950cfa&assets[]=shiba-inu&from=2021-10-20T19%3A00%3A00.000Z&isLog=false&priceMetrics[]=shiba-inu&to=2022-04-21T18%3A59%3A59.999Z) - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## API - -Available under the `recentTransactions` name: - -```graphql -query recentTransactions($address: String!, $page: Int, $pageSize: Int = 20) { - transactions: recentTransactions( - address: $address - page: $page - pageSize: $pageSize - type: ERC20 - onlySender: false - ) { - datetime - fromAddress { - address - labels { - name - origin - } - } - toAddress { - address - labels { - name - origin - } - } - trxValue - trxHash - project { - id - ticker - logoUrl - } - } -} -``` - -Query variables: -```json -{ - "address": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", - "infrastructure": "ETH", - "page": 1, - "pageSize": 20 -} -``` - -[**Run in explorer**](https://api.santiment.net/graphiql?query=query%20recentTransactions(%24address%3A%20String!%2C%20%24page%3A%20Int%2C%20%24pageSize%3A%20Int%20%3D%2020)%20%7B%0A%20%20transactions%3A%20recentTransactions(%0A%20%20%20%20address%3A%20%24address%0A%20%20%20%20page%3A%20%24page%0A%20%20%20%20pageSize%3A%20%24pageSize%0A%20%20%20%20type%3A%20ERC20%0A%20%20%20%20onlySender%3A%20false%0A%20%20)%20%7B%0A%20%20%20%20datetime%0A%20%20%20%20fromAddress%20%7B%0A%20%20%20%20%20%20address%0A%20%20%20%20%20%20labels%20%7B%0A%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20origin%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20toAddress%20%7B%0A%20%20%20%20%20%20address%0A%20%20%20%20%20%20labels%20%7B%0A%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20origin%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20trxValue%0A%20%20%20%20trxHash%0A%20%20%20%20project%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%20%20ticker%0A%20%20%20%20%20%20logoUrl%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A&variables=%7B%0A%09%09%22address%22%3A%20%220xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d%22%2C%0A%09%09%22infrastructure%22%3A%20%22ETH%22%2C%0A%09%09%22page%22%3A%201%2C%0A%09%09%22pageSize%22%3A%2020%0A%09%7D) diff --git a/src/docs/metrics/lending-and-borrowing-protocols/aave-safety-module/index.md b/src/docs/metrics/lending-and-borrowing-protocols/aave-safety-module/index.md deleted file mode 100644 index 7da81020b..000000000 --- a/src/docs/metrics/lending-and-borrowing-protocols/aave-safety-module/index.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: Aave Safety Module -author: Filip -date: 2025-03-01 -description: Aave Safety Module Metrics ---- - -## Description -The Aave Safety Module is a risk mitigation system designed to protect the protocol -from shortfalls. Users can stake AAVE tokens (or other assets) into the module, -providing a safety net in case of unexpected liquidity issues or smart contract -vulnerabilities. In return, stakers earn rewards but also accept the risk that a -portion of their funds could be slashed if the module is activated to cover losses. -It’s essentially a decentralized insurance mechanism that helps keep Aave secure while -incentivizing community participation. - - -### Metrics related to Aave safety module: - -Aave Safety Module staking metrics: -* `aave_safety_module_amount` – Total staked amount -* `aave_safety_module_amount_usd` – Total staked amount in USD -* `aave_safety_module_emission_usd` – Daily reward emissions in USD -* `aave_safety_module_apr` – Staking APR - -Total metrics: -* `aave_safety_module_total_amount_usd` – Total amount staked in the Aave Safety Module (combining all assets in USD) -* `aave_safety_module_total_emission_usd` – Total reward emissions in the Aave Safety Module (combining all assets in USD) - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -* Amount in tokens/USD -* APR metric in percentages - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -* [Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Metrics related to the entire protocol available for `aave` - -Other metrics: -available for [these assets]() - ---- - -### SanAPI - -Total staked amount metrics: `aave_safety_module_amount<_usd>` - -```graphql-explorer -{ - getMetric(metric: "aave_safety_module_amount"){ - timeseriesDataJson( - slug: "gho" - from: "2025-01-01T00:00:00Z" - to: "2025-01-07T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` - -Emissions and APR metrics: `aave_safety_module_emission_usd` -and `aave_safety_module_apr` - -```graphql-explorer -{ - getMetric(metric: "aave_safety_module_apr"){ - timeseriesDataJson( - slug: "aave" - from: "2025-01-01T00:00:00Z" - to: "2025-01-07T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` - -Total metrics: `aave_safety_module_total_amount_usd` and -`aave_safety_module_total_emission_usd` - -```graphql-explorer -{ - getMetric(metric: "aave_safety_module_total_amount_usd"){ - timeseriesDataJson( - slug: "aave" - from: "2025-01-01T00:00:00Z" - to: "2025-01-07T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/lending-and-borrowing-protocols/aave-v2/index.md b/src/docs/metrics/lending-and-borrowing-protocols/aave-v2/index.md deleted file mode 100644 index 508d2fd55..000000000 --- a/src/docs/metrics/lending-and-borrowing-protocols/aave-v2/index.md +++ /dev/null @@ -1,212 +0,0 @@ ---- -title: Aave V2 Protocol -author: Filip -date: 2022-12-05 -description: Aave V2 Protocol Metrics ---- - -## Description -Aave V2 is the second version of the [Aave](https://aave.com/) protocol. - -One of the key new features of Aave V2 is "stable-rate borrowing," which allows -users to lock in a fixed interest rate for their loans rather than being subject -to the variable interest rates that are common in DeFi lending. -This makes borrowing more predictable and stable, reducing the risk of -sudden interest rate spikes that can make loans more expensive to repay. - -### Metrics related to Aave v2 protocol: - -Action metrics: -* `aave_v2_action_deposits` - Amount of deposited tokens -* `aave_v2_action_deposits_usd` - Amount of deposited tokens in USD -* `aave_v2_action_liquidations` - Amount of liquidated tokens -* `aave_v2_action_liquidations_usd` - Amount of liquidated tokens in USD -* `aave_v2_action_new_debt` - Amount of borrowed tokens -* `aave_v2_action_new_debt_usd` - Amount of borrowed tokens in USD -* `aave_v2_action_repayments` - Amount of repaid tokens -* `aave_v2_action_repayments_usd` - Amount of repaid tokens in USD - -Total supplied/borrowed metrics: -* `aave_v2_total_supplied` - Total supplied tokens -* `aave_v2_total_supplied_usd` - Total supplied tokens in USD -* `aave_v2_total_borrowed` - Total borrowed tokens -* `aave_v2_total_borrowed_usd` - Total borrowed tokens in USD - -APY (annual percentage yield) metrics: -* `aave_v2_supply_apy` - Supply APY -* `aave_v2_stable_borrow_apy` - Stable borrow APY (stable interest rate will stay the same for the duration of the loan) -* `aave_v2_variable_borrow_apy` - Variable borrow APY (variable interest rate will fluctuate based on the market conditions) - -Protocol total action metrics: -* `aave_v2_total_deposits_usd` - Total amount of deposits on Aave V2 (combining all assets in USD) -* `aave_v2_total_liquidations_usd` - Total amount of liquidations on Aave V2 (combining all assets in USD) -* `aave_v2_total_new_debt_usd` - Total amount of borrowings on Aave V2 in USD (combining all assets in USD) -* `aave_v2_total_repayments_usd` - Total amount of repayments on Aave V2 in USD (combining all assets in USD) - -Protocol total supplied/borrowed metrics: -* `aave_v2_protocol_total_supplied_usd` - Total amount supplied on Aave V2 (combining all assets in USD) -* `aave_v2_protocol_total_borrowed_usd` - Total amount borrowed on Aave V2 (combining all assets in USD) - -Daily active addresses: -* `aave_v2_active_addresses` - Daily active addresses on Aave V2 - -Revenue metrics: -* `aave_v2_revenue` - Aave V2 Revenue per asset -* `aave_v2_revenue_usd` - Aave V2 Revenue in USD per asset -* `aave_v2_total_protocol_revenue_usd` - Aave V2 Total Protocol Revenue -* `aave_v2_total_protocol_cumulative_revenue_usd` - Daily Aave V2 Total Protocol Cumulative Revenue - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -* Amount in tokens/USD -* APY metrics in percentages - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -* [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - Actions, supply, borrow, and APY metrics -* [Daily Intervals](/metrics/details/frequency#daily-frequency) - Revenue and active addresses metrics - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Metrics related to the entire protocol available for `aave` - -Other metrics: -available for [these assets]() - ---- - -### SanAPI - -Action metrics: `aave_v2_action_deposits<_usd>`, `aave_v2_action_liquidations<_usd>`, -`aave_v2_action_new_debt<_usd>` and `aave_v2_action_repayments<_usd>` - -```graphql-explorer -{ - getMetric(metric: "aave_v2_action_deposits_usd"){ - timeseriesDataJson( - slug: "weth" - from: "2022-11-01T00:00:00Z" - to: "2022-11-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Total action metrics: `aave_v2_total_deposits_usd`, `aave_v2_total_liquidations_usd`, -`aave_v2_total_new_debt_usd` and `aave_v2_total_repayments_usd` - -```graphql-explorer -{ - getMetric(metric: "aave_v2_total_new_debt_usd"){ - timeseriesDataJson( - slug: "aave" - from: "2022-11-01T00:00:00Z" - to: "2022-11-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Total supplied/borrowed metrics: `aave_v2_total_supplied<_usd>` and -`aave_v2_total_borrowed<_usd>` - -```graphql-explorer -{ - getMetric(metric: "aave_v2_total_supplied"){ - timeseriesDataJson( - slug: "wrapped-bitcoin" - from: "2022-11-01T00:00:00Z" - to: "2022-11-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Protocol total supplied/borrowed metrics: `aave_v2_protocol_total_supplied_usd` and -`aave_v2_protocol_total_borrowed_usd` - -```graphql-explorer -{ - getMetric(metric: "aave_v2_protocol_total_supplied_usd"){ - timeseriesDataJson( - slug: "aave" - from: "2022-11-01T00:00:00Z" - to: "2022-11-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -APY metrics: `aave_v2_supply_apy`, `aave_v2_stable_borrow_apy` and `aave_v2_variable_borrow_apy` - -```graphql-explorer -{ - getMetric(metric: "aave_v2_supply_apy"){ - timeseriesDataJson( - slug: "wrapped-bitcoin" - from: "2022-11-01T00:00:00Z" - to: "2022-11-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Daily active addresses: `aave_v2_active_addresses` - -```graphql-explorer -{ - getMetric(metric: "aave_v2_active_addresses"){ - timeseriesDataJson( - slug: "aave" - from: "2023-01-01T00:00:00Z" - to: "2023-01-10T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` - -Revenue metrics: `aave_v2_revenue`, `aave_v2_revenue_usd`, `aave_v2_total_protocol_revenue_usd` -and `aave_v2_total_protocol_cumulative_revenue_usd` - -```graphql-explorer -{ - getMetric(metric: "aave_v2_revenue"){ - timeseriesDataJson( - slug: "usd-coin" - from: "2023-01-01T00:00:00Z" - to: "2023-01-10T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/lending-and-borrowing-protocols/aave-v3/index.md b/src/docs/metrics/lending-and-borrowing-protocols/aave-v3/index.md deleted file mode 100644 index 8e04ee842..000000000 --- a/src/docs/metrics/lending-and-borrowing-protocols/aave-v3/index.md +++ /dev/null @@ -1,239 +0,0 @@ ---- -title: Aave V3 Protocol -author: Filip -date: 2023-04-27 -description: Aave V3 Protocol Metrics ---- - -## Description -AAVE v3 refers to the third version of the [Aave](https://aave.com/) protocol, -which is a decentralized lending and borrowing platform built on the Ethereum -blockchain. AAVE v3 was released in December 2020, and it introduced several new -features and improvements over the previous versions of the protocol. - -Some of the notable changes introduced in AAVE v3 include: -* Introduction of "Elastic Interest Rates": This feature enables the interest -rates to adjust automatically based on the supply and demand for each asset on -the platform, ensuring that the rates are always market-driven and competitive. -* Improved User Interface: The user interface of AAVE v3 was redesigned to make -it more intuitive and user-friendly, making it easier for users to navigate and -use the platform. -* Gas optimizations: AAVE v3 was designed with gas optimizations in mind, making -it more cost-efficient for users to interact with the platform. - - -### Metrics related to Aave v3 protocol: - -Action metrics: -* `aave_v3_action_deposits` - Amount of deposited tokens -* `aave_v3_action_deposits_usd` - Amount of deposited tokens in USD -* `aave_v3_action_liquidations` - Amount of liquidated tokens -* `aave_v3_action_liquidations_usd` - Amount of liquidated tokens in USD -* `aave_v3_action_new_debt` - Amount of borrowed tokens -* `aave_v3_action_new_debt_usd` - Amount of borrowed tokens in USD -* `aave_v3_action_repayments` - Amount of repaid tokens -* `aave_v3_action_repayments_usd` - Amount of repaid tokens in USD - -Total supplied/borrowed metrics: -* `aave_v3_total_supplied` - Total supplied tokens -* `aave_v3_total_supplied_usd` - Total supplied tokens in USD -* `aave_v3_total_borrowed` - Total borrowed tokens -* `aave_v3_total_borrowed_usd` - Total borrowed tokens in USD - -APY (annual percentage yield) metrics: -* `aave_v3_supply_apy` - Supply APY -* `aave_v3_variable_borrow_apy` - Variable borrow APY (variable interest rate will fluctuate based on the market conditions) - -Protocol total action metrics: -* `aave_v3_total_deposits_usd` - Total amount of deposits on Aave V3 (combining all assets in USD) -* `aave_v3_total_liquidations_usd` - Total amount of liquidations on Aave V3 (combining all assets in USD) -* `aave_v3_total_new_debt_usd` - Total amount of borrowings on Aave V3 (combining all assets in USD) -* `aave_v3_total_repayments_usd` - Total amount of repayments on Aave V3 (combining all assets in USD) - -Protocol total supplied/borrowed metrics: -* `aave_v3_protocol_total_supplied_usd` - Total amount supplied on Aave V3 (combining all assets in USD) -* `aave_v3_protocol_total_borrowed_usd` - Total amount borrowed on Aave V3 (combining all assets in USD) - -Daily active addresses: -* `aave_v3_active_addresses` - Daily active addresses on Aave V3 - -Revenue metrics: -* `aave_v3_revenue` - Aave V3 Revenue per asset -* `aave_v3_revenue_usd` - Aave V3 Revenue in USD per asset -* `aave_v3_total_protocol_revenue_usd` - Aave V3 Total Protocol Revenue -* `aave_v3_total_protocol_cumulative_revenue_usd` - Daily Aave V3 Total Protocol Cumulative Revenue - -Flashloan metrics: -* `aave_v3_flashloan` - Flashloan volume by asset -* `aave_v3_flashloan_usd` - Flashloan volume by asset in USD -* `aave_v3_total_flashloan_usd` - Total flashloan volume across Aave V3 in USD - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -* Amount in tokens/USD -* APY metrics in percentages - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -* [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - Actions, supply, borrow, and APY metrics -* [Daily Intervals](/metrics/details/frequency#daily-frequency) - Revenue and active addresses metrics - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Metrics related to the entire protocol available for `aave` - -Other metrics: -available for [these assets]() - ---- - -### SanAPI - -Action metrics: `aave_v3_action_deposits<_usd>`, `aave_v3_action_liquidations<_usd>`, -`aave_v3_action_new_debt<_usd>` and `aave_v3_action_repayments<_usd>` - -```graphql-explorer -{ - getMetric(metric: "aave_v3_action_deposits_usd"){ - timeseriesDataJson( - slug: "weth" - from: "2023-04-01T00:00:00Z" - to: "2023-04-07T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Total action metrics: `aave_v3_total_deposits_usd`, `aave_v3_total_liquidations_usd`, -`aave_v3_total_new_debt_usd` and `aave_v3_total_repayments_usd` - -```graphql-explorer -{ - getMetric(metric: "aave_v3_total_new_debt_usd"){ - timeseriesDataJson( - slug: "aave" - from: "2023-04-01T00:00:00Z" - to: "2023-04-07T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Total supplied/borrowed metrics: `aave_v3_total_supplied<_usd>` and -`aave_v3_total_borrowed<_usd>` - -```graphql-explorer -{ - getMetric(metric: "aave_v3_total_supplied"){ - timeseriesDataJson( - slug: "wrapped-bitcoin" - from: "2023-04-01T00:00:00Z" - to: "2023-04-07T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Protocol total supplied/borrowed metrics: `aave_v3_protocol_total_supplied_usd` and -`aave_v3_protocol_total_borrowed_usd` - -```graphql-explorer -{ - getMetric(metric: "aave_v3_protocol_total_supplied_usd"){ - timeseriesDataJson( - slug: "aave" - from: "2023-04-01T00:00:00Z" - to: "2023-04-07T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -APY metrics: `aave_v3_supply_apy` and `aave_v3_variable_borrow_apy` - -```graphql-explorer -{ - getMetric(metric: "aave_v3_supply_apy"){ - timeseriesDataJson( - slug: "wrapped-bitcoin" - from: "2023-04-01T00:00:00Z" - to: "2023-04-07T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Daily active addresses: `aave_v3_active_addresses` - -```graphql-explorer -{ - getMetric(metric: "aave_v3_active_addresses"){ - timeseriesDataJson( - slug: "aave" - from: "2023-03-01T00:00:00Z" - to: "2023-03-10T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` - -Revenue metrics: `aave_v3_revenue`, `aave_v3_revenue_usd`, `aave_v3_total_protocol_revenue_usd` -and `aave_v3_total_protocol_cumulative_revenue_usd` - -```graphql-explorer -{ - getMetric(metric: "aave_v3_revenue"){ - timeseriesDataJson( - slug: "usd-coin" - from: "2023-01-01T00:00:00Z" - to: "2023-01-10T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` - -Flashloan metrics: `aave_v3_flashloan`, `aave_v3_flashloan_usd` and `aave_v3_total_flashloan_usd` - -```graphql-explorer -{ - getMetric(metric: "aave_v3_flashloan"){ - timeseriesDataJson( - slug: "usd-coin" - from: "2026-01-01T00:00:00Z" - to: "2026-01-10T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` diff --git a/src/docs/metrics/lending-and-borrowing-protocols/compound-v3/index.md b/src/docs/metrics/lending-and-borrowing-protocols/compound-v3/index.md deleted file mode 100644 index 3098376f6..000000000 --- a/src/docs/metrics/lending-and-borrowing-protocols/compound-v3/index.md +++ /dev/null @@ -1,197 +0,0 @@ ---- -title: Compound V3 Protocol -author: Filip -date: 2023-09-01 -description: Compound V3 Protocol Metrics ---- - -## Description -Compound V3 is the third version of the [Compound](https://compound.finance/) protocol. -New version represents a significant shift in the DeFi landscape by introducing -a unified borrowing market model. In this model, the base asset can be borrowed -against other assets. - -Currently, there are three markets: the ETH market, the USDC market, and the USDT market. -In each market, users can provide different assets as collateral and borrow the market's -asset (WETH, USDC, or USDT). - -This transformation carries several advantages. First, it enhances security -for users across all assets within the Compound ecosystem. Second, it allows -for increased collateral ratios, providing more flexibility for borrowers. -This also decreases the liability for each market since all debt is settled in -the form of assets. - -### Metrics related to Compound protocol: - -Action metrics: -* `compound_v3_action_deposits` - Amount of deposited tokens -* `compound_v3_action_deposits_usd` - Amount of deposited tokens in USD -* `compound_v3_action_liquidations` - Amount of liquidated tokens -* `compound_v3_action_liquidations_usd` - Amount of liquidated tokens in USD -* `compound_v3_action_new_debt` - Amount of borrowed tokens -* `compound_v3_action_new_debt_usd` - Amount of borrowed tokens in USD -* `compound_v3_action_repayments` - Amount of repaid tokens -* `compound_v3_action_repayments_usd` - Amount of repaid tokens in USD - -Total supplied/borrowed metrics: -* `compound_v3_collateral_total_supplied` - Total supplied tokens for the collateral asset -* `compound_v3_collateral_total_supplied_usd` - Total supplied tokens in USD for the collateral asset -* `compound_v3_total_supplied` - Total supplied tokens for the market asset -* `compound_v3_total_supplied_usd` - Total supplied tokens in USD for the market asset -* `compound_v3_total_borrowed` - Total borrowed tokens -* `compound_v3_total_borrowed_usd` - Total borrowed tokens in USD - -APY (annual percentage yield) metrics: -* `compound_v3_supply_apy` - Supply APY -* `compound_v3_borrow_apy` - Borrow APY - -Protocol total action metrics: -* `compound_v3_total_deposits_usd` - Total amount of deposits on Compound V3 (combining all assets in USD) -* `compound_v3_total_liquidations_usd` - Total amount of liquidations on Compound V3 (combining all assets in USD) -* `compound_v3_total_new_debt_usd` - Total amount of borrowings on Compound V3 (combining all assets in USD) -* `compound_v3_total_repayments_usd` - Total amount of repayments on Compound V3 (combining all assets in USD) - -Protocol total supplied/borrowed metrics: -* `compound_v3_protocol_total_supplied_usd` - Total amount supplied on Compound V3 (combining all assets in USD) -* `compound_v3_protocol_total_borrowed_usd` - Total amount borrowed on Compound V3 (combining all assets in USD) - -Daily active addresses: -* `compound_v3_active_addresses` - Daily active addresses on Compound V3 - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -* Amount in tokens/USD -* APY metrics in percentages - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Metrics related to the entire protocol available for `compound` - -Other metrics: -available for [these assets]() - ---- - -### SanAPI - -Action metrics: `compound_v3_action_deposits<_usd>`, `compound_v3_action_liquidations<_usd>`, -`compound_v3_action_new_debt<_usd>` and `compound_v3_action_repayments<_usd>` - -```graphql-explorer -{ - getMetric(metric: "compound_v3_action_deposits_usd"){ - timeseriesDataJson( - slug: "wrapped-bitcoin" - from: "2023-08-01T00:00:00Z" - to: "2023-08-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Total action metrics: `compound_v3_total_deposits_usd`, `compound_v3_total_liquidations_usd`, -`compound_v3_total_new_debt_usd` and `compound_v3_total_repayments_usd` - -```graphql-explorer -{ - getMetric(metric: "compound_v3_total_new_debt_usd"){ - timeseriesDataJson( - slug: "compound" - from: "2023-08-01T00:00:00Z" - to: "2023-08-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Total supplied/borrowed metrics: `compound_v3_collateral_total_supplied<_usd>`, -`compound_v3_total_supplied<_usd>` and `compound_v3_total_borrowed<_usd>` - -```graphql-explorer -{ - getMetric(metric: "compound_v3_collateral_total_supplied"){ - timeseriesDataJson( - slug: "wrapped-bitcoin" - from: "2023-08-01T00:00:00Z" - to: "2023-08-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Protocol total supplied/borrowed metrics: `compound_v3_protocol_total_supplied_usd` and -`compound_v3_protocol_total_borrowed_usd` - -```graphql-explorer -{ - getMetric(metric: "compound_v3_protocol_total_supplied_usd"){ - timeseriesDataJson( - slug: "compound" - from: "2023-08-01T00:00:00Z" - to: "2023-08-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -APY metrics: `compound_v3_supply_apy` and `compound_v3_borrow_apy` - -```graphql-explorer -{ - getMetric(metric: "compound_v3_supply_apy"){ - timeseriesDataJson( - slug: "usd-coin" - from: "2023-08-01T00:00:00Z" - to: "2023-08-07T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Daily active addresses: `compound_v3_active_addresses` - -```graphql-explorer -{ - getMetric(metric: "compound_v3_active_addresses"){ - timeseriesDataJson( - slug: "compound" - from: "2023-08-01T00:00:00Z" - to: "2023-08-10T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/lending-and-borrowing-protocols/compound/index.md b/src/docs/metrics/lending-and-borrowing-protocols/compound/index.md deleted file mode 100644 index acb696f24..000000000 --- a/src/docs/metrics/lending-and-borrowing-protocols/compound/index.md +++ /dev/null @@ -1,209 +0,0 @@ ---- -title: Compound Protocol -author: Filip -date: 2022-12-05 -description: Compound Protocol Metrics ---- - -## Description -Compound is a decentralized finance (DeFi) protocol built on the Ethereum -blockchain that allows individuals to lend and borrow digital assets without -intermediaries. Compound is designed to create a market for lending and borrowing -digital assets, where users can earn interest by lending their assets and -borrowers can obtain loans by using their assets as collateral. - -### Metrics related to Compound protocol: - -Action metrics: -* `compound_action_deposits` - Amount of deposited tokens -* `compound_action_deposits_usd` - Amount of deposited tokens in USD -* `compound_action_liquidations` - Amount of liquidated tokens -* `compound_action_liquidations_usd` - Amount of liquidated tokens in USD -* `compound_action_new_debt` - Amount of borrowed tokens -* `compound_action_new_debt_usd` - Amount of borrowed tokens in USD -* `compound_action_repayments` - Amount of repaid tokens -* `compound_action_repayments_usd` - Amount of repaid tokens in USD - -Total supplied/borrowed metrics: -* `compound_total_supplied` - Total supplied tokens -* `compound_total_supplied_usd` - Total supplied tokens in USD -* `compound_total_borrowed` - Total borrowed tokens -* `compound_total_borrowed_usd` - Total borrowed tokens in USD - -APY (annual percentage yield) metrics: -* `compound_supply_apy` - Supply APY -* `compound_borrow_apy` - Borrow APY - -Protocol total action metrics: -* `compound_total_deposits_usd` - Total amount of deposits on Compound (combining all assets in USD) -* `compound_total_liquidations_usd` - Total amount of liquidations on Compound (combining all assets in USD) -* `compound_total_new_debt_usd` - Total amount of borrowings on Compound (combining all assets in USD) -* `compound_total_repayments_usd` - Total amount of repayments on Compound (combining all assets in USD) - -Protocol total supplied/borrowed metrics: -* `compound_protocol_total_supplied_usd` - Total amount supplied on Compound (combining all assets in USD) -* `compound_protocol_total_borrowed_usd` - Total amount borrowed on Compound (combining all assets in USD) - -Daily active addresses: -* `compound_active_addresses` - Daily active addresses on Compound - -Revenue metrics: -* `compound_revenue` - Compound Revenue per asset -* `compound_revenue_usd` - Compound Revenue in USD per asset -* `compound_total_protocol_revenue_usd` - Compound Total Protocol Revenue -* `compound_total_protocol_cumulative_revenue_usd` - Daily Compound Total Protocol Cumulative Revenue - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -* Amount in tokens/USD -* APY metrics in percentages - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -* [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - Actions, supply, borrow, and APY metrics -* [Daily Intervals](/metrics/details/frequency#daily-frequency) - Revenue and active addresses metrics - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Metrics related to the entire protocol available for `compound` - -Other metrics: -available for [these assets]() - ---- - -### SanAPI - -Action metrics: `compound_action_deposits<_usd>`, `compound_action_liquidations<_usd>`, -`compound_action_new_debt<_usd>` and `compound_action_repayments<_usd>` - -```graphql-explorer -{ - getMetric(metric: "compound_action_deposits_usd"){ - timeseriesDataJson( - slug: "ethereum" - from: "2022-11-01T00:00:00Z" - to: "2022-11-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Total action metrics: `compound_total_deposits_usd`, `compound_total_liquidations_usd`, -`compound_total_new_debt_usd` and `compound_total_repayments_usd` - -```graphql-explorer -{ - getMetric(metric: "compound_total_new_debt_usd"){ - timeseriesDataJson( - slug: "compound" - from: "2022-11-01T00:00:00Z" - to: "2022-11-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Total supplied/borrowed metrics: `compound_total_supplied<_usd>` and -`compound_total_borrowed<_usd>` - -```graphql-explorer -{ - getMetric(metric: "compound_total_supplied"){ - timeseriesDataJson( - slug: "wrapped-bitcoin" - from: "2022-11-01T00:00:00Z" - to: "2022-11-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Protocol total supplied/borrowed metrics: `compound_protocol_total_supplied_usd` and -`compound_protocol_total_borrowed_usd` - -```graphql-explorer -{ - getMetric(metric: "compound_protocol_total_supplied_usd"){ - timeseriesDataJson( - slug: "compound" - from: "2022-11-01T00:00:00Z" - to: "2022-11-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -APY metrics: `compound_supply_apy` and `compound_borrow_apy` - -```graphql-explorer -{ - getMetric(metric: "compound_supply_apy"){ - timeseriesDataJson( - slug: "wrapped-bitcoin" - from: "2023-01-01T00:00:00Z" - to: "2023-03-01T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Daily active addresses: `compound_active_addresses` - -```graphql-explorer -{ - getMetric(metric: "compound_active_addresses"){ - timeseriesDataJson( - slug: "compound" - from: "2023-01-01T00:00:00Z" - to: "2023-01-10T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` - -Revenue metrics: `compound_revenue`, `compound_revenue_usd`, `compound_total_protocol_revenue_usd` -and `compound_total_protocol_cumulative_revenue_usd` - -```graphql-explorer -{ - getMetric(metric: "compound_revenue"){ - timeseriesDataJson( - slug: "usd-coin" - from: "2023-01-01T00:00:00Z" - to: "2023-01-10T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/lending-and-borrowing-protocols/fluid/index.md b/src/docs/metrics/lending-and-borrowing-protocols/fluid/index.md deleted file mode 100644 index 7c6a548fe..000000000 --- a/src/docs/metrics/lending-and-borrowing-protocols/fluid/index.md +++ /dev/null @@ -1,166 +0,0 @@ ---- -title: Fluid Protocol -author: Filip -date: 2025-08-01 -description: Fluid Protocol Metrics ---- - -## Description -[Fluid](https://fluid.instadapp.io/) is Instadapp’s innovative lending and borrowing protocol designed to optimize -capital efficiency in DeFi. Unlike traditional lending platforms, Fluid dynamically adjusts borrowing power and interest -rates based on real-time market conditions. This allows users to borrow more against their collateral while reducing -risks of liquidation. The protocol integrates seamlessly with Instadapp, offering deep liquidity and smart automation to -enhance user experience. By making lending more flexible and efficient, Fluid aims to redefine how DeFi users manage -their assets. - -### Metrics related to Fluid protocol: - -Action metrics: -* `fluid_action_deposits` - Amount of deposited tokens -* `fluid_action_deposits_usd` - Amount of deposited tokens in USD -* `fluid_action_liquidations` - Amount of liquidated tokens -* `fluid_action_liquidations_usd` - Amount of liquidated tokens in USD -* `fluid_action_new_debt` - Amount of borrowed tokens -* `fluid_action_new_debt_usd` - Amount of borrowed tokens in USD -* `fluid_action_repayments` - Amount of repaid tokens -* `fluid_action_repayments_usd` - Amount of repaid tokens in USD - -Protocol total action metrics: -* `fluid_total_deposits_usd` - Total amount of deposits on Fluid protocol (combining all assets in USD) -* `fluid_total_liquidations_usd` - Total amount of liquidations on Fluid protocol (combining all assets in USD) -* `fluid_total_new_debt_usd` - Total amount of borrowings on Fluid protocol (combining all assets in USD) -* `fluid_total_repayments_usd` - Total amount of repayments on Fluid protocol (combining all assets in USD) - -APY (annual percentage yield) metrics: -* `fluid_supply_apy` - Supply APY - -Total supplied metrics: -* `fluid_total_supplied` - Total supplied tokens -* `fluid_total_supplied_usd` - Total supplied tokens in USD -* `fluid_protocol_total_supplied_usd` - Total amount supplied on Fluid (combining all assets in USD) - -Daily active addresses: -* `fluid_active_addresses` - Daily active addresses on Fluid protocol - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -* Amount in tokens/USD -* APY metric in percentages - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -* [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - Actions, supply and APY metrics -* [Daily Intervals](/metrics/details/frequency#daily-frequency) - Active addresses metric - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Metrics related to the entire protocol available for `instadapp`. - -Other metrics: -available for [these assets]() - ---- - -### SanAPI - -Action metrics: `fluid_action_deposits<_usd>`, `fluid_action_liquidations<_usd>`, -`fluid_action_new_debt<_usd>` and `fluid_action_repayments<_usd>` - -```graphql-explorer -{ - getMetric(metric: "fluid_action_deposits_usd"){ - timeseriesDataJson( - slug: "ethereum" - from: "2025-01-01T00:00:00Z" - to: "2025-02-01T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` - -Total action/supply metrics: `fluid_total_deposits_usd`, `fluid_total_liquidations_usd`, -`fluid_total_new_debt_usd`, `fluid_total_repayments_usd` and `fluid_protocol_total_supplied_usd` - -```graphql-explorer -{ - getMetric(metric: "fluid_total_new_debt_usd"){ - timeseriesDataJson( - slug: "instadapp" - from: "2025-01-10T00:00:00Z" - to: "2025-01-12T00:00:00Z" - includeIncompleteData: true - interval: "1h") - } -} -``` - -APY metrics: `fluid_supply_apy` - -```graphql-explorer -{ - getMetric(metric: "fluid_supply_apy"){ - timeseriesDataJson( - slug: "ethereum" - from: "2025-01-10T00:00:00Z" - to: "2025-01-12T00:00:00Z" - includeIncompleteData: true - interval: "1h") - } -} -``` - -Total supplied/borrowed metrics: `fluid_total_supplied<_usd>` - -```graphql-explorer -{ - getMetric(metric: "fluid_total_supplied"){ - timeseriesDataJson( - slug: "ethereum" - from: "2025-01-10T00:00:00Z" - to: "2025-01-15T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` - - -Daily active addresses: `fluid_active_addresses` - -```graphql-explorer -{ - getMetric(metric: "fluid_active_addresses"){ - timeseriesDataJson( - slug: "instadapp" - from: "2025-01-01T00:00:00Z" - to: "2025-01-10T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/lending-and-borrowing-protocols/fraxlend/index.md b/src/docs/metrics/lending-and-borrowing-protocols/fraxlend/index.md deleted file mode 100644 index f0bb3273f..000000000 --- a/src/docs/metrics/lending-and-borrowing-protocols/fraxlend/index.md +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Fraxlend Protocol -author: Filip -date: 2024-07-01 -description: Fraxlend Protocol Metrics ---- - -## Description -[Fraxlend](https://app.frax.finance/fraxlend) Protocol is a decentralized lending and borrowing -platform designed to facilitate efficient and secure financial transactions within the DeFi -ecosystem. It operates by allowing users to lend their digital assets to earn interest or borrow -against their holdings, leveraging the stability and flexibility of the FRAX stablecoin. The -protocol employs smart contracts to ensure transparency, security, and automation of all lending -activities, minimizing risks associated with traditional financial systems. - -### Metrics related to Fraxlend protocol: - -Action metrics: -* `fraxlend_action_deposits` - Amount of deposited tokens -* `fraxlend_action_deposits_usd` - Amount of deposited tokens in USD -* `fraxlend_action_liquidations` - Amount of liquidated tokens -* `fraxlend_action_liquidations_usd` - Amount of liquidated tokens in USD -* `fraxlend_action_new_debt` - Amount of borrowed tokens -* `fraxlend_action_new_debt_usd` - Amount of borrowed tokens in USD -* `fraxlend_action_repayments` - Amount of repaid tokens -* `fraxlend_action_repayments_usd` - Amount of repaid tokens in USD - -Total supplied/borrowed metrics: -* `fraxlend_total_supplied` - Total supplied tokens -* `fraxlend_total_supplied_usd` - Total supplied tokens in USD -* `fraxlend_total_borrowed_against_collateral` - Total FRAX borrowed against collateral - -APY (annual percentage yield) metric: -* `fraxlend_borrow_apy` - Variable borrow APY (variable interest rate will fluctuate based on the market conditions) - -Protocol total action metrics: -* `fraxlend_total_deposits_usd` - Total amount of deposits on Fraxlend protocol (combining all assets in USD) -* `fraxlend_total_liquidations_usd` - Total amount of liquidations on Fraxlend protocol (combining all assets in USD) -* `fraxlend_total_new_debt_usd` - Total amount of borrowings on Fraxlend protocol (combining all assets in USD) -* `fraxlend_total_repayments_usd` - Total amount of repayments on Fraxlend protocol (combining all assets in USD) - -Protocol total supplied/borrowed metrics: -* `fraxlend_protocol_total_supplied_usd` - Total amount supplied on Fraxlend (combining all assets in USD) -* `fraxlend_protocol_total_borrowed_usd` - Total amount borrowed on Fraxlend (combining all assets in USD) - -Daily active addresses: -* `fraxlend_active_addresses` - Daily active addresses on Fraxlend protocol - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -* Amount in tokens/USD -* Borrow APY metric in percentage - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -* [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - Actions and APY metrics -* [Daily Intervals](/metrics/details/frequency#daily-frequency) - Active addresses metric - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Metrics related to the entire protocol available for `frax` - -Other metrics: -available for [these assets]() - ---- - -### SanAPI - -Action metrics: `fraxlend_action_deposits<_usd>`, `fraxlend_action_liquidations<_usd>`, -`fraxlend_action_new_debt<_usd>` and `fraxlend_action_repayments<_usd>` - -```graphql-explorer -{ - getMetric(metric: "fraxlend_action_deposits_usd"){ - timeseriesDataJson( - slug: "weth" - from: "2024-01-01T00:00:00Z" - to: "2024-02-01T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` - - -Total action metrics: `fraxlend_total_deposits_usd`, `fraxlend_total_liquidations_usd`, -`fraxlend_total_new_debt_usd` and `fraxlend_total_repayments_usd` - -```graphql-explorer -{ - getMetric(metric: "fraxlend_total_new_debt_usd"){ - timeseriesDataJson( - slug: "frax" - from: "2024-01-10T00:00:00Z" - to: "2024-01-12T00:00:00Z" - includeIncompleteData: true - interval: "1h") - } -} -``` - -Total supplied/borrowed metrics: `fraxlend_total_supplied<_usd>` and -`fraxlend_total_borrowed_against_collateral` - -```graphql-explorer -{ - getMetric(metric: "fraxlend_total_supplied"){ - timeseriesDataJson( - slug: "wrapped-bitcoin" - from: "2024-11-01T00:00:00Z" - to: "2024-11-07T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Protocol total supplied/borrowed metrics: `fraxlend_protocol_total_supplied_usd` and -`fraxlend_protocol_total_borrowed_usd` - -```graphql-explorer -{ - getMetric(metric: "fraxlend_protocol_total_supplied_usd"){ - timeseriesDataJson( - slug: "frax" - from: "2024-11-01T00:00:00Z" - to: "2024-11-07T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - - -APY metric: `fraxlend_borrow_apy` - -```graphql-explorer -{ - getMetric(metric: "fraxlend_borrow_apy"){ - timeseriesDataJson( - slug: "wrapped-bitcoin" - from: "2024-01-01T00:00:00Z" - to: "2024-01-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - - -Daily active addresses: `fraxlend_active_addresses` - -```graphql-explorer -{ - getMetric(metric: "fraxlend_active_addresses"){ - timeseriesDataJson( - slug: "frax" - from: "2024-01-01T00:00:00Z" - to: "2024-01-10T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` - diff --git a/src/docs/metrics/lending-and-borrowing-protocols/index.md b/src/docs/metrics/lending-and-borrowing-protocols/index.md deleted file mode 100644 index 840c120f5..000000000 --- a/src/docs/metrics/lending-and-borrowing-protocols/index.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: DeFi Lending and Borrowing Protocols -author: Filip -date: 2023-04-07 ---- - -Decentralized Finance (DeFi) lending and borrowing protocols are blockchain-based -platforms that allow individuals to lend and borrow digital assets without the need -for traditional financial intermediaries, such as banks. These protocols utilize -smart contracts, which are self-executing code on a blockchain, to automate the -lending and borrowing process and enforce the terms of the agreement between parties. - -On these DeFi platforms, users can lend their digital assets to other users and earn -interest on their deposits. Conversely, borrowers can use these digital assets as -collateral to obtain loans in the form of stablecoins or other cryptocurrencies. -DeFi lending and borrowing protocols typically offer more flexibility, accessibility, -and transparency than traditional finance and allow users to participate in the -global financial system without the need for intermediaries or extensive paperwork. -However, they also carry additional risks such as smart contract vulnerabilities -and market volatility. - -- [Aave V2](/metrics/lending-and-borrowing-protocols/aave-v2) -- [Aave V3](/metrics/lending-and-borrowing-protocols/aave-v3) -- [Aave Safety Module](/metrics/lending-and-borrowing-protocols/aave-safety-module) -- [Compound](/metrics/lending-and-borrowing-protocols/compound) -- [Compound V3](/metrics/lending-and-borrowing-protocols/compound-v3) -- [MakerDAO](/metrics/lending-and-borrowing-protocols/makerdao) -- [Morpho](/metrics/lending-and-borrowing-protocols/morpho) -- [Spark](/metrics/lending-and-borrowing-protocols/spark) -- [Fluid](/metrics/lending-and-borrowing-protocols/fluid) -- [Liquity](/metrics/lending-and-borrowing-protocols/liquity) -- [Fraxlend](/metrics/lending-and-borrowing-protocols/fraxlend) diff --git a/src/docs/metrics/lending-and-borrowing-protocols/liquity/index.md b/src/docs/metrics/lending-and-borrowing-protocols/liquity/index.md deleted file mode 100644 index 9cbcc4f76..000000000 --- a/src/docs/metrics/lending-and-borrowing-protocols/liquity/index.md +++ /dev/null @@ -1,146 +0,0 @@ ---- -title: Liquity Protocol -author: Filip -date: 2024-03-01 -description: Liquity Protocol Metrics ---- - -## Description -[Liquity](https://www.liquity.org/) is a decentralized borrowing protocol operating on the Ethereum -blockchain. It allows users to borrow a stablecoin, LUSD, against their Ethereum (ETH) collateral. - -It stands out from other borrowing protocols because of its unique approach to interest calculation -for loans. Liquity applies a small, fixed fee for borrowing LUSD, rather than subjecting users to -highly fluctuating interest rates. - -Aside from the collateral, the loans are backed by a Stability Pool containing LUSD and -by other borrowers collectively serving as a safety net. - -### Metrics related to Compound protocol: - -Action metrics: -* `liquity_action_deposits` - Amount of deposited tokens -* `liquity_action_deposits_usd` - Amount of deposited tokens in USD -* `liquity_action_liquidations` - Amount of liquidated tokens -* `liquity_action_liquidations_usd` - Amount of liquidated tokens in USD -* `liquity_action_new_debt` - Amount of borrowed tokens -* `liquity_action_new_debt_usd` - Amount of borrowed tokens in USD -* `liquity_action_repayments` - Amount of repaid tokens -* `liquity_action_repayments_usd` - Amount of repaid tokens in USD - -Total supplied/borrowed metrics: -* `liquity_total_supplied` - Total supplied tokens -* `liquity_total_supplied_usd` - Total supplied tokens in USD -* `liquity_total_borrowed` - Total borrowed tokens -* `liquity_total_borrowed_usd` - Total borrowed tokens in USD - -APY (annual percentage yield) metrics: -* `liquity_borrow_fee` - Liquity borrow fee - -Daily active addresses: -* `liquity_active_addresses` - Daily active addresses on Liquity - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -* Amount in tokens/USD -* `liquity_borrow_fee` in percentages - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Deposit/supply metrics available for `ethereum` - -Repayment/borrow metrics available for `liquity-usd` - ---- - -### SanAPI - -Action metrics: `liquity_action_deposits<_usd>`, `liquity_action_liquidations<_usd>`, -`liquity_action_new_debt<_usd>` and `liquity_action_repayments<_usd>` - -```graphql-explorer -{ - getMetric(metric: "liquity_action_new_debt"){ - timeseriesDataJson( - slug: "liquity-usd" - from: "2024-01-01T00:00:00Z" - to: "2024-01-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Total supplied/borrowed metrics: `liquity_total_supplied<_usd>` and -`liquity_total_borrowed<_usd>` - -```graphql-explorer -{ - getMetric(metric: "liquity_total_supplied"){ - timeseriesDataJson( - slug: "ethereum" - from: "2024-01-01T00:00:00Z" - to: "2024-01-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Borrow fee metric: `liquity_borrow_fee` - -```graphql-explorer -{ - getMetric(metric: "liquity_borrow_fee"){ - timeseriesDataJson( - slug: "liquity-usd" - from: "2024-03-01T00:00:00Z" - to: "2024-03-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Daily active addresses: `liquity_active_addresses` - -```graphql-explorer -{ - getMetric(metric: "liquity_active_addresses"){ - timeseriesDataJson( - slug: "liquity-usd" - from: "2024-01-01T00:00:00Z" - to: "2024-01-07T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/lending-and-borrowing-protocols/makerdao/index.md b/src/docs/metrics/lending-and-borrowing-protocols/makerdao/index.md deleted file mode 100644 index 0cd75adfc..000000000 --- a/src/docs/metrics/lending-and-borrowing-protocols/makerdao/index.md +++ /dev/null @@ -1,219 +0,0 @@ ---- -title: MakerDAO Protocol -author: Filip -date: 2023-01-01 -description: MakerDAO Protocol Metrics ---- - -## Description -MakerDAO is a decentralized finance (DeFi) platform built on the Ethereum -blockchain that allows individuals to create and manage the DAI stablecoin, -which is pegged to the value of the US dollar. MakerDAO uses a system of -smart contracts to manage the creation and redemption of DAI tokens, which -can be used for a variety of purposes, such as payments, trading, and investment. - -One of the key features of MakerDAO is its collateralized debt position (CDP) -system, which allows users to lock up their digital assets as collateral in order -to generate DAI stablecoins. This creates a decentralized lending system that is -independent of traditional financial intermediaries and allows users to access -liquidity without having to sell their assets. - -### Metrics related to MakerDAO protocol: - -Action metrics: -* `makerdao_action_deposits` - Amount of deposited tokens -* `makerdao_action_deposits_usd` - Amount of deposited tokens in USD -* `makerdao_action_liquidations` - Amount of liquidated tokens -* `makerdao_action_liquidations_usd` - Amount of liquidated tokens in USD -* `makerdao_action_new_debt` - Amount of borrowed tokens -* `makerdao_action_new_debt_usd` - Amount of borrowed tokens in USD -* `makerdao_action_repayments` - Amount of repaid tokens -* `makerdao_action_repayments_usd` - Amount of repaid tokens in USD - -New debt/repayments against collateral metrics: -* `dai_created` - Amount of DAI created, backed by underlying collateral -* `dai_repaid` - Amount of DAI repaid, backed by underlying collateral -* `total_dai_created` - Amount of DAI in circulation, backed by underlying collateral - -Total supplied/borrowed metrics: -* `makerdao_total_supplied` - Total supplied tokens -* `makerdao_total_supplied_usd` - Total supplied tokens in USD -* `makerdao_total_borrowed` - Total borrowed tokens -* `makerdao_total_borrowed_usd` - Total borrowed tokens in USD - -Collateralization ratio and stability fee metrics: -* `mcd_collat_ratio` - Ratio of collateral value to the value of the debt generated against that collateral -* `mcd_stability_fee` - Variable interest rate charged on outstanding debt - -Protocol total action metrics: -* `makerdao_total_deposits_usd` - Total amount of deposits on MakerDAO (combining all assets in USD) -* `makerdao_total_liquidations_usd` - Total amount of liquidations on MakerDAO (combining all assets in USD) -* `makerdao_total_new_debt_usd` - Total amount of borrowings on MakerDAO (combining all assets in USD) -* `makerdao_total_repayments_usd` - Total amount of repayments on MakerDAO (combining all assets in USD) - -Protocol total supplied/borrowed metrics: -* `makerdao_protocol_total_supplied_usd` - Total amount supplied on MakerDAO (combining all assets in USD) -* `makerdao_protocol_total_borrowed_usd` - Total amount borrowed on MakerDAO (combining all assets in USD) - -Daily active addresses: -* `makerdao_active_addresses` - Daily active addresses on MakerDAO - - -> MakerDAO metrics have been migrated to a new framework; old metrics can be accessed via their -> previous names, listed here: [Deprecated MakerDAO Metrics](/metrics/deprecated-metrics/deprecated-makerdao-metrics). -> **Although older data remains accessible through the API, we do not recommend its use.** - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Amount in tokens/USD - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Metrics related to the entire protocol available for `maker` and `multi-collateral-dai` - -Other metrics: -available for [these assets]() - ---- - -### SanAPI - -Action metrics: `makerdao_action_deposits<_usd>`, `makerdao_action_liquidations<_usd>`, -`makerdao_action_new_debt<_usd>` and `makerdao_action_repayments<_usd>` - -```graphql-explorer -{ - getMetric(metric: "makerdao_action_deposits_usd"){ - timeseriesDataJson( - slug: "weth" - from: "2022-11-01T00:00:00Z" - to: "2022-11-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - - -New debt/repayments against collateral metrics:`dai_created`, `dai_repaid` and `total_dai_created` - -```graphql-explorer -{ - getMetric(metric: "dai_created"){ - timeseriesDataJson( - slug: "weth" - from: "2022-11-01T00:00:00Z" - to: "2022-11-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Total supplied/borrowed metrics: `makerdao_total_supplied<_usd>` and -`makerdao_total_borrowed<_usd>` - -```graphql-explorer -{ - getMetric(metric: "makerdao_total_supplied"){ - timeseriesDataJson( - slug: "wrapped-bitcoin" - from: "2022-11-01T00:00:00Z" - to: "2022-11-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Collateralization ratio and stability fee metrics: `mcd_collat_ratio` and -`mcd_stability_fee` - -```graphql-explorer -{ - getMetric(metric: "mcd_collat_ratio"){ - timeseriesDataJson( - slug: "wrapped-bitcoin" - from: "2022-11-01T00:00:00Z" - to: "2022-11-03T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` - - -Protocol total action metrics: `makerdao_total_deposits_usd`, `makerdao_total_liquidations_usd`, -`makerdao_total_new_debt_usd` and `makerdao_total_repayments_usd` - -```graphql-explorer -{ - getMetric(metric: "makerdao_total_new_debt_usd"){ - timeseriesDataJson( - slug: "maker" - from: "2022-11-01T00:00:00Z" - to: "2022-11-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Protocol total supplied/borrowed metrics: `makerdao_protocol_total_supplied_usd` and -`makerdao_protocol_total_borrowed_usd` - -```graphql-explorer -{ - getMetric(metric: "makerdao_protocol_total_supplied_usd"){ - timeseriesDataJson( - slug: "multi-collateral-dai" - from: "2022-11-01T00:00:00Z" - to: "2022-11-03T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Daily active addresses: `makerdao_active_addresses` - -```graphql-explorer -{ - getMetric(metric: "makerdao_active_addresses"){ - timeseriesDataJson( - slug: "maker" - from: "2023-01-01T00:00:00Z" - to: "2023-01-10T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/lending-and-borrowing-protocols/morpho/index.md b/src/docs/metrics/lending-and-borrowing-protocols/morpho/index.md deleted file mode 100644 index 836bff13c..000000000 --- a/src/docs/metrics/lending-and-borrowing-protocols/morpho/index.md +++ /dev/null @@ -1,206 +0,0 @@ ---- -title: Morpho Protocol -author: Filip -date: 2024-08-01 -description: Morpho Protocol Metrics ---- - -## Description -[Morpho](https://morpho.org/) is a decentralized finance (DeFi) protocol designed to optimize yields in -lending and borrowing markets. It operates as a layer on top of existing protocols like -Compound and Aave, improving the efficiency of capital allocation by matching lenders and -borrowers directly. This direct matching reduces intermediaries, enhancing both the interest -rates for lenders and borrowers. The protocol aims to offer seamless and more profitable -interactions within the DeFi ecosystem. - -### Metrics related to Morpho protocol: - -Action metrics: -* `morpho_action_deposits` - Amount of deposited tokens -* `morpho_action_deposits_usd` - Amount of deposited tokens in USD -* `morpho_action_liquidations` - Amount of liquidated tokens -* `morpho_action_liquidations_usd` - Amount of liquidated tokens in USD -* `morpho_action_new_debt` - Amount of borrowed tokens -* `morpho_action_new_debt_usd` - Amount of borrowed tokens in USD -* `morpho_action_repayments` - Amount of repaid tokens -* `morpho_action_repayments_usd` - Amount of repaid tokens in USD - -Protocol total action metrics: -* `morpho_total_deposits_usd` - Total amount of deposits on Morpho protocol (combining all assets in USD) -* `morpho_total_liquidations_usd` - Total amount of liquidations on Morpho protocol (combining all assets in USD) -* `morpho_total_new_debt_usd` - Total amount of borrowings on Morpho protocol (combining all assets in USD) -* `morpho_total_repayments_usd` - Total amount of repayments on Morpho protocol (combining all assets in USD) - -Morpho vaults metrics: -* `morpho_vaults_total_supplied_usd` - [Morpho vault](https://api.santiment.net/graphiql?variables=%7B%7D&query=%7B%0A%20%20getMetric(metric%3A%20%22morpho_vaults_total_supplied_usd%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableLabelFqns%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D) total supplied in USD -* `morpho_vaults_apy` - [Morpho vault](https://api.santiment.net/graphiql?variables=%7B%7D&query=%7B%0A%20%20getMetric(metric%3A%20%22morpho_vaults_total_supplied_usd%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableLabelFqns%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D) APY - -Protocol total supplied/borrowed metrics: -* `morpho_protocol_total_supplied_usd` - Total amount supplied on Morpho (combining all assets in USD) -* `morpho_protocol_total_borrowed_usd` - Total amount borrowed on Morpho (combining all assets in USD) - -Daily active addresses: -* `morpho_active_addresses` - Daily active addresses on Morpho protocol - -Flashloan metrics: -* `morpho_flashloan` - Flashloan volume by asset -* `morpho_flashloan_usd` - Flashloan volume by asset in USD -* `morpho_total_flashloan_usd` - Total flashloan volume across Morpho in USD - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -* Amount in tokens/USD - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -* [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - Actions metrics -* [Daily Intervals](/metrics/details/frequency#daily-frequency) - Active addresses metric - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Metrics related to the entire protocol available for `morpho`. - -Other metrics: -available for [these assets]() - ---- - -### SanAPI - -Action metrics: `morpho_action_deposits<_usd>`, `morpho_action_liquidations<_usd>`, -`morpho_action_new_debt<_usd>` and `morpho_action_repayments<_usd>` - -```graphql-explorer -{ - getMetric(metric: "morpho_action_deposits_usd"){ - timeseriesDataJson( - slug: "weth" - from: "2024-01-01T00:00:00Z" - to: "2024-02-01T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` - -Total action metrics: `morpho_total_deposits_usd`, `morpho_total_liquidations_usd`, -`morpho_total_new_debt_usd` and `morpho_total_repayments_usd` - -```graphql-explorer -{ - getMetric(metric: "morpho_total_new_debt_usd"){ - timeseriesDataJson( - slug: "morpho" - from: "2024-01-10T00:00:00Z" - to: "2024-01-12T00:00:00Z" - includeIncompleteData: true - interval: "1h") - } -} -``` - -Morpho vaults total supplied metric: `morpho_vaults_total_supplied_usd` - -```graphql-explorer -{ - getMetric(metric: "morpho_vaults_total_supplied_usd"){ - timeseriesDataJson( - selector:{ - slug:"morpho" - labelFqn: "santiment/morpho_vault->steakhouse usdc:v1" - } - from: "2024-10-01T00:00:00Z" - to: "2024-10-10T00:00:00Z" - includeIncompleteData: true - interval: "1h") - } -} -``` - -Morpho vaults APY metric: `morpho_vaults_apy` - -```graphql-explorer -{ - getMetric(metric: "morpho_vaults_apy"){ - timeseriesDataJson( - selector:{ - slug:"morpho" - labelFqn: "santiment/morpho_vault->steakhouse usdc:v1" - } - from: "2025-09-01T00:00:00Z" - to: "2025-10-10T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` - -Protocol total supplied/borrowed metrics: `morpho_protocol_total_supplied_usd` and -`morpho_protocol_total_borrowed_usd` - -```graphql-explorer -{ - getMetric(metric: "morpho_protocol_total_supplied_usd"){ - timeseriesDataJson( - slug: "morpho" - from: "2025-09-01T00:00:00Z" - to: "2025-09-07T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Daily active addresses: `morpho_active_addresses` - -```graphql-explorer -{ - getMetric(metric: "morpho_active_addresses"){ - timeseriesDataJson( - slug: "morpho" - from: "2024-01-01T00:00:00Z" - to: "2024-01-10T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` - -Flashloan metrics: `morpho_flashloan`, `morpho_flashloan_usd` and `morpho_total_flashloan_usd` - -```graphql-explorer -{ - getMetric(metric: "morpho_flashloan"){ - timeseriesDataJson( - slug: "usd-coin" - from: "2026-01-01T00:00:00Z" - to: "2026-01-10T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` diff --git a/src/docs/metrics/lending-and-borrowing-protocols/spark/index.md b/src/docs/metrics/lending-and-borrowing-protocols/spark/index.md deleted file mode 100644 index f9e86530c..000000000 --- a/src/docs/metrics/lending-and-borrowing-protocols/spark/index.md +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: Spark Protocol -author: Filip -date: 2024-07-01 -description: Spark Protocol Metrics ---- - -## Description -[Spark](https://spark.fi/) is a lending and borrowing crypto protocol developed by MakerDAO. -Spark aims to offer competitive interest rates and enhanced liquidity within the DeFi ecosystem, -integrating the best liquidity from Maker and seamlessly incorporating the best DeFi protocols. -The protocol incorporates with MakerDAO's existing infrastructure, ensuring stability and security. -By utilizing Spark, users can efficiently manage their crypto assets and optimize their financial -strategies within the decentralized finance landscape. - -### Metrics related to Spark protocol: - -Action metrics: -* `spark_action_deposits` - Amount of deposited tokens -* `spark_action_deposits_usd` - Amount of deposited tokens in USD -* `spark_action_liquidations` - Amount of liquidated tokens -* `spark_action_liquidations_usd` - Amount of liquidated tokens in USD -* `spark_action_new_debt` - Amount of borrowed tokens -* `spark_action_new_debt_usd` - Amount of borrowed tokens in USD -* `spark_action_repayments` - Amount of repaid tokens -* `spark_action_repayments_usd` - Amount of repaid tokens in USD - -Total supplied/borrowed metrics: -* `spark_total_supplied` - Total supplied tokens -* `spark_total_supplied_usd` - Total supplied tokens in USD -* `spark_total_borrowed` - Total borrowed tokens -* `spark_total_borrowed_usd` - Total borrowed tokens in USD - -APY (annual percentage yield) metric: -* `spark_supply_apy` - Supply APY -* `spark_borrow_apy` - Variable borrow APY (variable interest rate will fluctuate based on the market conditions) - -Protocol total action metrics: -* `spark_total_deposits_usd` - Total amount of deposits on Spark protocol (combining all assets in USD) -* `spark_total_liquidations_usd` - Total amount of liquidations on Spark protocol (combining all assets in USD) -* `spark_total_new_debt_usd` - Total amount of borrowings on Spark protocol (combining all assets in USD) -* `spark_total_repayments_usd` - Total amount of repayments on Spark protocol (combining all assets in USD) - -Protocol total supplied/borrowed metrics: -* `spark_protocol_total_supplied_usd` - Total amount supplied on Spark (combining all assets in USD) -* `spark_protocol_total_borrowed_usd` - Total amount borrowed on Spark (combining all assets in USD) - -Daily active addresses: -* `spark_active_addresses` - Daily active addresses on Spark protocol - -Flashloan metrics: -* `spark_flashloan` - Flashloan volume by asset -* `spark_flashloan_usd` - Flashloan volume by asset in USD -* `spark_total_flashloan_usd` - Total flashloan volume across Spark in USD - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -* Amount in tokens/USD -* APY metrics in percentage - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -* [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - Actions and APY metrics -* [Daily Intervals](/metrics/details/frequency#daily-frequency) - Active addresses metric - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Metrics related to the entire protocol available for `maker` and `multi-collateral-dai` - -Other metrics: -available for [these assets]() - ---- - -### SanAPI - -Action metrics: `spark_action_deposits<_usd>`, `spark_action_liquidations<_usd>`, -`spark_action_new_debt<_usd>` and `spark_action_repayments<_usd>` - -```graphql-explorer -{ - getMetric(metric: "spark_action_deposits_usd"){ - timeseriesDataJson( - slug: "weth" - from: "2024-01-01T00:00:00Z" - to: "2024-02-01T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` - -Total action metrics: `spark_total_deposits_usd`, `spark_total_liquidations_usd`, -`spark_total_new_debt_usd` and `spark_total_repayments_usd` - -```graphql-explorer -{ - getMetric(metric: "spark_total_new_debt_usd"){ - timeseriesDataJson( - slug: "multi-collateral-dai" - from: "2024-01-10T00:00:00Z" - to: "2024-01-12T00:00:00Z" - includeIncompleteData: true - interval: "1h") - } -} -``` - -Total supplied/borrowed metrics: `spark_total_supplied<_usd>` and -`spark_total_borrowed<_usd>` - -```graphql-explorer -{ - getMetric(metric: "spark_total_supplied"){ - timeseriesDataJson( - slug: "wrapped-bitcoin" - from: "2023-04-01T00:00:00Z" - to: "2023-04-07T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Protocol total supplied/borrowed metrics: `spark_protocol_total_supplied_usd` and -`spark_protocol_total_borrowed_usd` - -```graphql-explorer -{ - getMetric(metric: "spark_protocol_total_supplied_usd"){ - timeseriesDataJson( - slug: "maker" - from: "2023-04-01T00:00:00Z" - to: "2023-04-07T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -APY metric: `spark_supply_apy` and `spark_borrow_apy` - -```graphql-explorer -{ - getMetric(metric: "spark_supply_apy"){ - timeseriesDataJson( - slug: "wrapped-bitcoin" - from: "2024-08-01T00:00:00Z" - to: "2024-08-07T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` - -Daily active addresses: `spark_active_addresses` - -```graphql-explorer -{ - getMetric(metric: "spark_active_addresses"){ - timeseriesDataJson( - slug: "multi-collateral-dai" - from: "2024-01-01T00:00:00Z" - to: "2024-01-10T00:00:00Z" - includeIncompleteData: true - interval: "1d") - } -} -``` - -Flashloan metrics: `spark_flashloan`, `spark_flashloan_usd` and `spark_total_flashloan_usd` - -```graphql-explorer -{ - getMetric(metric: "spark_flashloan"){ - timeseriesDataJson( - slug: "usd-coin" - from: "2026-01-01T00:00:00Z" - to: "2026-01-10T00:00:00Z" - includeIncompleteData: true - interval: "5m") - } -} -``` diff --git a/src/docs/metrics/m2-money-supply/index.md b/src/docs/metrics/m2-money-supply/index.md deleted file mode 100644 index 7204331f9..000000000 --- a/src/docs/metrics/m2-money-supply/index.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: M2 Money Supply -author: Filip -date: 2024-03-01 -description: M2 Money Supply ---- - -## Description -The M2 money supply is a key economic indicator that measures the total amount of money in -circulation within an economy, including cash, checking deposits, and easily convertible near -money such as savings deposits, money market securities, and other time deposits. Unlike the -narrower M1, which focuses on liquid forms of money, M2 provides a broader view of the money -available in the economy, giving insights into potential inflationary pressures and economic -growth. Changes in the M2 money supply can influence interest rates, consumer spending, and -overall economic activity, making it an important tool for policymakers and economists. - - -M2 Money Supply metric: -* `money_supply` - M2 money supply - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Billions of Dollars - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -7-day interval - ---- - -## Latency - -FED announces data on a monthly basis - ---- - -## Available Assets - -Available for `m2-money` - ---- - -### SanAPI - -Available under name: `money_supply` - - -```graphql-explorer -{ - getMetric(metric: "money_supply"){ - timeseriesDataJson( - slug: "m2-money" - from: "2024-01-01T00:00:00Z" - to: "2024-03-01T00:00:00Z" - interval: "7d") - } -} -``` diff --git a/src/docs/metrics/makerdao-dai-savings-rate/index.md b/src/docs/metrics/makerdao-dai-savings-rate/index.md deleted file mode 100644 index 34cb54cb9..000000000 --- a/src/docs/metrics/makerdao-dai-savings-rate/index.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: MakerDAO DAI Savings Rate -author: Filip -date: 2024-03-01 -description: MakerDAO DAI Savings Rate ---- - -## Description -The MakerDAO DAI Savings Rate (DSR) is an interest rate paid to holders of the DAI stablecoin -for locking their DAI into smart contracts. It was introduced as a way to incentivize users to hold -DAI, thereby helping to maintain its stability and peg to the US dollar. - -The interest rate is determined by the MakerDAO community through governance votes and is paid out from -the stability fees collected from borrowers who generate DAI by locking up collateral. - - -MakerDAO DSR metrics: -* `makerdao_dsr_deposits` - Amount of DAI deposited into the smart contract -* `makerdao_dsr_withdrawals` - Amount of DAI withdrawn from the smart contract -* `makerdao_dsr_total_supplied` - Total supply of DAI in the smart contract -* `mcd_dsr` - Interest rate paid to DAI deposited in the DSR contract - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -Amount of DAI - -`mcd_dsr` - percentage - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for `multi-collateral-dai` - ---- - -### SanAPI - -Deposit and withdraw metrics: `makerdao_dsr_deposits` and `makerdao_dsr_withdrawals` - -```graphql-explorer -{ - getMetric(metric: "makerdao_dsr_deposits"){ - timeseriesDataJson( - slug: "multi-collateral-dai" - from: "2024-03-01T00:00:00Z" - to: "2024-03-03T00:00:00Z" - interval: "5m") - } -} -``` - -Total supplied metric: `makerdao_dsr_total_supplied` - -```graphql-explorer -{ - getMetric(metric: "makerdao_dsr_total_supplied"){ - timeseriesDataJson( - slug: "multi-collateral-dai" - from: "2024-03-01T00:00:00Z" - to: "2024-03-03T00:00:00Z" - interval: "5m") - } -} -``` - -MakerDAO DAI savings rate metric: `mcd_dsr` - -```graphql-explorer -{ - getMetric(metric: "mcd_dsr"){ - timeseriesDataJson( - slug: "multi-collateral-dai" - from: "2024-03-01T00:00:00Z" - to: "2024-03-03T00:00:00Z" - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/marketcap/index.md b/src/docs/metrics/marketcap/index.md deleted file mode 100644 index 9f2c1a811..000000000 --- a/src/docs/metrics/marketcap/index.md +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Marketcap in USD -author: Ivan -date: 2024-03-29 -description: Marketcap in USD ---- - -## Definition - -The marketcap in USD is derived as the price of an asset in USD multiplied by the circulating supply of the same asset. - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -USD - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -Available assets for [marketcap_usd](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22marketcap_usd%22%29%7B%0A++++metadata%7B%0A++++++availableSlugs%0A++++%7D%0A++%7D%0A%7D) - ---- - -## SanAPI - -### Marketcap USD - -```graphql-explorer -{ - getMetric(metric: "marketcap_usd") { - timeseriesDataJson( - slug: "ethereum" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -The full list of Marketcap in USD metrics is: - -
    - -Open Metrics List - -- marketcap_usd -- marketcap_usd_change_1d -- marketcap_usd_change_30d -- marketcap_usd_change_7d - -
    diff --git a/src/docs/metrics/mean-coin-age/index.md b/src/docs/metrics/mean-coin-age/index.md deleted file mode 100644 index 54cb058a1..000000000 --- a/src/docs/metrics/mean-coin-age/index.md +++ /dev/null @@ -1,164 +0,0 @@ ---- -title: Mean Coin Age -author: Ivan -date: 2020-04-06 -description: The average age of all coins/tokens on a given blockchain ---- - -## Definition - -Recall that the **[coin-age model](/metrics/details/stack-coin-age-model)** -allows us at each given point in time to assign age to each coin/token. - -There are two coin age defined metrics: - -- Mean Coin Age - The average age of all coins/tokens on the blockchain. -- Mean Dollar Invested Age - The average age of every dollar invested into the market cap of a coin. - -Mean Coin Age metrics are also available for different [time bounds](/metrics/details/timebound), which -compute the mean coin age for tokens moved at least once no longer than a specific number of days or years ago. - -### Example (Mean Coin age) - -Given there are 100 tokens in existence: - -- 50 of them have age 10 days -- 50 of them have age 20 days - -then the average coin age is: -$$ -\frac{10 × 50 + 20 × 50}{100} = 15\;\text{(coin-days)} -$$ - -### Example (Mean Dollar Invested Age) - -Given there 100 tokens in existence: - -- 50 of them have age 10 days and the token's price was \$1 at that time -- 50 of them have age 20 days and the token's price was \$2 at that time - -then the mean dollar invested age is: -$$ -\frac{10 × 50 + 20 × 50}{50 × \$1 + 50 × \$2} = \frac{1500}{150} = 10\;\text{(coin-dollar days)} -$$ - -> More technical definition and computation description can be found -> [here](/metrics/mean-coin-age/mean-coin-age-technical) - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -- Coin Age in Days -- Coin Dollar Age in Days - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Timebound - -[Timebound Metrics](/metrics/details/timebound) - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -- Mean Coin Age is available for [these - assets]() -- Mean Dollar Invested Age is available for [these assets]() - -> Note: timebound Mean Age metrics are available for [these - assets]() - ---- - -## SanAPI - -Available under the `mean_age` and `mean_age_` names. - -```graphql-explorer -{ - getMetric(metric: "mean_age") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-13T00:00:00Z" - to: "2020-01-18T00:00:00Z" - interval: "1d" - ) - } -} -``` - ---- - -Available under the `mean_dollar_invested_age` and -`mean_dollar_invested_age_` names. - -```graphql-explorer -{ - getMetric(metric: "mean_dollar_invested_age") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-13T00:00:00Z" - to: "2020-01-18T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -
    -Mean coin age metrics -- mean_age -- mean_age_90d -- mean_age_180d -- mean_age_365d -- mean_age_2y -- mean_age_3y -- mean_age_5y -
    - -
    -Mean dollar invested age metrics -- mean_dollar_invested_age -- mean_dollar_invested_age_90d -- mean_dollar_invested_age_180d -- mean_dollar_invested_age_365d -- mean_dollar_invested_age_2y -- mean_dollar_invested_age_3y -- mean_dollar_invested_age_5y -- mean_dollar_invested_age_change_1d -- mean_dollar_invested_age_change_7d -- mean_dollar_invested_age_change_30d -
    diff --git a/src/docs/metrics/mean-coin-age/mean-coin-age-technical.md b/src/docs/metrics/mean-coin-age/mean-coin-age-technical.md deleted file mode 100644 index 7cb944c76..000000000 --- a/src/docs/metrics/mean-coin-age/mean-coin-age-technical.md +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: Mean Coin Age - Technical Details -author: Tzanko Matev -date: 2021-11-22 ---- - -## Definition - -Recall that a **[coin-age model](/metrics/details/stack-coin-age-model)** allows -us at each given point in time to split all coins into segments where each -segment $x$ has an assigned amount $v_x$ and creation timestamp $ot_x$. The set -of all segments that exist at time $t$ will be denoted by $S_t$. - -Then, the formula for computing the mean coin age $MCA(t)$ is: - -$$ -MCA(t) = \frac{\sum_{x\in S_t} (t-ot_x)v_x}{\sum_{x\in S_t}v_x} -$$ - -Let us call the quantity in the numerator the **total coin-age** and denote it -by $TCA(t)$. The quantity in the denominator is the _total supply_ existing at -time $t$. We will call it $TS(t)$ - -## Total supply - -We can already compute the coin circulation. For each period $p$, we can -calculate the number of coins that have been active in the last $p$ days. Let us -denote this amount by $Circ_p(t)$. - -### Lemma - -$$ -TS(t) = Circ_p(t) -$$ - -for $p$ sufficiently large. More precisely, the equality holds if $p$ is larger -than the entire life of the coin. - -## Total age - -Let's focus on computing the total age of each coin. We have - -$$ -TCA(t) = t\left(\sum_{x\in S_t} v_x\right) - \sum_{x\in S_t} ot_x = TS(t)t - -TCT(t) -$$ - -We call the second summand the **total creation timestamp**. If we divide it by -the token supply, we will get the **mean creation timestamp** $MCT(t)$. Hence we -have the following formula: - -$$ -MCA(t) = t - MCT(t) -$$ - -In other words, the mean coin-age is equal to the current timestamp minus the -mean creation timestamp. - -## Total creation timestamp - -According to the theory that we have already developed, we can efficiently -compute the total creation timestamp. It is the metric $M_f(t)$ associated to -the function $f(x,t) = ot_x v_x$. - -### Lemma - -Let $E$ denote the event stream associated with the coin-age model $S$. Then - -$$ -\Delta TCT(t) = \sum_{e\in E \\ t_e = t} \sigma_e ot_x v_e -$$ - -The SQL statement for computing the real-time total creation timestamp delta is - -```sql -SELECT - asset_id, - dt, - sum(sigma*odt*amount) as value -FROM {events} -GROUP BY asset_id, dt -``` - -In practice, we don't use the real-time delta functions. Instead, we use daily -or five-minute deltas. We must construct those functions so that the value of -the daily TCT is the same as the value of the real-time TCT at the start of each -day. For the five-minute analog, a similar condition must hold. We have: - -### Lemma - -We compute the daily TCT delta using the following SQL: - -```sql -SELECT - asset_id, - toStartOfDay(dt + 86400) AS daily_dt, - sum(sigma*odt*amount) AS value -FROM {events} -GROUP BY asset_id, daily_dt -``` - -We compute the five-minute TCT delta using the following SQL: - -```sql -SELECT - asset_id, - toStartOfFiveMinutes(dt + 300) AS five_minute_dt, - sum(sigma*odt*amount) AS value -FROM {events} -GROUP BY asset_id, daily_dt -``` - -## Mean age computation - -From the facts above, we can easily derive the mean coin-age. We first compute -the daily or five-minute $\Delta TCT$. Then we use a cumulative sum to calculate -the daily five-minute total creation timestamp $TCT$. From that, we can -calculate the mean creation timestamp as a _composite metric_ with the SQL -formula: - -```sql -total_creation_timestamp/circulation_20y -``` - -Finally, we can compute the mean coin-age as a composite metric with the SQL -formula: - -```sql -dt - mean_creation_timestamp -``` - -## Relation to age consumed - -There is a relation between the total creation timestamp delta and the age -consumed. The formula computes the age consumed (or coin-days destroyed): - -$$ -AC(t) = \sum_{e\in E \\ t_e = t} -\sigma_e (t-ot_e)v_e -$$ - -So you have - -$$ -AC(t) = \Delta TCT(t) - t\sum_{e\in E \\ t_e=t} \sigma_e v_e -$$ - -The latter summand is the timestamp multiplied by the total supply delta at the -time $t$. If we choose a sufficiently large period $p$, it is also equal to -$\Delta Circ_p(t)$. So if we have already computed the age consumed, we can -compute the delta total creation timestamp as a composite metric: - -```sql -age_consumed + dt * circulation_delta_20y -``` - -However, our age consumed metric is measured in days. If we want the delta TCT -to be measured in seconds the formula is - -```sql -age_consumed*86400 + dt*circulation_delta_20y -``` - -If we want to measure it in days, then we have: - -```sql -age_consumed + dt/86400 * circulation_delta_20y -``` - -In conclusion, once we have age_consumed and circulation, we can compute the -mean coin age using only cumulative sums and composite metrics. diff --git a/src/docs/metrics/mean-realized-price/index.md b/src/docs/metrics/mean-realized-price/index.md deleted file mode 100644 index a51914d63..000000000 --- a/src/docs/metrics/mean-realized-price/index.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: Mean Realized Price -author: Filip -date: 2024-04-01 -description: Mean Realized Price Metrics ---- - -## Definition - -The Mean Realized Price metric calculates the average price at which tokens were obtained. -It provides insights into the average profitability of token transactions by considering the -[Realized Value](/metrics/realized-value) against the [Total Circulating](/metrics/circulation) -tokens. It can be understood as the price level that acts as support or resistance. - -$$ -\text{mean\_realized\_price\_usd} = \frac{\text{realized\_value\_usd}}{\text{circulation}} -$$ - -Mean Realized Price metric is also available for different [time bounds](/metrics/details/timebound), which -computes the mean realized price for tokens moved at least once no longer than a specific number of days or years ago. - - -### Bottom Indicator Use Case - -![Mean Realized Price](mean-realized-price.png) - -The Mean Realized Price carries considerable weight for crypto investors. In times of market instability, -it serves as a crucial indicator. If the price falls below the Mean Realized Price, it suggests that, -on average, token holders are facing unrealized losses. These periods are highlighted on the chart -above (red rectangles), and investors view them as opportunities to accumulate more tokens. - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Timebound - -[Timebound Metrics](/metrics/details/timebound) available - ---- - -## Measuring Unit - -USD - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these assets]() - -> Note: `mean_realized_price_usd` metric and all timebound realized value metrics are -> available for the same set of assets. - ---- - -## SanAPI - -Available under the `mean_realized_price_usd` and `mean_realized_price_usd_` names. - -```graphql-explorer -{ - getMetric(metric: "mean_realized_price_usd") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -
    -Mean Realized Price metrics -- mean_realized_price_usd -- mean_realized_price_usd_1d -- mean_realized_price_usd_7d -- mean_realized_price_usd_30d -- mean_realized_price_usd_60d -- mean_realized_price_usd_90d -- mean_realized_price_usd_180d -- mean_realized_price_usd_365d -- mean_realized_price_usd_2y -- mean_realized_price_usd_3y -- mean_realized_price_usd_5y -- mean_realized_price_usd_10y -
    diff --git a/src/docs/metrics/mvrv/index.md b/src/docs/metrics/mvrv/index.md deleted file mode 100644 index 1432b8e1d..000000000 --- a/src/docs/metrics/mvrv/index.md +++ /dev/null @@ -1,269 +0,0 @@ ---- -title: MVRV - Market Value To Realized Value -author: Santiment Team -date: 2025-10-28 -description: MVRV (Market Value to Realized Value) ratio shows the average profit or loss of all the coins currently in circulation according to the current price. ---- - - - -## Definition - -MVRV (Market Value to Realized Value) ratio is an asset's market capitalization divided by realized capitalization, where realized capitalization is every token multiplied by its acquisition price. - -## MVRV Ratio Overview - -MVRV shows the ratio between the current price and the average price of every token acquired. An increase in the ratio shows us how much unrealized profit the market is sitting on. As the ratio increases, more market participants become willing sellers. The value of MVRV gives an idea about the average profit of holders across different durations. - -## How MVRV Measured - -The MVRV Ratio is used as an on-chain indicator for the purpose of studying aggregate investor behaviors as price moves to/from their cost basis. It can be considered as a mean reversion style model, where the Realized Cap (aggregate market cost basis) functions as the mean and MVRV measures deviations from this mean. - -The value of an asset's given MVRV gives an idea of how much overvalued or undervalued an asset is based on short, mid, or long-term timeframes. - -An MVRV value of 100% (or 2.0) means that if all holders sell their coins/tokens at the current price, they will generate a 100% (x2) profit on average. The more this ratio increases, the more likely traders have historically demonstrated their willingness to sell. - -On the other side of the spectrum, a negative MVRV value indicates that the asset is "undervalued" on average. This means that if all coins were sold, most traders will be realizing losses at the asset's current price. - -MVRV values (regardless of which timeframe) will hover around 0%, assuming the asset has had enough time to normalize after its introduction as a publicly-traded asset. - -Overall, MVRV shows the average profit/loss of all the coins currently in circulation -given the current price. - -We need to define two terms: -- `MV` as in `Market Value` refers to the well-known capitalization. The second - part is the -- `RV` as in [Realized Value](/metrics/realized-value). It is an alternative to - the Market Value where instead of the current price, every coin/token is - multiplied by its acquisition price. - -The definition of MVRV is: - -$$ -MVRV = \frac{MV}{RV} -$$ - -## Usage Guide - -The MVRV ratio allows traders to gauge both actual profitability vs. loss on the network, as well as gauge the inherent degree of fear and greed that comes with it. Assets have different extremes in terms of how far a positive or negative fluctuation in its MVRV can go. And if we measure the coin's current MVRV vs. its lowest and highest points, it's usually fair to make educated presumptions of when price tops and bottoms are forming. - -### MVRV Bitcoin chart - - - -### High MVRV Values ( > 2 ) -MVRV value of 2 means that if all holders sell their coins/tokens at the current price, they will generate an x2 profit on average. - -### Low MVRV Values ( < 1 ) -If the MVRV value is between 0 and 1, then the market is "undervalued" on average, meaning most people will realize losses if they all sell their holdings at the current price. - -## Timebound - -[Timebound Metrics](/metrics/details/timebound) available. - -The timebound metrics can help exclude the inactive addresses. These metrics are -computed the same way as the MVRV metric, with the only difference that they -take into account only the coins/tokens that have moved in the desired time -range. Examples: `mvrv_usd_365d` is computed on the coins/tokens that moved at -least once in the past 365 days. `mvrv_usd_60d` is computed by taking only the -coins/tokens that moved at least once in the past 60 days. - -Comparing timebound MVRV values of different time ranges can clarify how much -profit/loss long-term and short-term holders can realize. - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -### MVRV Long/Short Difference - -MVRV Long/Short Difference is defined as: -$$ -\text{mvrv\_usd\_365d} - \text{mvrv\_usd\_60d} -$$ - -Negative values mean that short-term holders will realize higher profits -than long-term holders if they sell at a price at this moment. Positive values -show the opposite. - -During strong and long bull runs, this metric tends to grow, and during bear -markets it is decreasing. The rationale is that during strong bull runs, the -long term holders are determining when the bull run will end when they start -selling, while during bear markets, the long term holders are at a loss on average -and the short term holders manage to realize profits - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - - -## Measuring Unit - -Ratio - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -All available assets have [Daily -Intervals](/metrics/details/frequency#daily-frequency) A subset of the available -assets that consists of some of the bigger assets have [Five-Minute -Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -The daily interval MVRV metrics are available for [these -assets]() - - -The 5-minute MVRV metrics are available for [these -assets]() - ---- - -## SanAPI - -The daily metrics are available under the `mvrv_usd` name under the -`mvrv_usd_` name for the timebound metrics. The 5-minute interval -metrics are available under the `mvrv_usd_intraday` name under the -`mvrv_usd_intraday_` name for the timebound metrics. - -Example of query for **mvrv_usd**: - -```graphql-explorer -{ - getMetric(metric: "mvrv_usd") { - timeseriesDataJson( - slug: "santiment" - from: "2019-01-01T00:00:00Z" - to: "2019-09-01T00:00:00Z" - interval: "7d" - ) - } -} -``` - -Example of query for **mvrv_usd_intraday**: - -```graphql-explorer -{ - getMetric(metric: "mvrv_usd_intraday") { - timeseriesDataJson( - slug: "bitcoin" - from: "utc_now-90d" - to: "utc_now-30d" - interval: "3d" - ) - } -} -``` - -Example of query for **timebound MVRV**: - -```graphql-explorer -{ - getMetric(metric: "mvrv_usd_7d") { - timeseriesDataJson( - slug: "santiment" - from: "2019-01-01T00:00:00Z" - to: "2019-09-01T00:00:00Z" - interval: "7d" - ) - } -} -``` - -Example of query for **MVRV Long/Short Difference** - -```graphql-explorer -{ - getMetric(metric: "mvrv_long_short_diff_usd") { - timeseriesDataJson( - slug: "santiment" - from: "2019-01-01T00:00:00Z" - to: "2019-09-01T00:00:00Z" - interval: "7d" - ) - } -} -``` - -## Full list of metrics - -The full list of MVRV metrics is: - -
    - -Open Metrics List - -- mvrv_long_short_diff_usd -- mvrv_usd -- mvrv_usd_10y -- mvrv_usd_180d -- mvrv_usd_180d_change_1d -- mvrv_usd_180d_change_30d -- mvrv_usd_180d_change_7d -- mvrv_usd_1d -- mvrv_usd_2y -- mvrv_usd_30d -- mvrv_usd_30d_change_1d -- mvrv_usd_30d_change_30d -- mvrv_usd_30d_change_7d -- mvrv_usd_365d -- mvrv_usd_365d_change_1d -- mvrv_usd_365d_change_30d -- mvrv_usd_365d_change_7d -- mvrv_usd_3y -- mvrv_usd_5y -- mvrv_usd_60d -- mvrv_usd_60d_change_1d -- mvrv_usd_60d_change_30d -- mvrv_usd_60d_change_7d -- mvrv_usd_7d -- mvrv_usd_7d_change_1d -- mvrv_usd_7d_change_30d -- mvrv_usd_7d_change_7d -- mvrv_usd_90d -- mvrv_usd_90d_change_1d -- mvrv_usd_90d_change_30d -- mvrv_usd_90d_change_7d -- mvrv_usd_change_1d -- mvrv_usd_change_30d -- mvrv_usd_change_7d -- mvrv_usd_intraday -- mvrv_usd_intraday_10y -- mvrv_usd_intraday_180d -- mvrv_usd_intraday_1d -- mvrv_usd_intraday_2y -- mvrv_usd_intraday_30d -- mvrv_usd_intraday_365d -- mvrv_usd_intraday_3y -- mvrv_usd_intraday_5y -- mvrv_usd_intraday_60d -- mvrv_usd_intraday_7d -- mvrv_usd_intraday_90d -- mvrv_usd_z_score - -
    diff --git a/src/docs/metrics/network-growth/index.md b/src/docs/metrics/network-growth/index.md deleted file mode 100644 index 2d0d465dd..000000000 --- a/src/docs/metrics/network-growth/index.md +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: Network Growth -author: Santiment Team -date: 2025-10-28 -description: Amount of addresses that transferred a given token for the first time ---- - - - -## Definition - -The amount of new addresses that transferred a given token for the first -time. - -This chart illustrates user adoption over time and can be used to -identify when the project is gaining or losing traction. - -![tether network growth](aragon-network-growth.png) - -Here's a Network Growth graph for -[Aragon](https://app.santiment.net/projects/aragon), which lets anyone create -and manage a decentralized organization on Ethereum. - -UP until December of 2017, the Aragon network grew by 85-750 new addresses each -day, and the price loyally followed. - -Then, right around the start of 2018, the network growth slowly began to -throttle. It indicated that the Aragon user base was already quite deep, and -wouldn't be able to sustain future price growth. - -What happened since speaks for itself. - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -Number of addresses - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -## SanAPI - -Available under the `network_growth` name. - -```graphql-explorer -{ - getMetric(metric: "network_growth") { - timeseriesDataJson( - slug: "santiment" - from: "2019-01-01T00:00:00Z" - to: "2019-09-01T00:00:00Z" - interval: "7d" - ) - } -} -``` - -## Full list of metrics - -The full list of Network Growth metrics is: - -
    - -Open Metrics List - -- network_growth -- network_growth_change_1d -- network_growth_change_30d -- network_growth_change_7d - -
    \ No newline at end of file diff --git a/src/docs/metrics/network-profit-loss/index.md b/src/docs/metrics/network-profit-loss/index.md deleted file mode 100644 index cadd673a3..000000000 --- a/src/docs/metrics/network-profit-loss/index.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Network Profit Loss -author: Santiment Team -date: 2021-07-23 -description: Average profit or loss of all coins that change addresses. ---- - -## Definition - -Network Profit/Loss (NPL for short) computes the average profit or loss of all coins that change addresses daily. For each coin that moves on-chain, NPL takes the price at which it was last moved and assumes this to be its acquisition price. Once it changes addresses again, NPL assumes the coin was sold. - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Amount in dollars - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-freqency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -## SanAPI - -Example of query for **network_profit_loss**: - -```graphql-explorer -{ - getMetric(metric: "network_profit_loss") { - timeseriesDataJson( - slug: "santiment" - from: "2021-01-01T00:00:00Z" - to: "2021-02-01T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -The full list of Network Profit Loss metrics is: - -
    - -Open Metrics List - -- network_profit_loss -- network_profit_loss_change_1d -- network_profit_loss_change_30d -- network_profit_loss_change_7d - -
    \ No newline at end of file diff --git a/src/docs/metrics/new-deployed-contracts/index.md b/src/docs/metrics/new-deployed-contracts/index.md deleted file mode 100644 index 253383b6b..000000000 --- a/src/docs/metrics/new-deployed-contracts/index.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: New Deployed Contracts -author: Filip -date: 2025-09-01 -description: New Deployed Contracts Metric ---- - -## Description -New Deployed Contracts tracks the number of new smart contracts deployed on the Solana -network. This metric helps monitor developer activity and network growth over time. -A higher value may indicate increased adoption and ecosystem expansion. - -New Deployed Contracts Metric: -* `new_deployed_contracts` - The number of new smart contracts deployed - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Number of new contracts - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for `solana` - ---- - -### SanAPI - -Available under name: `new_deployed_contracts` - - -```graphql-explorer -{ - getMetric(metric: "new_deployed_contracts"){ - timeseriesDataJson( - slug: "solana" - from: "2025-09-01T00:00:00Z" - to: "2025-09-07T00:00:00Z" - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/nft-collection-holders-balance/index.md b/src/docs/metrics/nft-collection-holders-balance/index.md deleted file mode 100644 index fcd9c0715..000000000 --- a/src/docs/metrics/nft-collection-holders-balance/index.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: NFT Collection Holders Balance -author: Filip -date: 2022-06-17 -description: Average balance of all holders of NFT collection ---- -## Definition - -This metric represents average balance of collection holders -(e.g. average balance of `bored apes` holders is $10M). - -Balance of holders is calculated based on their ownership of NFTs -(sum of values (in eth and usd) of all NFTs they have). - - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Amount in USD - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -`ethereum` - ---- - -## SanAPI - -`nft_collection_holders_balance`: - -```graphql-explorer -{ - getMetric(metric: "nft_collection_holders_balance") { - timeseriesDataJson( - selector: { address: "0xed5af388653567af2f388e6224dc7c4b3241c544" } - from: "2022-05-01T00:00:00Z" - to: "2022-05-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/nft-collection-price/index.md b/src/docs/metrics/nft-collection-price/index.md deleted file mode 100644 index 48b4e03b0..000000000 --- a/src/docs/metrics/nft-collection-price/index.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: NFT Collection Price -author: Filip -date: 2022-07-12 -description: Daily minimum, maximum, average price in eth and usd, and daily trade count for NFT collections and tokens ---- -## Definition - -NFT Collection price is a set of metrics that represent prices and number of trades -for NFT collections and tokens. Based on the collection address and interval, users can -fetch data for minimum, maximum and average prices in ETH and USD for NFT collection -with that address. Also, they can fetch number of trades for some NFT collection. -Based on the collection address and token ID, users can fetch all the prices for that -NFT token. - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -* Price metrics - amount USD and ETH -* Trade count metrics - amount of trades - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -* NFT collection: [Daily Intervals](/metrics/details/frequency#daily-frequency) -* NFT tokens: [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -`ethereum` and `weth` - ---- - -## SanAPI - -The following metrics are available: -- nft_collection_min_price -- nft_collection_max_price -- nft_collection_avg_price -- nft_collection_min_price_usd -- nft_collection_max_price_usd -- nft_collection_avg_price_usd -- nft_collection_trades_count - -```graphql-explorer -{ - getMetric(metric: "nft_collection_min_price") { - timeseriesDataJson( - selector: { address: "0xed5af388653567af2f388e6224dc7c4b3241c544" } - from: "2022-05-01T00:00:00Z" - to: "2022-05-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -NFT collection trade count - `nft_collection_trades_count`: - -```graphql-explorer -{ - getMetric(metric: "nft_collection_trades_count") { - timeseriesDataJson( - selector: { address: "0xed5af388653567af2f388e6224dc7c4b3241c544" } - from: "2022-05-01T00:00:00Z" - to: "2022-05-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/nft-market-volume/index.md b/src/docs/metrics/nft-market-volume/index.md deleted file mode 100644 index 473b5a61a..000000000 --- a/src/docs/metrics/nft-market-volume/index.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: NFT Market Volume/Count -author: Filip -date: 2022-07-12 -description: Daily market volume in ETH, and daily market count for NFT collections ---- -## Definition - -NFT Market Volume/Count is metric which calculates market count and the market volume -in ETH for NFT collections. Assumption is that when the majority of the volume is buying NFTs, the market -is in a euphoric state. On the other hand, when NFT owners accept many orders, -the market is depressed. - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -* Volume metric - amount in ETH -* Count metric - amount of trades - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -* NFT collection: [Daily Intervals](/metrics/details/frequency#daily-frequency) - - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -`ethereum` and `weth` - ---- - -## SanAPI - -NFT collection buy/sell market volume (count) - `nft_market_volume` (`nft_market_count`): - -```graphql-explorer -{ - getMetric(metric: "nft_market_volume") { - timeseriesDataJson( - selector: { address: "0xed5af388653567af2f388e6224dc7c4b3241c544" } - from: "2022-05-01T00:00:00Z" - to: "2022-05-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/nft-network-profit-loss/index.md b/src/docs/metrics/nft-network-profit-loss/index.md deleted file mode 100644 index 816343856..000000000 --- a/src/docs/metrics/nft-network-profit-loss/index.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: NFT Network Profit Loss -author: Filip -date: 2022-06-29 -description: NFT network realized profit/loss for all NFTs and for each NFT collection separately ---- - -## Definition - -NFT Network Profit/Loss computes the average profit or loss of all NFTs -that change addresses. -This metric represents the average profit or loss of each -NFT collection that is being transacted on a given day. - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Amount in USD or ETH - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -- NFT network: [Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) -- NFT collection: [Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -`ethereum` - ---- - -## SanAPI - -NFT Network Profit Loss - `nft_network_profit_loss<_usd>`: - -```graphql-explorer -{ - getMetric(metric: "nft_network_profit_loss") { - timeseriesDataJson( - slug: "ethereum" - from: "2022-01-01T00:00:00Z" - to: "2022-01-10T00:00:00Z" - interval: "1d" - ) - } -} -``` - -NFT Collection Profit Loss - `nft_collection_profit_loss_usd`: - -```graphql-explorer -{ - getMetric(metric: "nft_collection_profit_loss_usd") { - timeseriesDataJson( - selector: { address: "0xed5af388653567af2f388e6224dc7c4b3241c544" } - from: "2022-01-01T00:00:00Z" - to: "2022-01-10T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/nft-trade-volume-usd/index.md b/src/docs/metrics/nft-trade-volume-usd/index.md deleted file mode 100644 index ea709b07b..000000000 --- a/src/docs/metrics/nft-trade-volume-usd/index.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: NFT Trade Volume USD -author: Katsiaryna -date: 2024-04-09 -description: Total NFT trades volume made on a particular marketplace in USD per day, NFT volume in USD made by NFT whales and NFT volumen in USD made by retail users on a particular marketplpace ---- -## Definition - -NFT volume is represented through several metrics: - -- **NFT trade volume USD** denotes the total value of transactions in US dollars involving non-fungible tokens (NFTs) within a specific marketplace (owner) during the measurement period. This metric is calculated based on the value of the base assets transferred for acquiring or trading NFTs. - -- **NFT whale trade volume USD** quantifies the total value of trades executed by significant investors, commonly referred to as "whales," within the NFT market, measured in US dollars. This metric highlights the impact of large-scale investors on the overall trading volume and market dynamics of NFTs. - -- **NFT retail trade volume USD** represents the total value of transactions conducted by individual retail investors, as opposed to institutional or large-scale investors, within the NFT market, measured in US dollars. It offers insight into the participation and spending behavior of individual, non-professional traders in the NFT ecosystem. - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Amount of USD - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -- `nft_trade_volume_usd` : [available assets](https://api.santiment.net/graphiql?query=%7B%0A%20%20getMetric(metric%3A%20%22nft_trade_volume_usd%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) - -- `nft_retail_trade_volume_usd`: [available assets](https://api.santiment.net/graphiql?query=%7B%0A%20%20getMetric(metric%3A%20%22nft_retail_trade_volume_usd%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) - -- `nft_whale_trade_volume_usd`: [available assets](https://api.santiment.net/graphiql?query=%7B%0A%20%20getMetric(metric%3A%20%22nft_whale_trade_volume_usd%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) - ---- - -## Available Owners - -`blur` -`cryptopunks` -`foundation` -`looksrare` -`opensea` -`rarible` -`superrare` -`x2y2` - - -The Polygon chain has been deprecated as of October 28th 2024 and is no longer supported. - - -## SanAPI - -The following metrics are available: - -- nft_trade_volume_usd -- nft_retail_trade_volume_usd -- nft_whale_trade_volume_usd - -Example query: NFT trades volume on Opensea - -```graphql-explorer -{ - getMetric(metric: "nft_trade_volume_usd") { - timeseriesDataJson( - selector: {slug: "weth", owner: "opensea"} - from: "2024-03-01T00:00:00Z" - to: "2024-03-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/nft-trades-count/index.md b/src/docs/metrics/nft-trades-count/index.md deleted file mode 100644 index c0319f9b7..000000000 --- a/src/docs/metrics/nft-trades-count/index.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: NFT Trades Count -author: Katsiaryna -date: 2024-04-09 -description: Total amount of NFT trades per day made on a particular marketplace, amount of NFT trades made by NFT whales and amount of NFT trades made by retail users made on a particular marketplace ---- -## Definition - -NFT trades count is represented through the following metrics: - -- **NFT trades count** refers to the total number of trades involving non-fungible tokens (NFTs) within a specific marketplace (owner) during a given period. - -- **NFT whale trades count** represents the count of trades conducted by significant investors, often referred to as "whales," within the NFT market. These traders typically possess substantial holdings and can significantly influence market trends due to the scale of their transactions. - -- **NFT retail trades count** represents the total number of trades executed by individual retail investors, as opposed to institutional or large-scale investors, within the NFT market. It provides insights into the level of participation and trading activity among non-professional traders in the NFT ecosystem. - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Amount of trades - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -- `nft_trades_count` : [available assets](https://api.santiment.net/graphiql?query=%7B%0A%20%20getMetric(metric%3A%20%22nft_trades_count%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) - -- `nft_whale_trades_count` : [available assets](https://api.santiment.net/graphiql?query=%7B%0A%20%20getMetric(metric%3A%20%22nft_whale_trades_count%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) - -- `nft_retail_trades_count` : [available assets](https://api.santiment.net/graphiql?query=%7B%0A%20%20getMetric(metric%3A%20%22nft_retail_trades_count%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) - ---- - -## Available Owners - -`blur` -`cryptopunks` -`foundation` -`looksrare` -`opensea` -`rarible` -`superrare` -`x2y2` - - -The Polygon chain has been deprecated as of October 28th 2024 and is no longer supported. - - - -## SanAPI - -The following metrics are available: - -- nft_trades_count -- nft_whale_trades_count -- nft_retail_trades_count - -Example query: Amount of NFT trades on Opensea - -```graphql-explorer -{ - getMetric(metric: "nft_trades_count") { - timeseriesDataJson( - selector: {slug: "ethereum", owner: "opensea"} - from: "2024-03-01T00:00:00Z" - to: "2024-03-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/nvt/index.md b/src/docs/metrics/nvt/index.md deleted file mode 100644 index 0f2bf6500..000000000 --- a/src/docs/metrics/nvt/index.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -title: NVT -author: Santiment Team -date: 2020-04-07 -description: The ratio between marketcap and transaction volume or circulation ---- - -## Definition - -The typical formula for NVT is the following: - -`NVT = Daily Market Cap / Daily Transaction Volume` - -Santiment provides an alternative formula for NVT: - -`NVT = Daily Market Cap / Daily Circulation` - -Since daily circulation is zero at the beginning of each day, NVT based on it -would have a spike at the day beginning, we solve it with rolling NVT metric -which uses rolling circulation for last 24 hours and is computed using -following formula: - -`NVT = Intraday Market Cap / Rolling Circulation` - -For some assets there is a more prceise metric called Circulation NVT, -which takes 24 hour rolling daily circulation instead of daily. -The `Network Value-to-Transaction` (NVT) ratio is an asset valuation metric -similar to the [P/E -ratio](https://www.investopedia.com/terms/p/price-earningsratio.asp) -traditionally used in equity markets to gauge a stock's growth potential. - -The P/E or `Price-to-Earnings` ratio is calculated by dividing the -company's current price per share with its earnings per share. A high -P/E could mean a stock's price is high relative to its earnings and -therefore possibly overvalued. Conversely, a low P/E might indicate that -the current stock price is low relative to earnings and possibly -undervalued. - -As crypto assets are not companies, their earnings are not known , so -Transaction Volume is often used as a proxy for the blockchain's -underlying value. - -Since Transaction Volume gets rather noisy and often includes duplicate -transactions (sending 10 ETH to a deposit address which then sends them to the -exchange hot wallet counts as 20 ETH Transaction Volume even though it's the -same 10 ETH being transacted), it's not an ideal measure of a network's economic -activity. That's why at Santiment we calculate NVT using Daily Trx Volume, but -also by using [Circulation](/metrics/circulation) instead, which filters out -excess transactions and provides a cleaner overview of a blockchain's daily -transaction throughput. You'll find both approaches plotted on the graph and can -choose which one you prefer. - -As with P/E, a high NVT indicates that an asset's network valuation is -higher than the value being transmitted on the network. In other words, -the network is expensive relative to how much value it moves, signaling -a potentially overvalued asset. - -Conversely, a low NVT denotes an asset that is cheaper per unit of -on-chain transaction volume, signaling a potentially undervalued asset. - -NVT is often used as a long-term indicator of an asset's price trends, -rather than a day-to-day valuation metric. - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Ratio - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five Minute Intervals](/metrics/details/frequency#five-minute-frequency) and [Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -- NVT using 1-day circulation is available for [these - assets]() - -- NVT Transaction Volume is available for [these - assets]() - ---- - -## SanAPI - -- `nvt` - NVT using 1 day Circulation. Computed with daily frequency. -- `nvt_5min` - Same as `nvt`, but computed with 5-minute frequency. -- `nvt_transaction_volume` - NVT using Transaction Volume. Computed with daily frequency. - -```graphql-explorer -{ - getMetric(metric: "nvt") { - timeseriesDataJson( - slug: "santiment" - from: "utc_now-90d" - to: "utc_now-60d" - interval: "1d" - ) - } -} -``` - ---- - -```graphql-explorer -{ - getMetric(metric: "nvt_transaction_volume") { - timeseriesDataJson( - slug: "santiment" - from: "utc_now-90d" - to: "utc_now-60d" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/open-interest/index.md b/src/docs/metrics/open-interest/index.md deleted file mode 100644 index 5b59bc460..000000000 --- a/src/docs/metrics/open-interest/index.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Open Interest -author: Ante -date: 2023-11-28 -description: Total number of outstanding or open contracts in the market. ---- - -## Definition -Open interest represents the total number of outstanding contracts that have not been settled by an offsetting trade. For example, if trader A buys a futures contract from trader B, and neither has closed out their position, the open interest is one. -Traders can close out their positions by taking an opposing position (sell if they were long or buy if they were short). Changes in open interest can reflect whether traders are initiating new positions or closing existing ones. -There are three types of open interest metrics: -- Open interest per exchange - represents the sum of open interests of all contracts on given exchange for a given asset -- Open interest per settlement currency - represents the sum of open interests of all contracts for given settlement currency and asset -- Total open interest - represents the sum of open interests of all contracts for a given asset ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -Dollars - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-minute Intervals](/metrics/details/frequency#five-minute-freqency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#funding-rates-latency) - ---- - -## Available Assets - -- Open interest per exchange is available for [these - assets]() - -- Open interest per settlement currency is available for [these - assets]() - -- Total open interest is available for [these - assets]() - ---- - -## Available Exchanges - -`Binance`, `Bitfinex`, `Bitget`, `Bitmex`, `Btcex`, `Bybit`, `Crosstower`, `Cryptodotcom`, `Deribit`, `Kraken`, `Okex` - ---- - -## SanAPI - -- Open interest per exchange is available under the `exchange_open_interest` name. -- Open interest per settlement currency is available under the `open_interest_per_settlement_currency` name. -- Total open interest is available under the `total_open_interest` name. - -```graphql-explorer -{ - getMetric(metric: "exchange_open_interest") { - timeseriesDataJson( - selector: { - slug: "ethereum" - owner: "binance" - } - from: "2023-11-27T00:00:00Z" - to: "2023-11-28T00:00:00Z" - interval: "5m" - ) - } -} -``` - ---- - -```graphql-explorer -{ - getMetric(metric: "open_interest_per_settlement_currency") { - timeseriesDataJson( - selector: { - slug: "ethereum" - owner: "USDT" - } - from: "2023-11-27T00:00:00Z" - to: "2023-11-28T00:00:00Z" - interval: "5m" - ) - } -} -``` - ---- - -```graphql-explorer -{ - getMetric(metric: "total_open_interest") { - timeseriesDataJson( - selector: { - slug: "ethereum" - } - from: "2023-11-27T00:00:00Z" - to: "2023-11-28T00:00:00Z" - interval: "5m" - ) - } -} -``` diff --git a/src/docs/metrics/pendle-markets/index.md b/src/docs/metrics/pendle-markets/index.md deleted file mode 100644 index fc1fbb092..000000000 --- a/src/docs/metrics/pendle-markets/index.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: Pendle Markets -author: Filip -date: 2025-03-01 -description: Pendle Markets Metrics ---- - -## Description -Pendle Protocol is a decentralized finance (DeFi) platform that allows users to trade the future yield of tokenized -assets. By splitting yield-bearing tokens into principal and yield components, Pendle enables more flexible yield -management strategies. This opens up opportunities for users to hedge, speculate, or lock in fixed yields, which -isn't typically possible in traditional DeFi staking. The protocol operates on Ethereum and other blockchain networks, -leveraging smart contracts to ensure secure and efficient transactions. - -Pendle Markets metrics: -* `pendle_total_markets_tvl` - Total USD value locked across all Pendle markets for the selected asset -* `pendle_underlying_apy` - Annual percentage yield (APY) of the underlying asset -* `pendle_implied_apy` - Average implied yields of all markets for a selected asset, weighted by expiry date -* `pendle_yield_spread` - Difference between the implied APY and the underlying APY - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -* `pendle_total_markets_tvl`- Amount in USD -* `pendle_underlying_apy`, `pendle_implied_apy` and `pendle_yield_spread` - Percentage - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for `ethena-staked-usde` - ---- - -### SanAPI - -Pendle total markets TVL metric: `pendle_total_markets_tvl` - -```graphql-explorer -{ - getMetric(metric: "pendle_total_markets_tvl"){ - timeseriesDataJson( - slug: "ethena-staked-usde" - from: "2025-01-01T00:00:00Z" - to: "2025-01-10T00:00:00Z" - interval: "1d") - } -} -``` - -APY metrics: `pendle_underlying_apy` and `pendle_implied_apy` - -```graphql-explorer -{ - getMetric(metric: "pendle_implied_apy"){ - timeseriesDataJson( - slug: "ethena-staked-usde" - from: "2025-01-01T00:00:00Z" - to: "2025-01-10T00:00:00Z" - interval: "1d") - } -} -``` - -Yield spread metric: `pendle_yield_spread` - -```graphql-explorer -{ - getMetric(metric: "pendle_yield_spread"){ - timeseriesDataJson( - slug: "ethena-staked-usde" - from: "2025-01-01T00:00:00Z" - to: "2025-01-10T00:00:00Z" - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/price-daa-divergence/index.md b/src/docs/metrics/price-daa-divergence/index.md deleted file mode 100644 index f0e5203ba..000000000 --- a/src/docs/metrics/price-daa-divergence/index.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Price and Daily Active Addresses Divergence -author: Santiment Team -date: 2025-03-19 ---- - -## Description - -The DAA Divergence metric measures the difference between the number of daily active -addresses (DAA) and an asset's price movement. It helps identify whether network activity -is supporting the price trend or if there's a mismatch that could signal a potential -reversal. A positive divergence (higher DAA, lower price) might indicate undervaluation, -while a negative divergence (lower DAA, higher price) could suggest overvaluation. -For more info, read the [A Primer on On-chain Trading Strategies](/education-and-use-cases/price-to-daily-addresses-divergence---primer-on-on-chain-trading-strategies) article. - -- `price_daa_divergence` - Divergence between an asset's price movement and daily active addresses -- `adjusted_price_daa_divergence` - Smoother version of `price_daa_divergence`, -averaging data over the last 365 days - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -Divergence factor - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -### SanAPI - -Available under name: `price_daa_divergence` and `adjusted_price_daa_divergence` - -```graphql-explorer -{ - getMetric(metric: "price_daa_divergence") { - timeseriesDataJson( - slug: "bitcoin" - from: "utc_now-90d" - to: "utc_now" - interval: "1d" - ) - } -} -``` - -```graphql-explorer -{ - getMetric(metric: "adjusted_price_daa_divergence") { - timeseriesDataJson( - slug: "bitcoin" - from: "utc_now-90d" - to: "utc_now" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/price-volatility/index.md b/src/docs/metrics/price-volatility/index.md deleted file mode 100644 index fb1f776c5..000000000 --- a/src/docs/metrics/price-volatility/index.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Price Volatility -author: Filip -date: 2022-12-07 -description: Price fluctuations of different assets ---- - -## Description -Price volatility is used to describe price fluctuations of an asset. - -If we use $\mu$ and $\sigma$ to denote mean and standard deviation of asset prices, -then we define **Price Volatility** as: - -$$ -volatility(assetPrice) = \frac{\sigma(assetPrice)}{\mu(assetPrice)} -$$ - -Price volatility metrics are available for 4 different time periods -* `price_volatility_1d` - Price volatility for the last day -* `price_volatility_1w` - Price volatility for the last 7 days -* `price_volatility_2w` - Price volatility for the last 14 days -* `price_volatility_4w` - Price volatility for the last 28 days - -Examples of use cases: -* Traders seek volatile assets because they move more quickly and have larger price changes. Those price changes are both upward and downward. Keeping this in mind, a trader needs effective risk management in order to trade volatile assets profitably. -* On the other hand, some traders seek exposure to the assets that are the least volatile, and they might use this metric to identify those assets. - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Volatility - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -Available for [these -assets]() - -> Note: All metrics are available for the same set of assets - ---- - -### SanAPI - -Available under names: `price_volatility_1d`, `price_volatility_1w`, -`price_volatility_2w` and `price_volatility_4w` - - -```graphql-explorer -{ - getMetric(metric: "price_volatility_1d"){ - timeseriesDataJson( - slug: "santiment" - from: "2022-11-01T00:00:00Z" - to: "2022-11-03T00:00:00Z" - interval: "5m") - } -} -``` diff --git a/src/docs/metrics/price/index.md b/src/docs/metrics/price/index.md deleted file mode 100644 index 41fcbff71..000000000 --- a/src/docs/metrics/price/index.md +++ /dev/null @@ -1,174 +0,0 @@ ---- -title: Price Metrics -author: Santiment Team -date: 2023-06-01 -description: Price in USD, BTC and USDT ---- - -## Definition - -The following metrics are provided: - -* `price_usd` - Price in USD, sourced from a 3rd party provider -* `price_usd_5m` - The same as `price_usd`, but the data points are aligned at 5 minute intervals and -any gaps are filled with the last known value -* `price_btc` - Price in BTC -* `price_usdt` - Price in USDT -* Open-High-Close-Low Price in USD - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Amount in dollars/usdt/bitcoins - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -- Available assets for [price_usd](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22price_usd%22%29%7B%0A++++metadata%7B%0A++++++availableSlugs%0A++++%7D%0A++%7D%0A%7D) -- Available assets for [price_usd_5m](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22price_usd_5m%22%29%7B%0A++++metadata%7B%0A++++++availableSlugs%0A++++%7D%0A++%7D%0A%7D) -- Available assets for [price_btc](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22price_btc%22%29%7B%0A++++metadata%7B%0A++++++availableSlugs%0A++++%7D%0A++%7D%0A%7D) -- Available assets for [price_usdt](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22price_usdt%22%29%7B%0A++++metadata%7B%0A++++++availableSlugs%0A++++%7D%0A++%7D%0A%7D) -- Available assets for [price_eth](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22price_eth%22%29%7B%0A++++metadata%7B%0A++++++availableSlugs%0A++++%7D%0A++%7D%0A%7D) ---- - -## SanAPI - -### Price USD - -```graphql-explorer -{ - getMetric(metric: "price_usd") { - timeseriesDataJson( - slug: "ethereum" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -### Average price in USD over five-minute intervals - -```graphql-explorer -{ - getMetric(metric: "price_usd_5m") { - timeseriesDataJson( - slug: "ethereum" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "5m" - ) - } -} -``` - -### Price BTC - -```graphql-explorer -{ - getMetric(metric: "price_btc") { - timeseriesDataJson( - slug: "ethereum" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -### Price USDT - -```graphql-explorer -{ - getMetric(metric: "price_usdt") { - timeseriesDataJson( - slug: "ethereum" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -### OHLC - -```graphql-explorer -{ - getMetric(metric: "price_usd") { - timeseriesDataJson( - slug: "ethereum" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - aggregation: OHLC) - } -} -``` - -## Full list of metrics - -The full list of Price metrics is: - -
    - -Open Metrics List - -- price_btc -- price_eth -- price_usd -- price_usd_5m -- price_usdt - -
    - -
    - -Open Change Metrics List - -- price_btc_change_1d -- price_btc_change_30d -- price_btc_change_7d -- price_eth_change_1d -- price_eth_change_30d -- price_eth_change_7d -- price_usd_change_1d -- price_usd_change_1h -- price_usd_change_30d -- price_usd_change_7d - -
    \ No newline at end of file diff --git a/src/docs/metrics/rank/index.md b/src/docs/metrics/rank/index.md deleted file mode 100644 index f7d74629e..000000000 --- a/src/docs/metrics/rank/index.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Rank -author: Santiment Team -date: 2025-03-19 -description: The position in the list of assets ordered by Marketcap in ascending order ---- - -## Definition - -The `rank` metrics is defined by the numerical position, starting from 1, of the asset within the list of all assets sorted by market capitalization in ascending order. Assets with smaller market capitalizations are assigned lower numerical positions. - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Position in a list - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -- [Available Assets](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22rank%22%29%7B%0A++++metadata%7B%0A++++++availableSlugs%0A++++%7D%0A++%7D%0A%7D) - ---- - -## SanAPI - -### Get historical ranks of an asset - -```graphql-explorer -{ - getMetric(metric: "rank") { - timeseriesDataJson( - slug: "ethereum" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -### Get the latest rank of each asset - -```graphql -{ - allProjects { - slug - rank: aggregatedTimeseriesData( - metric: "rank" - from: "utc_now-1d" - to: "utc_now" - aggregation: LAST - ) - } -} -``` - -**[Run in Explorer]()** diff --git a/src/docs/metrics/realized-market-capitalization-hodl-waves/index.md b/src/docs/metrics/realized-market-capitalization-hodl-waves/index.md deleted file mode 100644 index bb18f11f6..000000000 --- a/src/docs/metrics/realized-market-capitalization-hodl-waves/index.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: Realized Market Capitalization Hodl Waves -author: Ante -date: 2022-06-01 -description: Percent of interval Realized Marketcap in total Realized Marketcap ---- - -## Definition - -Realized Market Capitalization Hodl Waves is an alternative to Circulation Hodl Waves. -This metric is representing the percentage of realized cap for a given timebound -interval in total realized cap value. -For example `realized_cap_hodl_waves_1d_to_7d` is computed by dividing the realized -cap of coins that are 1 to 7 days old with total realized market cap: -`(realized_cap_usd_7d - realized_cap_usd_1d) / realized_cap_usd` -Assigning age to coin/tokens is done according to the [coin-age model](/metrics/details/stack-coin-age-model). - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Timebound - -[Interval Timebound Metrics](/metrics/details/interval_timebound) available - ---- - -## Measuring Unit - -Number - % between 0 and 100 - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -## SanAPI - -Available under `realized_cap_hodl_waves_` names. - -```graphql-explorer -{ - getMetric(metric: "realized_cap_hodl_waves_1d_to_7d") { - timeseriesDataJson( - slug: "santiment" - from: "2022-05-25T00:00:00Z" - to: "2022-06-01T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -
    -Realized Market Capitalization Hodl Waves Metrics -- realized_cap_hodl_waves_0d_to_1d -- realized_cap_hodl_waves_1d_to_7d -- realized_cap_hodl_waves_7d_to_30d -- realized_cap_hodl_waves_30d_to_60d -- realized_cap_hodl_waves_60d_to_90d -- realized_cap_hodl_waves_90d_to_180d -- realized_cap_hodl_waves_180d_to_365d -- realized_cap_hodl_waves_365d_to_2y -- realized_cap_hodl_waves_2y_to_3y -- realized_cap_hodl_waves_3y_to_5y -- realized_cap_hodl_waves_5y_to_10y -- realized_cap_hodl_waves_10y_to_20y -
    diff --git a/src/docs/metrics/realized-value/index.md b/src/docs/metrics/realized-value/index.md deleted file mode 100644 index a50656975..000000000 --- a/src/docs/metrics/realized-value/index.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Realized Value -author: Ivan -date: 2021-11-19 -description: Marketcap alternative with acquisition price instead of current price ---- - -## Definition - -Realized Value is an alternative to Market Capitalization (Market Value). Instead of -multiplying all coins/tokens by the last price, every coin/token is assigned the -price at which it was last moved. Assigning age to coin/tokens is done -according to the [coin-age model](/metrics/details/stack-coin-age-model). - -Realized Value metric is also available for different [time bounds](/metrics/details/timebound), which -computes realized value for tokens moved at least once no longer than a specific number of days or years ago. - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Timebound - -[Timebound Metrics](/metrics/details/timebound) available - ---- - -## Measuring Unit - -Dollars - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these -assets]() - -> Note: `realized_value_usd` metric and all timebound realized value metrics are -> available for the same set of assets. - ---- - -## SanAPI - -Available under the `realized_value_usd` and `realized_value_usd_` names. - -```graphql-explorer -{ - getMetric(metric: "realized_value_usd") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -
    -Realized value metrics -- realized_value_usd -- realized_value_usd_1d -- realized_value_usd_7d -- realized_value_usd_30d -- realized_value_usd_60d -- realized_value_usd_90d -- realized_value_usd_180d -- realized_value_usd_365d -- realized_value_usd_2y -- realized_value_usd_3y -- realized_value_usd_5y -- realized_value_usd_10y -
    \ No newline at end of file diff --git a/src/docs/metrics/renamed-metrics/index.md b/src/docs/metrics/renamed-metrics/index.md deleted file mode 100644 index 42ceebb4d..000000000 --- a/src/docs/metrics/renamed-metrics/index.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Renamed Metrics -author: Boris -date: 2024-04-29 ---- - -## Renamed Metrics - - -Renamed metrics are those that have undergone a name change within our system, reflecting updates to terminology or standardization efforts. These metrics remain actively supported for analysis and reporting but may now be referred to by a different name than previously used. It's important for users to be aware of these changes to ensure clarity and consistency in their analytical processes. While the underlying data and calculation methods for renamed metrics remain unchanged, their updated names help align our reporting practices with industry standards and best practices. Relying on renamed metrics allows for smoother communication and interpretation of analytical results across teams and stakeholders. - - -## Why Do We Rename Metrics? - -Metrics undergo renaming for several reasons, driven by our commitment to enhancing clarity, consistency, and alignment with industry standards. Here's why certain metrics may be renamed: - -1. **Standardization Efforts**: In response to evolving industry norms or best practices, we periodically update our metric terminology to align with widely accepted standards. Renaming metrics ensures consistency in communication and facilitates interoperability with external partners or industry peers, enhancing the clarity and accessibility of our analytical outputs. - -2. **Clarification of Concepts**: Renaming metrics may also serve to clarify their underlying concepts or methodologies, reducing ambiguity and improving understanding among users. By adopting more intuitive or descriptive names, we enhance the interpretability of metrics and facilitate more informed decision-making based on our analytical insights. - -3. **Alignment with User Feedback**: Feedback from users and stakeholders often informs our decisions to rename metrics, addressing concerns or confusion surrounding existing terminology. By incorporating user input, we strive to optimize the usability and relevance of our metrics, ensuring that they effectively meet the needs of our diverse user base. - -## Benefits of Renaming Metrics - -While metrics undergo name changes, their underlying definitions and calculations remain consistent, ensuring continuity and comparability in our analytical outputs. By staying informed about renamed metrics and updating documentation and training materials accordingly, users can seamlessly transition to using the updated terminology without disrupting their analytical workflows. Embracing renamed metrics supports our commitment to clarity, consistency, and alignment with industry standards, enhancing the effectiveness and relevance of our data analysis processes. - -## List Of Renamed Metrics - - - -- [Age Consumed Metrics](/metrics/age-consumed) - Renamed from **age_destroyed\[..]** to **age_consumed\[..]** -- [Weighted Sentiment Metrics](/metrics/sentiment-metrics/weighted-sentiment-metrics) - Renamed from **sentiment\_volume\_consumed_\[..]** to **sentiment\_weighted\_\[..]** -- [Exchange Inflow/Outflow Metrics](/metrics/exchange-funds-flow) - Renamed from **inflow_per_label_and_owner** to **exchange_inflow_per_exchange** and **outflow_per_label_and_owner** to **exchange_outflow_per_exchange** - - \ No newline at end of file diff --git a/src/docs/metrics/rsi/index.md b/src/docs/metrics/rsi/index.md deleted file mode 100644 index 774d39b31..000000000 --- a/src/docs/metrics/rsi/index.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: RSI -author: Filip -date: 2023-12-01 -description: Relative Strength Index ---- - -## Description -The Relative Strength Index (RSI) is a popular momentum oscillator used in technical -analysis to assess the magnitude and speed of price movements. RSI is typically applied to -identify overbought or oversold conditions in a financial instrument, helping traders gauge -potential trend reversals. The metric is calculated using the average gains and losses over a -specified period, often 14 days, and is expressed as a numerical value between 0 and 100. - -A reading above 70 on the RSI suggests that an asset may be overbought, indicating a potential -reversal or correction, while a reading below 30 suggests oversold conditions, signaling a possible -upward price movement. Traders commonly use RSI in conjunction with other technical indicators to -make informed decisions about entering or exiting positions in financial markets. - - -RSI metric is available for 3 different time periods -* `rsi_4h` - RSI for a 4-hour time frame -* `rsi_1d` - RSI for a 1-day time frame -* `rsi_7d` - RSI for a 7-day time frame - -> Note: Even though metrics are available for 5-minute intervals, the recommendation is to use them -> within their designated time frame. For instance, consider using a 1-day interval for `rsi_1d`. - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -Numerical value between 0 and 100 - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -Available for [these -assets]() - -> Note: All metrics are available for the same set of assets - ---- - -### SanAPI - -Available under names: `rsi_4h`, `rsi_1d` and `rsi_7d` - - -```graphql-explorer -{ - getMetric(metric: "rsi_1d"){ - timeseriesDataJson( - slug: "bitcoin" - from: "2023-11-01T00:00:00Z" - to: "2023-12-01T00:00:00Z" - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/sentiment-metrics/bullish-bearish-sentiment-metrics/index.md b/src/docs/metrics/sentiment-metrics/bullish-bearish-sentiment-metrics/index.md deleted file mode 100644 index 409d85631..000000000 --- a/src/docs/metrics/sentiment-metrics/bullish-bearish-sentiment-metrics/index.md +++ /dev/null @@ -1,179 +0,0 @@ ---- -title: Bullish/Bearish/Neutral Sentiment Metrics -author: Santiment Team -date: 2025-10-07 -description: The bullish, neutral, and bearish sentiment metrics show the part of the total social volume that has bullish, neutral, or bearish sentiment ---- - - -## Definition - -The Sentiment Bullish, Sentiment Bearish, and Sentiment Neutral metrics represent the sum of [Sentiment Bullish Bearish Score](/metrics/sentiment-metrics/#bullish-bearish-sentiment-score) values. - -- `sentiment_bullish_` metrics are computed by taking the sum of the bullish sentiment scores. -- `sentiment_neutral_` metrics are computed by taking the sum of the neutral sentiment scores. -- `sentiment_bearish_` metrics are computed by taking the sum of the bearish sentiment scores. - - -### Available Sources - -[List of available sources](/metrics/details/social-data/#available-data-sources) - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -Sum of sentiment scores - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Social Data Latency](/metrics/details/latency#social-data-latency) - ---- - -## Available Assets - -All metrics have the same set of [available assets]() - ---- - -## SanAPI - -Fetch timeseries data for `sentiment_bullish_total` for a single asset: - -```graphql-explorer -{ - getMetric(metric: "sentiment_bullish_total") { - timeseriesDataJson( - slug: "ethereum" - from: "utc_now-90d" - to: "utc_now-30d" - interval: "7d" - ) - } -} -``` - ---- - -Fetch timeseries data for `sentiment_neutral_total` for multiple assets at the same time: - -```graphql-explorer -{ - getMetric(metric: "sentiment_neutral_total") { - timeseriesDataPerSlugJson( - selector: { slugs: ["ethereum", "bitcoin"] } - from: "utc_now-60d" - to: "utc_now-55d" - interval: "1d" - ) - } -} -``` - ---- - -Fetch timeseries data for `sentiment_bearish_total` for multiple assets at the same time: - -```graphql-explorer -{ - getMetric(metric: "sentiment_bearish_total") { - timeseriesDataPerSlugJson( - selector: { slugs: ["ethereum", "bitcoin"] } - from: "utc_now-60d" - to: "utc_now-55d" - interval: "1d" - ) - } -} -``` - ---- - -Fetch aggregated daily values for many assets: - -```graphql-explorer -{ - allProjects(page: 1, pageSize: 50) { - slug - sentimentBullish: aggregatedTimeseriesData( - metric: "sentiment_bullish_total" - from: "utc_now-7d" - to: "utc_now" - ) - sentimentNeutral: aggregatedTimeseriesData( - metric: "sentiment_neutral_total" - from: "utc_now-7d" - to: "utc_now" - ) - sentimentBearish: aggregatedTimeseriesData( - metric: "sentiment_bearish_total" - from: "utc_now-7d" - to: "utc_now" - ) - } -} -``` - ---- - -## Full list of metrics - -The full list of Bullish/Neutral/Bearish sentiment metrics is: - -
    -Open bullish Sentiment Metrics List -- sentiment_bullish_4chan -- sentiment_bullish_bitcointalk -- sentiment_bullish_reddit -- sentiment_bullish_telegram -- sentiment_bullish_twitter -- sentiment_bullish_youtube_videos -- sentiment_bullish_farcaster -- sentiment_bullish_total -
    - -
    -Open neutral Sentiment Metrics List -- sentiment_neutral_4chan -- sentiment_neutral_bitcointalk -- sentiment_neutral_reddit -- sentiment_neutral_telegram -- sentiment_neutral_twitter -- sentiment_neutral_youtube_videos -- sentiment_neutral_farcaster -- sentiment_neutral_total -
    - -
    -Open bearish Sentiment Metrics List -- sentiment_bearish_4chan -- sentiment_bearish_bitcointalk -- sentiment_bearish_reddit -- sentiment_bearish_telegram -- sentiment_bearish_twitter -- sentiment_bearish_youtube_videos -- sentiment_bearish_farcaster -- sentiment_bearish_total -
    - diff --git a/src/docs/metrics/sentiment-metrics/index.md b/src/docs/metrics/sentiment-metrics/index.md deleted file mode 100644 index ff34309c9..000000000 --- a/src/docs/metrics/sentiment-metrics/index.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Sentiment metrics -author: Santiment Team -date: 2025-10-09 ---- - - -## Our Sentiment Metrics - - -- [Positive/Negative Sentiment](/metrics/sentiment-metrics/positive-negative-sentiment-metrics) - Shows how many mentions of a term/asset are expressed in a -positive/negative manner. -- [Bullish/Bearish Sentiment](/metrics/sentiment-metrics/bullish-bearish-sentiment-metrics) - Shows how many mentions of a term/asset are expressed in a -bullish/bearish manner. -- [Sentiment Balance](/metrics/sentiment-metrics/positive-negative-sentiment-metrics) - The difference between Positive Sentiment and Negative Sentiment -- [Sentiment Weighted](/metrics/sentiment-metrics/weighted-sentiment-metrics) - An improved version of the Sentiment Balance that adjusts the values by considering the number of mentions, standardizing data to make diverse asset sentiments comparable. - - -## What is Sentiment? - -**Sentiment** is the attitude, thought or judgement that people have which is -based on their feelings. - -**Positive sentiment** is an attitude that is hopeful, confident, and considering -of the good aspects of a situation or a subject. In the context of cryptocurrencies -this can manifest as optimism about the future of a coin, hope that the price will -increase, belief in the success of a token, and many more. - -**Negative sentiment** is an attitude that is critical, disapproving, and -considering of the bad aspects of a situation or a subject. In the context of -cryptocurrencies this can manifest as expressing the opinion that a token is a scam, -belief that a coin will fail, and many more. - -**Sentiment Analysis** is the problem of computationally identifying and -categorizing emotions, opinions and subjective information in a given piece of -text. - - - -We constantly update our labels -which helps us to keep labels as fresh as possible but result historical data -changes. Any modifications to labels, social sources, or relevant jobs will -prompt recalculation for the previous month's data. Within a 12 hour period, -metric can be supplemented with new data. - - -## Sentiment Score - -We trained a machine learning model on a large Twitter dataset that contains -over 1.6 million tweets, each labelled as either **positive** or **negative**. -The model is then used to evaluate the sentiment of each single document in the -[Social Data](/metrics/details/social-data) set $-$ it assigns a positive and negative -**sentiment score** to each message/post/comment/etc. - -The score is the probability that the content of the text is positive or -negative respectively. Therefore both the **positive** and **negative** sentiment -scores fall in a range between 0 (not positive/negative at all) and 1 (extremely -positive/negative). Moreover, the sum of these two scores always equals 1. - -Example: - -> I'm really excited about the new Libra currency! - -This message has a **positive** score of **0.75** and a **negative** score of -**0.25**. - -We use this approach for messages and comments from social networks -conversations because the structure of the text there is usually more or less -the same: short messages with a single and/or simple idea behind them. - -But this is not the case for all the messages: some of them might be long and -complicated, some might be just neutral or contain spam or other irrelevant -information. These kind of messages usually have a pretty vanished pair of -sentiment scores: both **positive** and **negative** scores are close to 0.5. -We don't include these kind of messages while calculating the **Sentiment -Metrics**: they are filtered out by a certain threshold. - -## Bullish Bearish Sentiment Score - -We are using `ElKulako/cryptobert` model from [Hugging Face](https://huggingface.co/) 🤗. This model was trained on crypto related tweets, reddit comments, and telegram posts. - -Model returns three probability scores: `bullish`, `neutral`, `bearish`. Each probability score is fall in a range between 0 and 1. Sum of all three scores equals to 1. - -Because it is based on the BERT model, it better understands the context of the text. - -## Metrics Calculation - -To ensure relevance and accuracy, only text with a sentiment score above a -certain threshold is considered in our sentiment metrics. This approach filters -out neutral, spam, or irrelevant messages, focusing on the most impactful data. -Our sentiment metrics are recalculated monthly to account for any changes in -our models or data sources, providing you with the most up-to-date insights. diff --git a/src/docs/metrics/sentiment-metrics/positive-negative-sentiment-metrics/index.md b/src/docs/metrics/sentiment-metrics/positive-negative-sentiment-metrics/index.md deleted file mode 100644 index dd6482146..000000000 --- a/src/docs/metrics/sentiment-metrics/positive-negative-sentiment-metrics/index.md +++ /dev/null @@ -1,227 +0,0 @@ ---- -title: Positive/Negative Sentiment Metrics -author: Santiment Team -date: 2024-06-26 -description: The postive and negative sentiment metrics show the part of the total social volume that has positive or negative sentiment ---- - -## Definition - -The Sentiment Positive and Sentiment Negative metrics represnt the sum of [Sentiment Score](/metrics/sentiment-metrics/#sentiment-score) values. - -- `sentiment_positive_` metrics are computed by taking the sum of the positive sentiment scores that are over 0.7. -- `sentiment_negative_` metrics are computed by taking the sum of the negative sentiment scores that are over 0.7. -- `sentiment_balance_` metrics show the difference between `sentiment_positive_` and `sentiment_negative_`. - -### Available Sources - -[List of available sources](/metrics/details/social-data/#available-data-sources) - -### Example - -Thare are 10 messages in telegram that mention `bitcoin`. Below is a table that shows -the sentiment scores of those 10 messages. The messages with the same sentiment score -are grouped together (messages count bigger than 1). - -| Messages count | Positive Sentiment Score | Negative Sentiment Score | -| -------------- | ------------------------ | ------------------------ | -| 3 | 0.7 | 0.3 | -| 2 | 1.0 | 0.0 | -| 3 | 0.2 | 0.8 | -| 2 | 0.55 | 0.45 | - -Using this data we can compute: - -- `sentiment_positive_telegram`: $3 * 0.7 + 2 * 1.0 = 4.1$ -- `sentiment_negative_telegram`: $3 * 0.8 = 2.4$ -- `sentiment_balance_telegram`: $4.1 - 2.4 = 1.7$ - -### Positive and Negative Sentiment Bitcoin Chart - - - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -Sum of sentiment scores - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Social Data Latency](/metrics/details/latency#social-data-latency) - ---- - -## Change Metrics - -[Change Metrics:](/metrics/details/change_metrics) - -- sentiment_balance_total_change_1d -- sentiment_balance_total_change_7d -- sentiment_balance_total_change_30d - ---- - -## Available Assets - -All metrics have the same set of [available assets]() - ---- - -## SanAPI - -Fetch timeseries data for `sentiment_positive_total` for a single asset: - -```graphql-explorer -{ - getMetric(metric: "sentiment_positive_total") { - timeseriesDataJson( - slug: "ethereum" - from: "utc_now-90d" - to: "utc_now-30d" - interval: "7d" - ) - } -} -``` - ---- - -Fetch timeseries data for `sentiment_negative_telegram` for multiple assets at the same time: - -```graphql-explorer -{ - getMetric(metric: "sentiment_negative_telegram") { - timeseriesDataPerSlugJson( - selector: { slugs: ["ethereum", "bitcoin"] } - from: "utc_now-60d" - to: "utc_now-55d" - interval: "1d" - ) - } -} -``` - ---- - -Fetch aggregated daily values for many assets: - -```graphql-explorer -{ - allProjects(page: 1, pageSize: 50) { - slug - sentimentPositive: aggregatedTimeseriesData( - metric: "sentiment_positive_total" - from: "utc_now-7d" - to: "utc_now" - ) - sentimentNegative: aggregatedTimeseriesData( - metric: "sentiment_negative_total" - from: "utc_now-7d" - to: "utc_now" - ) - sentimentBalance: aggregatedTimeseriesData( - metric: "sentiment_balance_total" - from: "utc_now-7d" - to: "utc_now" - ) - } -} -``` - -### Market Sentiment Positive / Negative - -There is an option to get Market Sentiment Positive Negative - -```graphql-explorer -{ - getMetric(metric: "sentiment_positive_telegram") { - timeseriesDataJson( - selector: { slug: "crypto_market" } - from: "utc_now-60d" - to: "utc_now-55d" - interval: "1d" - ) - } -} -``` - ---- - -```graphql-explorer -{ - getMetric(metric: "sentiment_negative_telegram") { - timeseriesDataJson( - selector: { slug: "crypto_market" } - from: "utc_now-60d" - to: "utc_now-55d" - interval: "1d" - ) - } -} -``` - ---- - -## Full list of metrics - -The full list of Positive/Negative/Balance sentiment metrics is: - -
    -Open Positive Sentiment Metrics List -- sentiment_positive_4chan -- sentiment_positive_bitcointalk -- sentiment_positive_reddit -- sentiment_positive_telegram -- sentiment_positive_twitter -- sentiment_positive_youtube_videos -- sentiment_positive_farcaster -- sentiment_positive_total -
    - -
    -Open Negative Sentiment Metrics List -- sentiment_negative_4chan -- sentiment_negative_bitcointalk -- sentiment_negative_reddit -- sentiment_negative_telegram -- sentiment_negative_twitter -- sentiment_negative_youtube_videos -- sentiment_negative_farcaster -- sentiment_negative_total -
    - -
    -Open Balance Sentiment Metrics List -- sentiment_balance_4chan -- sentiment_balance_bitcointalk -- sentiment_balance_reddit -- sentiment_balance_telegram -- sentiment_balance_twitter -- sentiment_balance_youtube_videos -- sentiment_balance_farcaster -- sentiment_balance_total -- sentiment_balance_total_change_1d -- sentiment_balance_total_change_7d -- sentiment_balance_total_change_30d -
    diff --git a/src/docs/metrics/sentiment-metrics/weighted-sentiment-metrics/index.md b/src/docs/metrics/sentiment-metrics/weighted-sentiment-metrics/index.md deleted file mode 100644 index 069c4e201..000000000 --- a/src/docs/metrics/sentiment-metrics/weighted-sentiment-metrics/index.md +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: Weighted Sentiment Metrics -author: Santiment Team -date: 2025-11-18 -description: The postive and negative sentiment metrics show the part of the total social volume that has positive or negative sentiment ---- - -## Definition - -The **Sentiment Weighted** is an improved version of the [Sentiment -Balance](/metrics/sentiment-metrics/positive-negative-sentiment-metrics) that also takes into account the [Unique Social Volume](/metrics/unique-social-volume). - -### Why Sentiment Balance needs improvement? - -Sentiment Positive/Negative/Balance metrics' values are in the interval `[-social_volume; +social_volume]` -where `social_volume` is the number of messages that mention a given coin. - -This makes the values of different assets hard to compare, as the mentions of Bitcoin are magnitutes higher compared to the mentions of a small token. - -### Sentiment Weighted Intuitive Definition - -**Sentiment Weighted** adjusts the values by considering the number of mentions, standardizing data to make diverse asset sentiments comparable. - -This means that spikes/dips in the metric will be seen when there is: - -- a lot of mentions for a coin -- most of the mentions are expressing the same sentiment -- most are positive or most are negative - -If the sentiment is mixed, or the asset is not mentioned a lot, there will be no spikes/dips. - -### Sentiment Weighted Technical Definition - -The metric is defined as a rolling Z-score of the term X, where: - -$$ -X = \mathrm{Unique Social Volume} \times \mathrm{Average Sentiment} -$$ - -More precisely we choose a duration $d$ which will be the length of our sliding -window. Then for any timestamp $t$ we consider the population $X(t,d)$ -consisting of all values of $X(t')$ for all timestamps $t'$ between $t-d$ and -$t$. If we use $\mu$ and $\sigma$ to denote mean and standard deviation, then we -define **Sentiment Weighted** as: - -$$ -Sentiment Weighted(t,d) = \frac{X(t) - \mu(X(t,d))}{\sigma(X(t,d))} -$$ - -This score can be explained as a _social-volume-weighted sentiment -balance_ $-$ it spikes when the social volume is really high and -the vast majority of the messages in it are very positive at the same time. Dips -will occur when the social volume again is high, but the overall sentiment is -negative. In case the volume is high but the sentiment is mixed, or the -sentiment has a strong positive (negative) polarity but with a low volume, the -**Sentiment Weighted** metric won't have significant changes and will -stay around 0. - -We have `5m`, `1h`, and `1d` weighted sentiment metrics. The difference between them is in the metrics that we use to calculate them. - -- for sentiment_weighted (5m) we use sentiment_balance (5m) and unique_social_volume (5m) -- for sentiment_weighted_1h we use sentiment_balance (1h) and unique_social_volume_1h -- for sentiment_weighted_1d we use sentiment_balance (1d) and unique_social_volume_1d - -The difference between base metrics lies in the interval on which we aggregate these metrics. -In case of `5m` aggregated metrics when we calculate standard deviation and average for a window $d$ we take $d$ 5m's datapoints. - -In case of `1h` aggregated metrics -- we take $d$ 1h's datapoints. - -In case of `1d` aggregated metrics -- we take $d$ 1d's datapoints. - - -The `5m` interval sentiment volume consumed metrics are highly sensitive to short-term fluctuations and external events, which can introduce significant noise into the data. This can make it difficult to accurately assess underlying sentiment trends. To mitigate this, we recommend utilizing metrics -aggregated over longer intervals: - - * **`1h` (one-hour) metrics:** These provide a more stable and smoothed representation of sentiment. - * **`1d` (one-day) metrics:** These offer a broader perspective on sentiment, reducing the impact of daily noise. - -Using these longer intervals helps to capture more sustained sentiment patterns. - - - -### Available Sources - -[List of available sources](/metrics/details/social-data/#available-data-sources) - -### Weighted Sentiment Bitcoin Chart - -## - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -Sum of sentiment scores - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Social Data Latency](/metrics/details/latency#social-data-latency) - ---- - -## Change Metrics - -[Change Metrics:](/metrics/details/change_metrics) - -- sentiment_weighted_total_change_1d -- sentiment_weighted_total_change_7d -- sentiment_weighted_total_change_30d - ---- - -## Available Assets - -All metrics have the same set of [available assets]() - ---- - -## SanAPI - -Fetch timeseries data for `sentiment_weighted_total` for a single asset: - -```graphql-explorer -{ - getMetric(metric: "sentiment_weighted_total") { - timeseriesDataJson( - slug: "ethereum" - from: "utc_now-90d" - to: "utc_now-60d" - interval: "1d" - ) - } -} -``` - ---- - -Fetch timeseries data for `sentiment_weighted_telegram` for multiple assets at the same time: - -```graphql-explorer -{ - getMetric(metric: "sentiment_weighted_telegram") { - timeseriesDataPerSlugJson( - from: "utc_now-60d" - to: "utc_now-55d" - interval: "1d" - selector: { slugs: ["ethereum", "bitcoin"] } - ) - } -} -``` - ---- - -Fetch aggregated daily values for many assets: - -```graphql-explorer -{ - allProjects(page: 1, pageSize: 50) { - slug - sentimentWeighted: aggregatedTimeseriesData( - metric: "sentiment_weighted_total" - from: "utc_now-7d" - to: "utc_now" - ) - } -} -``` - ---- - -## Full list of metrics - -The full list of weighted sentiment metrics is: - -
    -Open Weighted Sentiment Metrics List -- sentiment_weighted_4chan -- sentiment_weighted_bitcointalk -- sentiment_weighted_reddit -- sentiment_weighted_telegram -- sentiment_weighted_twitter -- sentiment_weighted_youtube_videos -- sentiment_weighted_farcaster -- sentiment_weighted_total -- sentiment_weighted_4chan_1h -- sentiment_weighted_bitcointalk_1h -- sentiment_weighted_reddit_1h -- sentiment_weighted_telegram_1h -- sentiment_weighted_twitter_1h -- sentiment_weighted_youtube_videos_1h -- sentiment_weighted_farcaster_1h -- sentiment_weighted_total_1d -- sentiment_weighted_4chan_1d -- sentiment_weighted_bitcointalk_1d -- sentiment_weighted_reddit_1d -- sentiment_weighted_telegram_1d -- sentiment_weighted_twitter_1d -- sentiment_weighted_youtube_videos_1d -- sentiment_weighted_farcaster_1d -- sentiment_weighted_total_1d -- sentiment_weighted_total_change_1d -- sentiment_weighted_total_change_7d -- sentiment_weighted_total_change_30d -
    diff --git a/src/docs/metrics/sky-savings/index.md b/src/docs/metrics/sky-savings/index.md deleted file mode 100644 index a2b465e47..000000000 --- a/src/docs/metrics/sky-savings/index.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: Sky Savings -author: Filip -date: 2024-10-01 -description: Sky Savings Metrics ---- - -## Description -Sky Savings is a feature of the decentralized Sky Protocol that allows users to access -the Sky Savings Rate module by supplying USDS, a stablecoin. There is no minimum supply -amount required, and users can withdraw their funds at any time, ensuring they remain -in control of their savings. The Sky Savings Rate is a dynamic, variable mechanism that -accumulates additional USDS in real time, determined by governance decisions within the -Sky ecosystem rather than market factors. When users supply USDS, they receive sUSDS -tokens, which serve as a digital record of their interaction and the value accrued. As -USDS tokens automatically accumulate in the pool every few seconds, users benefit from -increased savings when they redeem their sUSDS back to USDS. - -Sky Savings metrics: -* `sky_savings_deposits` - Amount of USDS deposited into the savings contract -* `sky_savings_withdrawals` - Amount of USDS withdrawn from the savings contract -* `sky_savings_total_supplied` - Total supply of USDS in the savings contract -* `sky_savings_apy` - Interest rate paid for depositing USDS - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -* `sky_savings_deposits`, `sky_savings_withdrawals` and `sky_savings_total_supplied`- Amount of USDS -* `sky_savings_apy` - Percentage - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for `usds` - ---- - -### SanAPI - -Deposit and withdraw metrics: `sky_savings_deposits` and `sky_savings_withdrawals` - -```graphql-explorer -{ - getMetric(metric: "sky_savings_deposits"){ - timeseriesDataJson( - slug: "usds" - from: "2024-10-01T00:00:00Z" - to: "2024-10-07T00:00:00Z" - interval: "1d") - } -} -``` - -Total supplied metric: `sky_savings_total_supplied` - -```graphql-explorer -{ - getMetric(metric: "sky_savings_total_supplied"){ - timeseriesDataJson( - slug: "usds" - from: "2024-10-01T00:00:00Z" - to: "2024-10-07T00:00:00Z" - interval: "1d") - } -} -``` - -Savings APY metric: `sky_savings_apy` - -```graphql-explorer -{ - getMetric(metric: "sky_savings_apy"){ - timeseriesDataJson( - slug: "usds" - from: "2024-10-01T00:00:00Z" - to: "2024-10-07T00:00:00Z" - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/social-dominance/index.md b/src/docs/metrics/social-dominance/index.md deleted file mode 100644 index 9c5911bcd..000000000 --- a/src/docs/metrics/social-dominance/index.md +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: Social Dominance -author: Santiment Team -date: 2025-07-10 -description: Share of the crypto discussions that refer to an asset/phrase -# REF metrics-hub/metricshub/social_dominance.py ---- - -## Definition - -Social Dominance shows the share of the discussions in crypto media that is referring -to a particular asset or phrase. - -The metric is build on top of the [Social Data](/metrics/details/social-data). - -We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. - -### Social Dominance for an Asset - -Social Dominance for an asset compares the [Social -Volume](/metrics/social-volume) of that asset to the combined social volume of the -100 largest assets by marketcap. - -Social Dominance of 50% for an asset means that the number of messages/posts that discuss -this asset equal half the number of messages/posts that discuss the Top 100 assets. - -> This definition allows the social dominance of an asset to exceed 100%. -> This can happen for assets whose name and/or ticker is a very common English word. - -### Social Dominance for a text phrase - -Social Dominance for an arbitrary text phrase compares the [Social -Volume](/metrics/social-volume) of that search term to the total number of -documents available. This essentially computes the percentage of all documents -that match this search term. - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Number - % between 0 and 100 - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Social Data Latency](/metrics/details/latency#social-data-latency) - ---- - -## Available Assets - -Available for [these -assets]() - -> Note: `social_dominance_total` metric and all metrics for a specific source are -> available for the same set of assets. - ---- - -## Sanbase - -Combined Social Dominance from all sources for an asset can be seen on a -[project's page](https://app.santiment.net/projects/santiment?from=2019-10-12T21%3A00%3A00.000Z&interval=12h&isAnomalyActive=false&isCartesianGridActive=false&isICOPriceActive=true&isLogScale=false&isMultiChartsActive=false&metrics=price_usd,social_dominance_total&projectId=101605&slug=santiment&ticker=SAN&timeRange=6m&title=Santiment%20%28SAN%29&to=2020-04-13T21%3A00%3A00.000Z). - -Social Dominance for arbitrary search terms can be viewed from the [trends -page](https://app.santiment.net/social-trends) ![trends page](trends-page.png) - -and enabling the Social Dominance toggle on the next page that shows the result. - -The combined social dominance from all sources is displayed -![social dominance search term](social-dominance-search-term.png) - -## SanAPI - -Available under the `social_dominance_total` and `social_dominance_total_` -names, where the available sources are: - -- 4chan -- telegram -- reddit -- twitter -- bitcointalk -- youtube_videos -- farcaster -- total (combines all sources) - -### Social Dominance for an asset - -```graphql-explorer -{ - getMetric(metric: "social_dominance_total") { - timeseriesDataJson( - selector: { slug: "santiment" } - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - ---- - -### Social Dominance for arbitrary search term - -```graphql-explorer -{ - getMetric(metric: "social_dominance_telegram") { - timeseriesDataJson( - selector: { text: "btc AND 1?k" } - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -The full list of Social Dominance metrics is: - -
    - -Open Metrics List - -- social_dominance_4chan -- social_dominance_ai_total -- social_dominance_bitcointalk -- social_dominance_reddit -- social_dominance_telegram -- social_dominance_total -- social_dominance_twitter -- social_dominance_youtube_videos -- social_dominance_farcaster - -
    - -
    - -Open Change Metrics List - -- social_dominance_total_change_1d -- social_dominance_total_change_30d -- social_dominance_total_change_7d - -
    - -
    - -Open Moving Average Metrics List - -- social_dominance_4chan_1h_moving_average -- social_dominance_4chan_24h_moving_average -- social_dominance_ai_total_1h_moving_average -- social_dominance_ai_total_24h_moving_average -- social_dominance_bitcointalk_1h_moving_average -- social_dominance_bitcointalk_24h_moving_average -- social_dominance_reddit_1h_moving_average -- social_dominance_reddit_24h_moving_average -- social_dominance_telegram_1h_moving_average -- social_dominance_telegram_24h_moving_average -- social_dominance_total_1h_moving_average -- social_dominance_total_24h_moving_average -- social_dominance_twitter_1h_moving_average -- social_dominance_twitter_24h_moving_average -- social_dominance_youtube_videos_1h_moving_average -- social_dominance_youtube_videos_24h_moving_average -- social_dominance_farcaster_1h_moving_average -- social_dominance_farcaster_24h_moving_average - -
    - -
    - -Open Moving Average Change Metrics List - -- social_dominance_total_1h_moving_average_change_1d -- social_dominance_total_1h_moving_average_change_30d -- social_dominance_total_1h_moving_average_change_7d -- social_dominance_total_24h_moving_average_change_1d -- social_dominance_total_24h_moving_average_change_30d -- social_dominance_total_24h_moving_average_change_7d - -
    diff --git a/src/docs/metrics/social-volume-ai/index.md b/src/docs/metrics/social-volume-ai/index.md deleted file mode 100644 index 3a0193692..000000000 --- a/src/docs/metrics/social-volume-ai/index.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Social Volume AI -author: Ilya -date: 2025-08-11 -description: The amount of messages/documents that relate to given assert found by NLP model ---- - -## Definition - -Social Volume is build on top of our [Social Data](/metrics/details/social-data). - -The **Social Volume AI** metric finds the relation of text to the given asset through the use of NLP(Named Entity Recognition) and NEL(Named Entity Linking) models. Similarly as in [Social Volume](https://academy.santiment.net/metrics/social-volume/#definition). - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Amount of distinct related to the given asset documents extracted by NLP model. - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) -[One-Hour Intervals](/metrics/details/frequency#hourly-frequency) - ---- - -## Latency - -[Social Data Latency](/metrics/details/latency#social-data-latency) - ---- - -## Available Assets - -Available for [these assets]() - -> Note: `social_volume_ai_total` metric is available for the same set of assets. - ---- - -## Sanbase - -Social Volume AI for an asset can be seen on a a [project's page](https://app.santiment.net/charts). - -## SanAPI - -Available under the `social_volume_ai_total` name. - -### Social Volume AI for an asset - -```graphql-explorer -{ - getMetric(metric: "social_volume_ai_total") { - timeseriesDataJson( - selector: { slug: "santiment" } - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -The full list of Social Volume metrics is: - -
    -Open Change Metrics List - -- social_volume_ai_total - -
    diff --git a/src/docs/metrics/social-volume/index.md b/src/docs/metrics/social-volume/index.md deleted file mode 100644 index 90b4ece2a..000000000 --- a/src/docs/metrics/social-volume/index.md +++ /dev/null @@ -1,210 +0,0 @@ ---- -title: Social Volume -author: Ivan -date: 2025-07-10 -description: The amount of messages/documents containing a given search term -# REF metrics-hub/metricshub/social_volume.py ---- - -## Definition - -Social Volume is build on top of the [Social Data](/metrics/details/social-data). - -The total number of [social data text documents](/metrics/details/social-data) that -contain the given search term at least once. Examples of documents are telegram -messages and reddit posts. If a single short telegram message includes the word -`crypto` more than once, this message will increase the social volume of the -word `crypto` by 1. If a long reddit post contains the word `crypto` 10 times, -this again will increase the social volume of the word `crypto` by 1. - -Social Volume can be computed for an [asset](/glossary#asset) or for arbitrary -search terms. When an asset is used, a special search term is constructed. For -example querying the social volume for `santiment` will result in a search term -similar to: - -> (SAN OR santiment OR santoken OR santimentnet OR sancoin OR sansan OR sancoin) -> AND NOT ((san AND francisco) OR (san AND fran) OR (san AND diego) OR (san AND -> marino) OR (san AND jose)) - -which includes documents containg `santiment` or `san` but excludes documents -that contain common phrases containing `san` like `San Francisco`. - -The arbitrary search term can be: - -- One particular word like `bitcoin`, `crypto` or `blockchain`. -- An exact phrase (surrounded by double quotation marks) like `"when moon"`, - `"buy high sell low"` or `"btc rekt"`. -- [Lucene Query](http://www.lucenetutorial.com/lucene-query-syntax.html) - a - search term that allows for logical operators. Examples: - - - `OR` - The union of two search results. `btc OR bitcoin` returns the - documents that contain at least one of the words `btc` and `bitcoin` - - `AND` - The intersection of two search results. `btc AND moon` returns the - documents that contain both of the words `btc` and `moon` at the same time. - - `NOT` - Filter out documents that contain a given search term. `btc NOT lambo` - returns the documents that contain the word `btc` and does not - contain the word `lambo` - - `?` - A wildcard search. `?` in the search term means that it can match any - character. For example the query `btc AND 1?k` will be the combined result - of `btc AND 10k`, `btc AND 11k`, ..., `btc AND 19k` (but also nonsense like - `btc AND 1sk`, `btc AND 1Ak`, etc. will be matched) - - Many other operators can be used, documentation for which can be found in - the lucene query syntax documentation. - -The operators can be combined and higher precedence can be expressed by using -parentheses `(btc OR bitcoin) AND moon NOT lambo` - it will result in all the -documents that contain either the words `btc` and `moon` or the words `bitcoin` -and `moon` in one document, excluding any documents that contain the word -`lambo`. - -We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Amount of documents that mention the given text pattern. - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Social Data Latency](/metrics/details/latency#social-data-latency) - ---- - -## Available Assets - -Available for [these assets]() - -> Note: `social_volume_total` metric and all metrics for a specific source are -> available for the same set of assets. - ---- - -## Sanbase - -Combined Social Volume from all sources for an asset can be seen on a [project's page](https://app.santiment.net/charts). - -Social Volume for arbitrary search terms can be viewed from the [trends page](https://app.santiment.net/social-trends) ![trends page](trends-page.png) - -The combined social volume from all sources is displayed. From the bottom of the -page social volume for a specific source can be displayed, too. ![social volume -search term](social-volume-search-term.png) - -## SanAPI - -Available under the `social_volume_total` and `social_volume_` -names, where the available sources are: - -- 4chan -- telegram -- reddit -- twitter -- bitcointalk -- youtube_videos -- farcaster -- total (combines all sources) - -### Social Volume for an asset - -```graphql-explorer -{ - getMetric(metric: "social_volume_total") { - timeseriesDataJson( - selector: { slug: "santiment" } - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - ---- - -### Social Volume for arbitrary search term - -```graphql-explorer -{ - getMetric(metric: "social_volume_telegram") { - timeseriesDataJson( - selector: { text: "btc AND 1?k" } - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - ---- - -### Market Social Volume - -There is an option to get Market Social Volume - -```graphql-explorer -{ - getMetric(metric: "social_volume_telegram") { - timeseriesDataJson( - selector: { slug: "crypto_market" } - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - - -## Full list of metrics - -The full list of Social Volume metrics is: - -
    -Open Metrics List - -- social_volume_4chan -- social_volume_bitcointalk -- social_volume_reddit -- social_volume_telegram -- social_volume_total -- social_volume_twitter -- social_volume_youtube_videos -- social_volume_farcaster - -
    - -
    -Open Change Metrics List - -- social_volume_total_change_1d -- social_volume_total_change_30d -- social_volume_total_change_7d - -
    diff --git a/src/docs/metrics/spent-coins-age-band/index.md b/src/docs/metrics/spent-coins-age-band/index.md deleted file mode 100644 index 235914ec0..000000000 --- a/src/docs/metrics/spent-coins-age-band/index.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: Spent Coins Age Band -author: Ante -date: 2022-06-01 -description: The distribution by age of coins spend on a given day ---- - -## Definition - -Spent Coins Age Band is a set of metrics that represent the distribution of coins -spent on a given day by the age of coins. In addition to absolute values, there -is percentage type of this metric, which shows the relative share of coins in a -given interval in relation to total amount of coins spent on a given day. -Assigning age to coin/tokens is done according to the [coin-age model](/metrics/details/stack-coin-age-model). - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Timebound - -[Interval Timebound Metrics](/metrics/details/interval_timebound) available - ---- - -## Measuring Unit - -Token/Coin amount and % between 0 and 100 - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -## SanAPI - -Available under `spent_coins_age_band_` and `percent_of_spent_coins_age_band_` names. - -```graphql-explorer -{ - getMetric(metric: "spent_coins_age_band_0d_to_1d") { - timeseriesDataJson( - slug: "santiment" - from: "2022-05-25T00:00:00Z" - to: "2022-06-01T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -
    -Spent Coins Age Band Metrics -- spent_coins_age_band_0d_to_1d -- spent_coins_age_band_1d_to_7d -- spent_coins_age_band_7d_to_30d -- spent_coins_age_band_30d_to_60d -- spent_coins_age_band_60d_to_90d -- spent_coins_age_band_90d_to_180d -- spent_coins_age_band_180d_to_365d -- spent_coins_age_band_365d_to_2y -- spent_coins_age_band_2y_to_3y -- spent_coins_age_band_3y_to_5y -- spent_coins_age_band_5y_to_7y -- spent_coins_age_band_7y_to_10y -- spent_coins_age_band_10y_to_inf -
    - -
    -Percent of Spent Coins Age Band Metrics -- percent_of_spent_coins_age_band_0d_to_1d -- percent_of_spent_coins_age_band_1d_to_7d -- percent_of_spent_coins_age_band_7d_to_30d -- percent_of_spent_coins_age_band_30d_to_60d -- percent_of_spent_coins_age_band_60d_to_90d -- percent_of_spent_coins_age_band_90d_to_180d -- percent_of_spent_coins_age_band_180d_to_365d -- percent_of_spent_coins_age_band_365d_to_2y -- percent_of_spent_coins_age_band_2y_to_3y -- percent_of_spent_coins_age_band_3y_to_5y -- percent_of_spent_coins_age_band_5y_to_7y -- percent_of_spent_coins_age_band_7y_to_10y -- percent_of_spent_coins_age_band_10y_to_inf -
    diff --git a/src/docs/metrics/stock-to-flow/index.md b/src/docs/metrics/stock-to-flow/index.md deleted file mode 100644 index 33c5d361c..000000000 --- a/src/docs/metrics/stock-to-flow/index.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Stock To Flow ratio -author: Tsetso -date: 2020-06-12 - -headline: "Stock To Flow Ratio (S2F): How It's Used and Calculated" -description: "Discover how to calculate and apply the stock to flow ratio in your trading strategy. Understand the balance between the supply and production rate of an asset to make trading decisions." ---- - -## Definition -The Stock To Flow (S2F) ratio is a vital indicator provided by Santiment. Defined in the simplest terms, it's a measure of the scarcity or abundance of a specific asset. The stock-to-flow ratio is fundamentally a relationship between the total supply of an asset (the stock) and its production rate (the flow). We measure the stock-to-flow ratio for a given asset as the ratio between the [Total Circulation](/metrics/circulation) of the asset and the daily minted coins multiplied by days in one year. - -The 'stock' aspect relates to the existing supply of the asset in circulation, while the 'flow' portion refers to the newly produced assets, usually measured annually. - -![Stock to Flow](https://github.com/santiment/academy/assets/24714957/29871977-a860-4fa6-a2e0-a691058a83ff) -Source: https://app.santiment.net/charts/stock-to-flow-ratio-btc-22307 - -## Applying the Stock to Flow Ratio to Trading - -In the trading world, how does the stock-to-flow ratio come into play? A high S2F ratio implies scarcity, meaning there's less production compared to the existing supply. This scarcity could signify a potential price increase due to the limited new supply making its way to the market. On the opposite end, a low stock-to-flow ratio indicates a larger new supply but a smaller demand, possibly leading to a depreciation in the asset's value. - -## Making Informed Trading Decisions with the S2F Ratio - -As a trader, a high stock-to-flow ratio could be viewed as a buying signal, as the high scarcity could mean potential price appreciation. However, a low S2F might be a selling cue to prevent potential losses from the predicted oversupply. - -However, the stock-to-flow ratio shouldn't be the only tool you use when deciding to buy or sell. It should be used alongside other indicators and market analysis methods. Remember to assess overall market sentiment, global economic trends, and particular news or events that could affect price changes of your chosen asset. - -In essence, the stock-to-flow should be one tool in a collection used to formulate a comprehensive and robust trading strategy. - ---- - -## Access - -Stock To Flow ratio metric is available only in `Custom` plans. - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Timebound - -[Timebound Metrics](/metrics/details/timebound) available - ---- - -## Measuring Unit - -Token/Coin amount - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these -assets]() - -> Note: `stock_to_flow` metric is available only for assets that mint new coins on a regular basis. - ---- - -## SanAPI - -Available under the `stock_to_flow` name. - -```graphql-explorer -{ - getMetric(metric: "stock_to_flow") { - timeseriesDataJson( - slug: "bitcoin" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/supply-distribution/amount-of-holders/index.md b/src/docs/metrics/supply-distribution/amount-of-holders/index.md deleted file mode 100644 index b632e643f..000000000 --- a/src/docs/metrics/supply-distribution/amount-of-holders/index.md +++ /dev/null @@ -1,211 +0,0 @@ ---- -title: Amount of Holders Metrics -author: Santiment Team -date: 2024-04-01 ---- - -## Definition - -The Amount of Holders Metric quantifies the number of distinct addresses holding a token -across predefined balance intervals, offering insight into ownership distribution. This analysis -aids in evaluating decentralization levels and understanding the diversity of holders within the -ecosystem. - -Amount of Holders Metrics: -- `holders_distribution_` - The number of addresses holding tokens within a specified balance [interval](/metrics/details/supply_distribution_parameters#available-intervals) -- `percent_of_holders_distribution_` - The percentage of addresses within a specified balance [interval](/metrics/details/supply_distribution_parameters#available-intervals) -- `holders_distribution_over_` - The number of addresses with balances exceeding a specified balance [threshold](/metrics/details/supply_distribution_parameters#available-thresholds) - -#### Supply Distribution (by number of addresses) Bitcoin Chart - - -> Additionally, the above metrics can only be calculated for active holders - holders who have moved coins in the -> past year. To include only active holders add `active_` prefix (for example: `active_holders_distribution_`) - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -* `holders_distribution_` and `holders_distribution_over_` - Number of addresses -* `percent_of_holders_distribution_` - Percentage - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these assets]() - -> Note: All of the metrics are available for the same set of assets. - ---- - -## API - -Holders distribution metrics: `holders_distribution_` - -```graphql-explorer -{ - getMetric(metric: "holders_distribution_1_to_10") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -Percent of holders distribution metrics: `percent_of_holders_distribution_` - -```graphql-explorer -{ - getMetric(metric: "percent_of_holders_distribution_10k_to_100k") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -Holders distribution over metrics: `holders_distribution_over_` - -```graphql-explorer -{ - getMetric(metric: "active_holders_distribution_over_1k") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - ---- - -## Full list of metrics - -### Amount of holders metrics - -
    -Holders distribution metrics -- holders_distribution_0_to_0.001 -- holders_distribution_0.001_to_0.01 -- holders_distribution_0.01_to_0.1 -- holders_distribution_0.1_to_1 -- holders_distribution_1_to_10 -- holders_distribution_10_to_100 -- holders_distribution_100_to_1k -- holders_distribution_1k_to_10k -- holders_distribution_10k_to_100k -- holders_distribution_100k_to_1M -- holders_distribution_1M_to_10M -- holders_distribution_10M_to_100M -- holders_distribution_100M_to_1B -- holders_distribution_1B_to_inf -- holders_distribution_total -
    - -
    -Percent of holders distribution metrics -- percent_of_holders_distribution_0_to_0.001 -- percent_of_holders_distribution_0.001_to_0.01 -- percent_of_holders_distribution_0.01_to_0.1 -- percent_of_holders_distribution_0.1_to_1 -- percent_of_holders_distribution_1_to_10 -- percent_of_holders_distribution_10_to_100 -- percent_of_holders_distribution_100_to_1k -- percent_of_holders_distribution_1k_to_10k -- percent_of_holders_distribution_10k_to_100k -- percent_of_holders_distribution_100k_to_1M -- percent_of_holders_distribution_1M_to_10M -- percent_of_holders_distribution_10M_to_100M -- percent_of_holders_distribution_100M_to_1B -- percent_of_holders_distribution_1B_to_inf -
    - -
    -Holders distribution over metrics -- holders_distribution_over_1 -- holders_distribution_over_10 -- holders_distribution_over_100 -- holders_distribution_over_1k -- holders_distribution_over_10k -- holders_distribution_over_100k -- holders_distribution_over_1M -
    - -### Amount of active holders metrics - -
    -Active holders distribution metrics -- active_holders_distribution_0_to_0.001 -- active_holders_distribution_0.001_to_0.01 -- active_holders_distribution_0.01_to_0.1 -- active_holders_distribution_0.1_to_1 -- active_holders_distribution_1_to_10 -- active_holders_distribution_10_to_100 -- active_holders_distribution_100_to_1k -- active_holders_distribution_1k_to_10k -- active_holders_distribution_10k_to_100k -- active_holders_distribution_100k_to_1M -- active_holders_distribution_1M_to_10M -- active_holders_distribution_10M_to_inf -- active_holders_distribution_total -
    - -
    -Active percent of holders distribution metrics -- percent_of_active_holders_distribution_0_to_0.001 -- percent_of_active_holders_distribution_0.001_to_0.01 -- percent_of_active_holders_distribution_0.01_to_0.1 -- percent_of_active_holders_distribution_0.1_to_1 -- percent_of_active_holders_distribution_1_to_10 -- percent_of_active_holders_distribution_10_to_100 -- percent_of_active_holders_distribution_100_to_1k -- percent_of_active_holders_distribution_1k_to_10k -- percent_of_active_holders_distribution_10k_to_100k -- percent_of_active_holders_distribution_100k_to_1M -- percent_of_active_holders_distribution_1M_to_10M -- percent_of_active_holders_distribution_10M_to_inf -
    - -
    -Active holders distribution over metrics -- active_holders_distribution_over_1 -- active_holders_distribution_over_10 -- active_holders_distribution_over_100 -- active_holders_distribution_over_1k -- active_holders_distribution_over_10k -- active_holders_distribution_over_100k -- active_holders_distribution_over_1M -
    \ No newline at end of file diff --git a/src/docs/metrics/supply-distribution/amount-of-labeled-holders/index.md b/src/docs/metrics/supply-distribution/amount-of-labeled-holders/index.md deleted file mode 100644 index b002f4968..000000000 --- a/src/docs/metrics/supply-distribution/amount-of-labeled-holders/index.md +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Amount of Labeled Holders Metrics -author: Santiment Team -date: 2024-04-01 ---- - -## Definition - -The Amount of Labeled Holders Metric quantifies the number of distinct addresses with a specific label holding a token -across predefined balance intervals. By quantifying the number of distinct addresses with -designated labels such as exchange, infrastructure, miner, whale, or all, this metric provides insights into -the composition and activities of various participant groups. Whether tracking the influence of exchanges, the -backbone support of infrastructure holders, the mining community, or the presence of large-scale holders (whales), -this metric enables stakeholders to assess the diversity and concentration of ownership. By analyzing these -labeled holders across predefined balance intervals, it becomes possible to discern trends, identify patterns, -and inform strategic decision-making within the cryptocurrency space. - -There are two sets of metrics: holders labeled distribution metrics and holders labeled negative distribution -metrics. Holders labeled distribution metrics encompass all addresses with a specific label, while holders -labeled negative distribution metrics exclude all addresses with a specific label. - -Amount of Labeled Holders Metrics: -- `holders_labeled_distribution_` - The number of addresses with a specific [label](/metrics/details/supply_distribution_parameters#available-labels) -holding tokens within a specified balance [interval](/metrics/details/supply_distribution_parameters#available-intervals) -- `holders_labeled_negative_distribution_` - The number of addresses that do not contain a specific -[negative label](/metrics/details/supply_distribution_parameters#available-negative-labels), holding tokens within a specified balance [interval](/metrics/details/supply_distribution_parameters#available-intervals) - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Number of addresses - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these assets]() - -> Note: All of the metrics are available for the same set of assets. - ---- - -## API - -Holders labeled distribution metrics: `holders_labeled_distribution_` - -```graphql-explorer -{ - getMetric(metric: "holders_labeled_distribution_1_to_10") { - timeseriesDataJson( - selector: { - slug: "ethereum" - label: "miner" - } - from: "2024-01-01T00:00:00Z" - to: "2024-01-10T00:00:00Z" - interval: "1d" - ) - } -} -``` - -Holders labeled negative distribution metrics: `holders_labeled_negative_distribution_` - -```graphql-explorer -{ - getMetric(metric: "holders_labeled_negative_distribution_10_to_100") { - timeseriesDataJson( - selector: { - slug: "ethereum" - label: "nonExchange" - } - from: "2024-01-01T00:00:00Z" - to: "2024-01-10T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -
    -Holders labeled distribution metrics -- holders_labeled_distribution_0_to_0.001 -- holders_labeled_distribution_0.001_to_0.01 -- holders_labeled_distribution_0.01_to_0.1 -- holders_labeled_distribution_0.1_to_1 -- holders_labeled_distribution_1_to_10 -- holders_labeled_distribution_10_to_100 -- holders_labeled_distribution_100_to_1k -- holders_labeled_distribution_1k_to_10k -- holders_labeled_distribution_10k_to_100k -- holders_labeled_distribution_100k_to_1M -- holders_labeled_distribution_1M_to_10M -- holders_labeled_distribution_10M_to_inf -- holders_labeled_distribution_total -
    - -
    -Holders labeled negative distribution metrics -- holders_labeled_negative_distribution_0_to_0.001 -- holders_labeled_negative_distribution_0.001_to_0.01 -- holders_labeled_negative_distribution_0.01_to_0.1 -- holders_labeled_negative_distribution_0.1_to_1 -- holders_labeled_negative_distribution_1_to_10 -- holders_labeled_negative_distribution_10_to_100 -- holders_labeled_negative_distribution_100_to_1k -- holders_labeled_negative_distribution_1k_to_10k -- holders_labeled_negative_distribution_10k_to_100k -- holders_labeled_negative_distribution_100k_to_1M -- holders_labeled_negative_distribution_1M_to_10M -- holders_labeled_negative_distribution_10M_to_inf -- holders_labeled_negative_distribution_total -
    diff --git a/src/docs/metrics/supply-distribution/combined-balance-of-holders/index.md b/src/docs/metrics/supply-distribution/combined-balance-of-holders/index.md deleted file mode 100644 index 97a141b66..000000000 --- a/src/docs/metrics/supply-distribution/combined-balance-of-holders/index.md +++ /dev/null @@ -1,212 +0,0 @@ ---- -title: Combined Balance of Holders Metrics -author: Santiment Team -date: 2024-04-01 ---- - -## Definition - -The Combined Balance of Holders metric provides a comprehensive overview of the total tokens held by all -addresses within a specified balance interval. By summing up the token balances across every individual -address within the designated interval, this metric offers valuable insights into the collective ownership -concentration or dispersion within the cryptocurrency ecosystem. - -Combined Balance of Holders Metrics: -- `holders_distribution_combined_balance_` - Total tokens held by all addresses within a -specified balance [interval](/metrics/details/supply_distribution_parameters#available-intervals) -- `percent_of_holders_distribution_combined_balance_` - The percentage of tokens held by -all addresses within a specified balance [interval](/metrics/details/supply_distribution_parameters#available-intervals) -- `holders_distribution_combined_balance_over_` - Total tokens held by all addresses with balances -exceeding a specified balance [threshold](/metrics/details/supply_distribution_parameters#available-thresholds) - -#### Supply Distribution (by balance of addresses) Bitcoin Chart - - -> Additionally, the above metrics can only be calculated for active holders - holders who have moved coins in the -> past year. To include only active holders add `active_` prefix (for example: `active_holders_distribution_combined_balance_`) - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -* `holders_distribution_combined_balance_` and `holders_distribution_combined_balance_over_` - Amount in token -* `percent_of_holders_distribution_combined_balance_` - Percentage - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these assets]() - -> Note: All of the metrics are available for the same set of assets. - ---- - -## API - -Holders distribution combined balance metrics: `holders_distribution_combined_balance_` - -```graphql-explorer -{ - getMetric(metric: "holders_distribution_combined_balance_1_to_10") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -Percent of holders distribution combined balance metrics: `percent_of_holders_distribution_combined_balance_` - -```graphql-explorer -{ - getMetric(metric: "percent_of_holders_distribution_combined_balance_10k_to_100k") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -Holders distribution combined balance over metrics: `holders_distribution_combined_balance_over_` - -```graphql-explorer -{ - getMetric(metric: "active_holders_distribution_combined_balance_over_1k") { - timeseriesDataJson( - slug: "santiment" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -### Combined balance of holders metrics - -
    -Holders distribution combined balance metrics -- holders_distribution_combined_balance_0_to_0.001 -- holders_distribution_combined_balance_0.001_to_0.01 -- holders_distribution_combined_balance_0.01_to_0.1 -- holders_distribution_combined_balance_0.1_to_1 -- holders_distribution_combined_balance_1_to_10 -- holders_distribution_combined_balance_10_to_100 -- holders_distribution_combined_balance_100_to_1k -- holders_distribution_combined_balance_1k_to_10k -- holders_distribution_combined_balance_10k_to_100k -- holders_distribution_combined_balance_100k_to_1M -- holders_distribution_combined_balance_1M_to_10M -- holders_distribution_combined_balance_10M_to_100M -- holders_distribution_combined_balance_100M_to_1B -- holders_distribution_combined_balance_1B_to_inf -- holders_distribution_combined_balance_total -
    - -
    -Percent of holders distribution combined balance metrics -- percent_of_holders_distribution_combined_balance_0_to_0.001 -- percent_of_holders_distribution_combined_balance_0.001_to_0.01 -- percent_of_holders_distribution_combined_balance_0.01_to_0.1 -- percent_of_holders_distribution_combined_balance_0.1_to_1 -- percent_of_holders_distribution_combined_balance_1_to_10 -- percent_of_holders_distribution_combined_balance_10_to_100 -- percent_of_holders_distribution_combined_balance_100_to_1k -- percent_of_holders_distribution_combined_balance_1k_to_10k -- percent_of_holders_distribution_combined_balance_10k_to_100k -- percent_of_holders_distribution_combined_balance_100k_to_1M -- percent_of_holders_distribution_combined_balance_1M_to_10M -- percent_of_holders_distribution_combined_balance_10M_to_100M -- percent_of_holders_distribution_combined_balance_100M_to_1B -- percent_of_holders_distribution_combined_balance_1B_to_inf -
    - -
    -Holders distribution combined balance over metrics -- holders_distribution_combined_balance_over_1 -- holders_distribution_combined_balance_over_10 -- holders_distribution_combined_balance_over_100 -- holders_distribution_combined_balance_over_1k -- holders_distribution_combined_balance_over_10k -- holders_distribution_combined_balance_over_100k -- holders_distribution_combined_balance_over_1M -
    - -### Combined balance of active holders metrics - -
    -Active holders distribution combined balance metrics -- active_holders_distribution_combined_balance_0_to_0.001 -- active_holders_distribution_combined_balance_0.001_to_0.01 -- active_holders_distribution_combined_balance_0.01_to_0.1 -- active_holders_distribution_combined_balance_0.1_to_1 -- active_holders_distribution_combined_balance_1_to_10 -- active_holders_distribution_combined_balance_10_to_100 -- active_holders_distribution_combined_balance_100_to_1k -- active_holders_distribution_combined_balance_1k_to_10k -- active_holders_distribution_combined_balance_10k_to_100k -- active_holders_distribution_combined_balance_100k_to_1M -- active_holders_distribution_combined_balance_1M_to_10M -- active_holders_distribution_combined_balance_10M_to_inf -- active_holders_distribution_combined_balance_total -
    - -
    -Percent of active holders distribution combined balance metrics -- percent_of_active_holders_distribution_combined_balance_0_to_0.001 -- percent_of_active_holders_distribution_combined_balance_0.001_to_0.01 -- percent_of_active_holders_distribution_combined_balance_0.01_to_0.1 -- percent_of_active_holders_distribution_combined_balance_0.1_to_1 -- percent_of_active_holders_distribution_combined_balance_1_to_10 -- percent_of_active_holders_distribution_combined_balance_10_to_100 -- percent_of_active_holders_distribution_combined_balance_100_to_1k -- percent_of_active_holders_distribution_combined_balance_1k_to_10k -- percent_of_active_holders_distribution_combined_balance_10k_to_100k -- percent_of_active_holders_distribution_combined_balance_100k_to_1M -- percent_of_active_holders_distribution_combined_balance_1M_to_10M -- percent_of_active_holders_distribution_combined_balance_10M_to_inf -
    - -
    -Active holders distribution combined balance over metrics -- active_holders_distribution_combined_balance_over_1 -- active_holders_distribution_combined_balance_over_10 -- active_holders_distribution_combined_balance_over_100 -- active_holders_distribution_combined_balance_over_1k -- active_holders_distribution_combined_balance_over_10k -- active_holders_distribution_combined_balance_over_100k -- active_holders_distribution_combined_balance_over_1M -
    \ No newline at end of file diff --git a/src/docs/metrics/supply-distribution/combined-balance-of-labeled-holders/index.md b/src/docs/metrics/supply-distribution/combined-balance-of-labeled-holders/index.md deleted file mode 100644 index 902b5e6a1..000000000 --- a/src/docs/metrics/supply-distribution/combined-balance-of-labeled-holders/index.md +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Combined Balance of Labeled Holders Metrics -author: Santiment Team -date: 2024-04-01 ---- - -## Definition - -The Combined Balance of Labeled Holders provides a comprehensive overview of the total tokens held by all addresses -with a specific label holding a token across predefined balance intervals. By summing up the token balances of addresses -with designated labels such as exchange, infrastructure, miner, whale, or all, this metric provides insights into -the composition and activities of various participant groups. Whether tracking the influence of exchanges, the -backbone support of infrastructure holders, the mining community, or the presence of large-scale holders (whales), -this metric enables stakeholders to assess the diversity and concentration of ownership. By analyzing these -labeled holders across predefined balance intervals, it becomes possible to discern trends, identify patterns, -and inform strategic decision-making within the cryptocurrency space. - -There are two sets of metrics: holders labeled distribution combined balance and holders labeled negative distribution combined balance -metrics. Holders labeled distribution combined balance metrics encompass all addresses with a specific label, while -holders labeled negative distribution combined balance metrics exclude all addresses with a specific label. - -Combined Balance of Labeled Holders Metrics: -- `holders_labeled_distribution_combined_balance_` - Total tokens held by all addresses with a specific [label](/metrics/details/supply_distribution_parameters#available-labels) -within a specified balance [interval](/metrics/details/supply_distribution_parameters#available-intervals) -- `holders_labeled_negative_distribution_combined_balance_` - Total tokens held by all addresses that do not contain a specific -[negative label](/metrics/details/supply_distribution_parameters#available-negative-labels), within a specified balance [interval](/metrics/details/supply_distribution_parameters#available-intervals) - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Amount in token - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these assets]() - -> Note: All of the metrics are available for the same set of assets. - ---- - -## API - -Holders labeled distribution combined balance metrics: `holders_labeled_distribution_combined_balance_` - -```graphql-explorer -{ - getMetric(metric: "holders_labeled_distribution_combined_balance_1_to_10") { - timeseriesDataJson( - selector: { - slug: "ethereum" - label: "miner" - } - from: "2024-01-01T00:00:00Z" - to: "2024-01-10T00:00:00Z" - interval: "1d" - ) - } -} -``` - -Holders labeled negative distribution combined balance metrics: `holders_labeled_negative_distribution_combined_balance_` - -```graphql-explorer -{ - getMetric(metric: "holders_labeled_negative_distribution_combined_balance_10_to_100") { - timeseriesDataJson( - selector: { - slug: "ethereum" - label: "nonExchange" - } - from: "2024-01-01T00:00:00Z" - to: "2024-01-10T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -
    -Holders labeled distribution combined balance metrics -- holders_labeled_distribution_combined_balance_0_to_0.001 -- holders_labeled_distribution_combined_balance_0.001_to_0.01 -- holders_labeled_distribution_combined_balance_0.01_to_0.1 -- holders_labeled_distribution_combined_balance_0.1_to_1 -- holders_labeled_distribution_combined_balance_1_to_10 -- holders_labeled_distribution_combined_balance_10_to_100 -- holders_labeled_distribution_combined_balance_100_to_1k -- holders_labeled_distribution_combined_balance_1k_to_10k -- holders_labeled_distribution_combined_balance_10k_to_100k -- holders_labeled_distribution_combined_balance_100k_to_1M -- holders_labeled_distribution_combined_balance_1M_to_10M -- holders_labeled_distribution_combined_balance_10M_to_inf -- holders_labeled_distribution_combined_balance_total -
    - -
    -Holders labeled negative distribution combined balance metrics -- holders_labeled_negative_distribution_combined_balance_0_to_0.001 -- holders_labeled_negative_distribution_combined_balance_0.001_to_0.01 -- holders_labeled_negative_distribution_combined_balance_0.01_to_0.1 -- holders_labeled_negative_distribution_combined_balance_0.1_to_1 -- holders_labeled_negative_distribution_combined_balance_1_to_10 -- holders_labeled_negative_distribution_combined_balance_10_to_100 -- holders_labeled_negative_distribution_combined_balance_100_to_1k -- holders_labeled_negative_distribution_combined_balance_1k_to_10k -- holders_labeled_negative_distribution_combined_balance_10k_to_100k -- holders_labeled_negative_distribution_combined_balance_100k_to_1M -- holders_labeled_negative_distribution_combined_balance_1M_to_10M -- holders_labeled_negative_distribution_combined_balance_10M_to_inf -- holders_labeled_negative_distribution_combined_balance_total -
    diff --git a/src/docs/metrics/supply-distribution/index.md b/src/docs/metrics/supply-distribution/index.md deleted file mode 100644 index 20a2d160d..000000000 --- a/src/docs/metrics/supply-distribution/index.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Supply Distribution -author: Santiment Team -date: 2024-04-01 ---- - -## Our Supply Distribution Metrics - - -- [Amount of Holders](/metrics/supply-distribution/amount-of-holders) $-$ The number of unique -addresses holding tokens within predefined balance intervals -- [Combined Balance of Holders](/metrics/supply-distribution/combined-balance-of-holders) $-$ The sum -of tokens held across all addresses within a specified balance interval -- [Amount of Labeled Holders](/metrics/supply-distribution/amount-of-labeled-holders) $-$ The number of unique -addresses with a specific label, holding tokens within predefined balance intervals -- [Combined Balance of Labeled Holders](/metrics/supply-distribution/combined-balance-of-labeled-holders) $-$ The sum -of tokens held across all addresses with a specific label within a specified balance interval - - -## Description - -The supply distribution metric offers a comprehensive view of how the holdings of a particular -token are distributed among its user base across different balance intervals. These -intervals represent predefined ranges of token balances held by individual users. By -examining this metric, observers can identify trends such as whether a significant portion of -the supply is concentrated among a small number of large holders or if the distribution is more -evenly spread across a wider user base. Such insights are valuable for stakeholders, as they -provide crucial information about the level of decentralization within the cryptocurrency network, -potential market liquidity dynamics, and overall ecosystem health. Moreover, understanding supply -distribution aids in assessing the potential impact of large holders on price volatility and market -sentiment, offering valuable insights for investors and analysts. diff --git a/src/docs/metrics/supply-on-or-outside-exchanges/index.md b/src/docs/metrics/supply-on-or-outside-exchanges/index.md deleted file mode 100644 index 2f22c307b..000000000 --- a/src/docs/metrics/supply-on-or-outside-exchanges/index.md +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: Supply On/Outside Exchanges -author: Ivan -date: 2020-04-07 -description: Amount and percent of the total supply of coins/tokens held by exchange and non-exchange wallets ---- - -## Definition - -Supply on or outside exchanges is a measure of the amount of a certain token or cryptocurrency being held on centralized exchanges (CEX) or decentralized exchanges (DEX), and outside exchanges. This metric tracks each part of the token's total supply that is either being circulated or hoarded by the market participants. To do this, we need to monitor and record wallet addresses for each CEX and DEX that holds the token, as well as the rest of the addresses not associated with any exchange. - -This metric showcases the distribution of a specific token or cryptocurrency, indicating its demand as well as the overall market sentiment. It is useful for identifying significant events, like whale accumulation or an increase in the ratio of tokens held on exchanges – which could signal potential sell-offs. - -The following metrics are provided: - -- `Percent of total supply on exchange` - What percent of the coin/token total supply is stored in known centralized exchange (CEX) and decentralized exchange (DEX) wallets -- `Supply on exchanges` - What amount of coins/tokens are stored in known CEX and DEX wallets -- `Supply outside exchange` - What amount of coins/tokens are stored outside known CEX and DEX wallets - -> **Note:** The metrics are computed on the set of publicly known exchange wallets -> and the exchange wallets that Santiment has found by doing analysis. - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -- Percent of total supply on exchanges is measured in `percentage between 0 and 100` -- Supply On/Outside Exchanges is measured in `amount of coins/tokens` - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Change Metrics - -[Change Metrics:](/metrics/details/change_metrics) - -* `percent_of_total_supply_on_exchanges_change_1d` -* `percent_of_total_supply_on_exchanges_change_7d` -* `percent_of_total_supply_on_exchanges_change_30d` - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -- Percent of total supply on exchange is available for [these - assets]() -- Supply on exchanges is available for [these - assets]() - -- Supply outside exchanges is available for [these - assets]() - ---- - -## SanAPI - -Available under the names: - -- `percent_of_total_supply_on_exchanges` -- `supply_on_exchanges` -- `supply_outside_exchanges` - -```graphql-explorer -{ - getMetric(metric: "percent_of_total_supply_on_exchanges") { - timeseriesDataJson( - slug: "santiment" - from: "2019-01-01T00:00:00Z" - to: "2019-09-01T00:00:00Z" - interval: "7d" - ) - } -} -``` - ---- - -```graphql-explorer -{ - getMetric(metric: "supply_on_exchanges") { - timeseriesDataJson( - slug: "santiment" - from: "2019-01-01T00:00:00Z" - to: "2019-09-01T00:00:00Z" - interval: "7d" - ) - } -} -``` - ---- - -```graphql-explorer -{ - getMetric(metric: "supply_outside_exchanges") { - timeseriesDataJson( - slug: "santiment" - from: "2019-01-01T00:00:00Z" - to: "2019-09-01T00:00:00Z" - interval: "7d" - ) - } -} -``` diff --git a/src/docs/metrics/thermocap/index.md b/src/docs/metrics/thermocap/index.md deleted file mode 100644 index b1eca251f..000000000 --- a/src/docs/metrics/thermocap/index.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Thermocap -author: Filip -date: 2025-11-01 -description: Thermocap Metric ---- - -## Description -Thermocap is a metric that tracks the total value of coins paid to miners, offering a -clear view of how much a blockchain network spends on its own security. By multiplying -all historical coinbase rewards by their USD value at the time they were mined, thermocap -reflects the real capital that has flowed into sustaining mining operations. Because -miners are responsible for maintaining and securing the network, this aggregated spend -effectively represents the network’s total security budget. - -Thermocap Metrics: -* `thermocap` - Total historical value of all mining rewards paid to miners -* `mctc` - The ratio comparing a network’s market capitalization to its thermocap - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -* `thermocap` - Amount in USD -* `mctc` - Ratio - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -Available for `bitcoin` - ---- - -### SanAPI - -Available under names: `thermocap` - -```graphql-explorer -{ - getMetric(metric: "thermocap"){ - timeseriesDataJson( - slug: "bitcoin" - from: "2025-11-01T00:00:00Z" - to: "2025-11-10T00:00:00Z" - interval: "1d") - } -} -``` - -Available under name: `mctc` - -```graphql-explorer -{ - getMetric(metric: "mctc"){ - timeseriesDataJson( - slug: "bitcoin" - from: "2025-11-01T00:00:00Z" - to: "2025-11-10T00:00:00Z" - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/top-holders/index.md b/src/docs/metrics/top-holders/index.md deleted file mode 100644 index 1e36d1ecb..000000000 --- a/src/docs/metrics/top-holders/index.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: Top Holders -author: Santiment Team - -headline: "Top Token Holders: Track 100 Addresses With the Highest Balances" -description: "Top token holders metric tracks the accumulated balance of the biggest holders of a certain asset, indicating potential market shifts based on their transactions." ---- - -`Top Holders` describes a set of up to 100 Ethereum addresses which -have the highest balances at a given time, either in Ether or in a -specific ERC-20 token. The amount of addresses can be reduced, but 100 -is the maximum. So one could analyse the 20 top holders for BAT, as well -as the 100 top holders for ETH. - -Top Holders metrics are calculated daily. - -The top holder metrics can be found under `ETH Top Holders` for Ether -(ETH) itself. To find top holder information about a specific ERC-20 -token, look for `Overview. All ERC-20 tokens`, which will lead you to -a list of all ERC-20 tokens Santiment is currently including in its -calculations. Find the needed token and select `Open Dashboard` in the -very last column, which should be named `Top Holders`. - -As all top holder metrics are shown in the same overview, they share a -set of options: - -![](29_top_holders_options.png) - -- ***`Currency`*** - lets you switch the price from being displayed in -USD to BTC -- ***`HoldersCount`*** - sets the amount of top holders to include, -maximum is 100 -- ***`Hide "remains" status in details`*** - refers only to the fourth -metric listed below and hides specific table rows. See its article for -more information -- ***`Balance in USD`*** - display the top holders balances in amount of -tokens or converted to USD - -### Our current metrics for top holders: - -## Top Holders - Balance -This graph shows the sum of all the top holders balances plotted against -the asset`s price. - -![](30_top_holders_balance.png) - -As you can see, we also display the total balance split by exchange- and -non-exchange wallets. - -The amount of top holders addresses included in the calculation can be -chosen at the top by selecting `HoldersCount`. The HoldersCount in the -above screenshot of BAT's top holders balances is set to 50. -The assets's price can be displayed in USD or BTC, which can be -selected through the `Currency` field at the top. The `Balance in -USD` field lets you switch between displaying the balances in amount of -tokens and displaying them converted to USD. - -## Top Holders - Percent of Total Supply -This graph shows the relative amount of tokens held by all the top -holders compared to the total amount of tokens in existence, as well as -the asset`s price. - -![](31_top_holders_percentof.png) - -As you can see, we also display the top holder`s share of the total -supply split by exchange- and non-exchange wallets. - -The amount of top holders addresses included in the calculation can be -chosen at the top by selecting `HoldersCount`. The HoldersCount in the -above screenshot of BAT\`s top holders percentage of total supply is set -to 50. -The assets\`s price can be displayed in USD or BTC, which can be -selected through the `Currency` field at the top. - -## Top Holders - Changes - -This graph shows the total number of new addresses entering the top -holders list. - -![](32_top_holders_changes.png) - -The amount of top holders addresses included in the calculation can be -chosen at the top by selecting `HoldersCount`. The HoldersCount in the -above screenshot of BAT`s changes to the top holders list is set to 50. -So at the day shown in the screenshot, three out of 50 addresses where -not in the 50 top holders list the day before. - -The assets\`s price can be displayed in USD or BTC, which can be -selected through the `Currency` field at the top. - -## Top Holders - Details - -It shows detailed data for the top holders for the selected period, sorted by -date (the current day compared to the previous day). - -![](33_top_holders_details.png) - -The **status** column specifies whether the address either (was) - -1. `added` -2. `removed` -3. `remained` unchanged - -from that particular spot in the top holders list on the given day. -Select `Hide "remains" status in details` to toggle on showing the -`remains` status, which will make it easier to see the full list of top -holders accounts for a particular day. - -Along with the rank among the top holders, the table shows **balance** -(the balance of that particular account, in amount of tokens or USD) and -**% of total** (the share of the total token supply this specific top -holders address holds) - both for the day listed and the previous one. - -In case you are having trouble finding specific data points in this -potentially very long list, please consider reducing the time frame - -either by using the options in the upper right corner of the screen or -by selecting a time frame straight in the graph by clicking and dragging -your mouse. The Details list will only show data from the selected time -frame. - -Clicking any top holders address will lead you to its details on -. diff --git a/src/docs/metrics/top-transfers/index.md b/src/docs/metrics/top-transfers/index.md deleted file mode 100644 index 9659d5991..000000000 --- a/src/docs/metrics/top-transfers/index.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Top Transfers -author: Yury -date: 2022-04-21 -description: Get top transfers for a chain address ---- - -## Definition - -Get top transfers for a chain address -[Example of usage **Top transfers** on Sanbase](https://app.santiment.net/labs/balance?address=0x876eabf441b2ee5b5b0554fd502a8e0600950cfa&assets[]=shiba-inu&from=2021-10-20T19%3A00%3A00.000Z&isLog=false&priceMetrics[]=shiba-inu&to=2022-04-21T18%3A59%3A59.999Z) - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## API - -Available under the `topTransfers` name: - -```graphql -query topTransfers($addressSelector: AddressSelector, $from: DateTime!, $to: DateTime!, $slug: String!, $page: Int, $pageSize: Int = 20) { - transactions: topTransfers( - addressSelector: $addressSelector - page: $page - pageSize: $pageSize - from: $from - to: $to - slug: $slug - ) { - datetime - fromAddress { - address - labels { - name - origin - } - } - toAddress { - address - labels { - name - origin - } - } - trxValue - trxHash - } -} -``` - -Query variables: -```json -{ - "addressSelector": { - "address": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", - "transactionType": "ALL" - }, - "from": "2022-01-17T21:00:00.000Z", - "infrastructure": "ETH", - "page": 1, - "pageSize": 20, - "slug": "ethereum", - "to": "2022-04-18T20:59:59.999Z" -} -``` - -[**Run in explorer**](https://api.santiment.net/graphiql?query=query%20topTransfers(%24addressSelector%3A%20AddressSelector%2C%20%24from%3A%20DateTime!%2C%20%24to%3A%20DateTime!%2C%20%24slug%3A%20String!%2C%20%24page%3A%20Int%2C%20%24pageSize%3A%20Int%20%3D%2020)%20%7B%0A%20%20transactions%3A%20topTransfers(%0A%20%20%20%20addressSelector%3A%20%24addressSelector%0A%20%20%20%20page%3A%20%24page%0A%20%20%20%20pageSize%3A%20%24pageSize%0A%20%20%20%20from%3A%20%24from%0A%20%20%20%20to%3A%20%24to%0A%20%20%20%20slug%3A%20%24slug%0A%20%20)%20%7B%0A%20%20%20%20datetime%0A%20%20%20%20fromAddress%20%7B%0A%20%20%20%20%20%20address%0A%20%20%20%20%20%20labels%20%7B%0A%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20origin%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20toAddress%20%7B%0A%20%20%20%20%20%20address%0A%20%20%20%20%20%20labels%20%7B%0A%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20origin%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20trxValue%0A%20%20%20%20trxHash%0A%20%20%7D%0A%7D%0A&variables=%20%7B%0A%09%09%22addressSelector%22%3A%20%7B%0A%09%09%09%22address%22%3A%20%220xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d%22%2C%0A%09%09%09%22transactionType%22%3A%20%22ALL%22%0A%09%09%7D%2C%0A%09%09%22from%22%3A%20%222022-01-17T21%3A00%3A00.000Z%22%2C%0A%09%09%22infrastructure%22%3A%20%22ETH%22%2C%0A%09%09%22page%22%3A%201%2C%0A%09%09%22pageSize%22%3A%2020%2C%0A%09%09%22slug%22%3A%20%22ethereum%22%2C%0A%09%09%22to%22%3A%20%222022-04-18T20%3A59%3A59.999Z%22%0A%09%7D) diff --git a/src/docs/metrics/total-supply/index.md b/src/docs/metrics/total-supply/index.md deleted file mode 100644 index 5a5518df3..000000000 --- a/src/docs/metrics/total-supply/index.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Total Supply -author: Ante -date: 2023-12-07 -description: Total Supply Metrics ---- - -## Definition -Total Supply is the total amount of coins or tokens belonging to a particular cryptocurrency -that have been created or mined, and are currently in circulation, including those that may -be locked or reserved. - -Supply in Profit metric is computed by summing all token amounts that were last transferred when -the price of token was less then the current price. - -Percent of Supply in Profit represents the ratio between Supply in Profit and -[Circulation Supply](/metrics/circulation). This metric measures weather the market is in -depression or euphoria stage. If token is breaking all time highs every holder is in profit, -so the metric value is 100%. On the other side, in the bear markets there are usually more then -half of tokens are in loss, so the metric value drops below 50%. - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -- `total_supply` and `total_supply_in_profit` - Token/Coin amount -- `percent_of_total_supply_in_profit` - Percentage - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for for [these assets]() - -> Note: All metrics are available for the same set of assets. - ---- - -## SanAPI - -Total Supply is available under the `total_supply` name. - -```graphql-explorer -{ - getMetric(metric: "total_supply") { - timeseriesDataJson( - selector: { - slug: "ethereum" - } - from: "2023-11-01T00:00:00Z" - to: "2023-12-01T00:00:00Z" - interval: "1d" - ) - } -} -``` - -Supply in Profit is available under the `total_supply_in_profit` name. - -```graphql-explorer -{ - getMetric(metric: "total_supply_in_profit") { - timeseriesDataJson( - selector: { - slug: "ethereum" - } - from: "2023-11-01T00:00:00Z" - to: "2023-12-01T00:00:00Z" - interval: "1d" - ) - } -} -``` - -Percent of Supply in Profit is available for `percent_of_total_supply_in_profit` name. - -```graphql-explorer -{ - getMetric(metric: "percent_of_total_supply_in_profit") { - timeseriesDataJson( - selector: { - slug: "ethereum" - } - from: "2023-11-01T00:00:00Z" - to: "2023-12-01T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -The full list of Total Supply metrics is: - -
    - -Open Metrics List - -- percent_of_whale_stablecoin_total_supply - -
    \ No newline at end of file diff --git a/src/docs/metrics/trading-volume/index.md b/src/docs/metrics/trading-volume/index.md deleted file mode 100644 index d8f55a341..000000000 --- a/src/docs/metrics/trading-volume/index.md +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Trading Volume in USD -author: Ivan -date: 2020-04-07 -description: Trading Volume in USD ---- - -## Definition - -The Trading Volume is the volume in USD traded on exchanges. -The metric is taking into consideration all the trading pairs. The trading pairs that -are not pegged to USD are multiplied by the USD price of the asset. - -Trading Volume in USD metrics: -- `volume_usd` - 24-hour sliding window trading volume across centralized and decentralized exchanges. -All transactions are converted to USD. The data is sourced from a 3rd party provider. -- `volume_usd_5m` - The same as `volume_usd`, but the data points are aligned at 5 minute intervals and -any gaps are filled with the last known value - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Amount in dollars/usdt/bitcoins - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[Price Latency](/metrics/details/latency#price-latency) - ---- - -## Available Assets - -Available assets for [volume_usd](https://api.santiment.net/graphiql?query=%7B%0A++getMetric%28metric%3A+%22volume_usd%22%29%7B%0A++++metadata%7B%0A++++++availableSlugs%0A++++%7D%0A++%7D%0A%7D) - ---- - -## SanAPI - -### Volume USD - -Available under `volume_usd` and `volume_usd_5m` names - -```graphql-explorer -{ - getMetric(metric: "volume_usd") { - timeseriesDataJson( - slug: "ethereum" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -## Full list of metrics - -The full list of GitHub Activity metrics is: - -
    - -Open Metrics List - -- volume_usd -- volume_usd_5m -- volume_usd_change_1d -- volume_usd_change_30d -- volume_usd_change_7d - -
    \ No newline at end of file diff --git a/src/docs/metrics/transacted-coin-acquisition-cost/index.md b/src/docs/metrics/transacted-coin-acquisition-cost/index.md deleted file mode 100644 index 967be1683..000000000 --- a/src/docs/metrics/transacted-coin-acquisition-cost/index.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: Transacted Coin Acquisition Cost -author: Ivan -date: 2021-11-19 -description: Track from what price range are coming the coins/tokens moved on a given day ---- - -## Definition - -For the coins/tokens transacted on a given day, get the price they were acquired -at. Any movement of coins/tokens on-chain is treated as an acquisition. The -metric does not include: - -- Minting/mining/uncle rewards. -- Transactions of coins/tokens that were acquired on the same day. This would - handle most situation with deposit/withdrawal addresses. - - Example: There are two transactions on the same day: `A - 10ETH -> B` and `B - -> 10ETH C` - `B` moves the coins on the same day that they were received. - This second transaction is not counted. - -The total number of coins/tokens that are counted is equal to the [1-day -circulation](/metrics/circulation) (**not** the [transaction -volume](/metrics/transaction-volume)) **minus** the block rewards/uncle -rewards/mints. - -The metric returns a list of prices ranges and a number of coins/tokens that -were last time moved when the price was in that range. The ranges have even -length with the exception of the range that contains the queried day price. This -range is split around that price, resulting in two ranges. This has the benefit -of knowing exactly how many coins/tokens were last time moved when the price was -above or below the queried day price. - -### Example - -Let's take a look at what prices were aquired the bitcoins transacted on 09 November 2021 when bitcoin reached an all time high of over $68,000: - -- `[$low - $high]` - `number of bitcoins` -- `[$0 - $16,886.13]` - ` 9,497.95 ` -- `[$16,886.13 - $33,772.26]` - `1290.67` -- `[$33,772.26 - $50,658.39]` - `14,159.67` -- `[$50,658.39 - $59,987.51]` - `2711.52` -- `[$59,987.51 - ∞]` - `178,339.76` - -It is clear that when the price is at its all time high all of the sellers are profiting but some are profiting much more than others. The majority of the bitcoins were last time moved when the price was in the range $59.9k-$57.5k. But there are 9,497.95 bitcoins that moved last when the price was under $16.9k. - -### Example - -Let's take a look at what prices were aquired the bitcoins transacted on 20 July 2021 when bitcoin reached a local minimum of around $29,000, after reaching to over $64,000 just 3 months before that: -- `[$low - $high]` - `number of bitcoins` -- `[$0 - $15880.41]` - `13586.16` -- `[$15880.41 - $29842.86]` - `694.53` -- `[$29842.86 - $31760.82]` - `52818.93` -- `[$31760.82 - $47641.23]` - `41785.33` -- `[$47641.23 - $63521.64]` - `4693.35` -- `[$63521.64 - ∞]` - `146.27` - -Looking at this data we concule that majority of the bitcoins, around 99.9k or around 87% of all bitcoins transacted, were last moved when the price was higher. This would mean that most of transactions on that day resulted in a loss. - -## Access - -[Restricted Access](/metrics/details/access#restricted-access) - ---- - -## Measuring Unit - -Number coins/tokens per price range - ---- - -## Data Type - -[Histogram Data](/metrics/details/data-type#histogram-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these assets]() - ---- - -## SanAPI - -Available under `price_histogram` and `spent_coins_cost` metric names. Both metrics return exactly the same data. - -```graphql -{ - getMetric(metric: "spent_coins_cost") { - histogramData( - slug: "santiment" - from: "2020-04-07T00:00:00Z" - to: "2020-04-08T00:00:00Z" - interval: "1d" - limit: 10 - ) { - values { - ... on FloatRangeFloatValueList { - data { - range - value - } - } - } - } - } -} -``` - -**[Run in Explorer]()** diff --git a/src/docs/metrics/transaction-count/index.md b/src/docs/metrics/transaction-count/index.md deleted file mode 100644 index 934b059c4..000000000 --- a/src/docs/metrics/transaction-count/index.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Transaction count -author: Boris -date: 2023-03-13 -description: Amount of transactions on-chain. ---- - -## Description - -The Transaction Count metric indicates the number of unique transactions occurring on the network -within a specific day. - -As an alternative to the transaction count metric, there's the Payments Count metric, which reflects -the number of individual payments made on the network within a specific day. - -The difference between Transaction Count and Payments Count lies in the scenario where a single -transaction includes multiple transfers. In such cases, the Transaction Count registers this as a single -transaction, while the Payments Count registers each individual transfer within that transaction. - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Amount of transactions - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Interval](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22transactions_count%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) - -> Note: All metrics are available for the same set of assets - ---- - -### SanAPI - -Available under the `transactions_count` name. - -```graphql-explorer -{ - getMetric(metric: "transactions_count") { - timeseriesDataJson( - slug: "santiment" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` - -Available under the `payments_count` name. - -```graphql-explorer -{ - getMetric(metric: "payments_count") { - timeseriesDataJson( - slug: "santiment" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/transaction-size/index.md b/src/docs/metrics/transaction-size/index.md deleted file mode 100644 index 34708f52c..000000000 --- a/src/docs/metrics/transaction-size/index.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Transaction Size -author: Filip -date: 2024-04-01 -description: Transaction Size Metrics ---- - -## Description - -The Transaction Size Metric calculates the average size and the median size of transactions over a specific -time period. If the average transfer size is increasing, it could suggest that whales are beginning -to move their tokens, either buying or selling. - -Transaction Size Metrics: -- `average_transfer_5m`: Average transaction size over five-minute intervals -- `median_transfer_5m`: Median transaction size over five-minute intervals - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Token/Coin amount - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these assets]() - -> Note: All metrics are available for the same set of assets - ---- - -### SanAPI - -Available under names: `average_transfer_5m` and `median_transfer_5m` - - -```graphql-explorer -{ - getMetric(metric: "average_transfer_5m"){ - timeseriesDataJson( - slug: "ethereum" - from: "2024-03-01T00:00:00Z" - to: "2024-03-03T00:00:00Z" - interval: "5m") - } -} -``` diff --git a/src/docs/metrics/transaction-volume-in-profit-or-loss/index.md b/src/docs/metrics/transaction-volume-in-profit-or-loss/index.md deleted file mode 100644 index 22d053cd5..000000000 --- a/src/docs/metrics/transaction-volume-in-profit-or-loss/index.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Transaction Volume In Profit Or Loss -author: Santiment Team -date: 2022-03-30 -description: Amount of coin/tokens moved on-chain that are in profit or in loss and the ratio between them. ---- - -## Description - -Those metrics show the aggregate amount of coins/tokens across all transactions on -the network that moved in profit or loss for a given asset in an interval. -There is also a metric which shows the ratio between transaction volume in profit -and transaction volume in loss. - - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Amount of coins/tokens - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -## SanAPI - -Available under the `transaction_volume_in_profit` name. - -```graphql-explorer -{ - getMetric(metric: "transaction_volume_in_profit") { - timeseriesDataJson( - slug: "bitcoin" - from: "2025-03-01T00:00:00Z" - to: "2025-03-30T00:00:00Z" - interval: "1d" - ) - } -} -``` - -Available under the `transaction_volume_in_loss` name. - -```graphql-explorer -{ - getMetric(metric: "transaction_volume_in_loss") { - timeseriesDataJson( - slug: "bitcoin" - from: "2025-03-01T00:00:00Z" - to: "2025-03-30T00:00:00Z" - interval: "1d" - ) - } -} -``` - -Available under the `transaction_volume_profit_loss_ratio` name. - -```graphql-explorer -{ - getMetric(metric: "transaction_volume_profit_loss_ratio") { - timeseriesDataJson( - slug: "bitcoin" - from: "2025-03-01T00:00:00Z" - to: "2025-03-30T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/transaction-volume/index.md b/src/docs/metrics/transaction-volume/index.md deleted file mode 100644 index d8fc1ad3f..000000000 --- a/src/docs/metrics/transaction-volume/index.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Transaction Volume -author: Santiment Team -date: 2020-04-14 -description: Amount of coin/tokens moved on-chain. ---- - -## Description - -The `transaction_volume` metric shows total on-chain amount of coins/tokens transacted for a given asset in a given time interval. - -The `transaction_volume_usd` metric shows the total on-chain amount of coins/tokens in USD transacted for a given asset in a given time interval. -To compute it, the amount of coins/tokens in each transaction is multiplied by the price in USD of the asset at that moment. - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Amount of coins/tokens - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -## Frequency - -- transaction_volume - [Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) -- transaction_volume_usd - [Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -## SanAPI - -Available under the `transaction_volume` name. - -```graphql-explorer -{ - getMetric(metric: "transaction_volume") { - timeseriesDataJson( - slug: "bitcoin" - from: "2025-04-01T00:00:00Z" - to: "2025-04-07T00:00:00Z" - interval: "1h" - ) - } -} -``` - -## Full list of metrics - -The full list of Transaction Volume metrics is: - -
    - -Open Metrics List - -- transaction_volume -- transaction_volume_usd -- transaction_volume_change_1d -- transaction_volume_change_30d -- transaction_volume_change_7d -- transaction_volume_usd_change_1d -- transaction_volume_usd_change_30d -- transaction_volume_usd_change_7d - -
    diff --git a/src/docs/metrics/trending-words-rank/index.md b/src/docs/metrics/trending-words-rank/index.md deleted file mode 100644 index 8c6e41f88..000000000 --- a/src/docs/metrics/trending-words-rank/index.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Trending Words Rank -author: Filip -date: 2022-06-01 -description: Rank of asset in top trending words ---- -## Definition - -Trending Words Rank is build on top of the [Social Data](/metrics/details/social-data). - -Trending Words Rank for an asset represents position of that asset based on top -trending words score. -Data for asset and some time interval only appears if asset for that time -interval is in top trending words. - -Please note that metrics may undergo changes in historical values due to automated recalculations triggered monthly. We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. - - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Ordinal number - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - - ---- - -## Latency - -[Social Data Latency](/metrics/details/latency#social-data-latency) - ---- - -## Available Assets - -Available for [these -assets]() - - ---- - -## SanAPI - -Available under the `trending_words_rank` name. - -```graphql-explorer -{ - getMetric(metric: "trending_words_rank") { - timeseriesDataJson( - slug: "santiment" - from: "2022-05-01T00:00:00Z" - to: "2022-05-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/unique-social-volume/index.md b/src/docs/metrics/unique-social-volume/index.md deleted file mode 100644 index 8f76a3d56..000000000 --- a/src/docs/metrics/unique-social-volume/index.md +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: Unique Social Volume -author: Ivan -date: 2025-07-10 -description: The amount of messages/documents containing a given search term without spam -# REF metrics-hub/metricshub/unique_social_volume.py ---- - -## Definition - -Unique Social Volume is build on top of the [Social Data](/metrics/details/social-data). - -The **Unique Social Volume** is the same type of aggregation on top of the -social data as the **Social Volume**, but it takes into account only the unique -text documents for each interval, i.e. completely duplicated messages will be -excluded from the calculations, which results in a slightly lower and to some -degree cleaner way to measure the volume of mentions for a given asset or word. - -There are two separate metrics for the unique social volume: - -- unique_social_volume_total_5m -- unique_social_volume_total_1h -- unique_social_volume_total_1d - -The `5m`, `1h` and `1d` control what range of data is used. If some spam messages are -posted in the span of 30 minutes, then every one of the six 5-minute buckets would have -one copy of that message. In the case of `1h` all these messages would be reduced -to a single one, thus providing more aggresive spam filtering. - -When comparing `unique_social_volume_total_1h` and -`unique_social_volume_total_5m` aggregated at `1h` intervals, the -`unique_social_volume_total_1h` will always have less or equal values. - -We constantly update our labels which helps us to keep labels as fresh as possible but result historical data changes. Any modifications to labels, social sources, or relevant jobs will prompt recalculation for the previous month's data. Within a 12 hour period, metric can be supplemented with new data. - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Amount of distinct documents that mention the given text pattern. - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) -[One-Hour Intervals](/metrics/details/frequency#hourly-frequency) - ---- - -## Latency - -[Social Data Latency](/metrics/details/latency#social-data-latency) - ---- - -## Available Assets - -Available for [these assets]() - -> Note: All the unique social volume metrics are available for the same set of assets. - ---- - -## SanAPI - -Available under the: -- unique_social_volume_total_5m -- unique_social_volume_total_1h -- unique_social_volume_total_1d -- unique_social_volume_telegram_5m -- unique_social_volume_telegram_1h -- unique_social_volume_telegram_1d -- unique_social_volume_reddit_5m -- unique_social_volume_reddit_1h -- unique_social_volume_reddit_1d -- unique_social_volume_twitter_5m -- unique_social_volume_twitter_1h -- unique_social_volume_twitter_1d -- unique_social_volume_bitcointalk_5m -- unique_social_volume_bitcointalk_1h -- unique_social_volume_bitcointalk_1d -- unique_social_volume_4chan_5m -- unique_social_volume_4chan_1h -- unique_social_volume_4chan_1d -- unique_social_volume_farcaster_5m -- unique_social_volume_farcaster_1h -- unique_social_volume_farcaster_1d - - -### Unique Social Volume computed on 5 minute intervals - -```graphql-explorer -{ - getMetric(metric: "unique_social_volume_total_5m") { - timeseriesDataJson( - selector: { slug: "santiment" } - from: "2017-11-01T00:00:00Z" - to: "2020-12-31T00:00:00Z" - interval: "1w" - ) - } -} -``` - ---- - -### Unique Social Volume computed on 1 hour intervals - -```graphql-explorer -{ - getMetric(metric: "unique_social_volume_total_1h") { - timeseriesDataJson( - selector: { slug: "santiment" } - from: "2017-11-01T00:00:00Z" - to: "2020-12-31T00:00:00Z" - interval: "1w" - ) - } -} -``` diff --git a/src/docs/metrics/velocity/index.md b/src/docs/metrics/velocity/index.md deleted file mode 100644 index 94545daa2..000000000 --- a/src/docs/metrics/velocity/index.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Velocity -author: Santiment Team -date: 2020-04-14 -description: Average number of times a coin/token changes wallets each day ---- - -> For a more in-depth explanation of `Velocity`, please click -> [here](/metrics/velocity/velocity-technical). - ---- - -## Definition - -The metric shows the average number of times that a coin/token changes wallets -each day. - -Simply put, a higher velocity means that a coin/token is used in transactions -more often within a set time frame. - -Velocity can be used to explain various noteworthy events in the life of a -project. For example, here's Ethereum: - -![ethereum-velocity](./ethereum-velocity.png) - -Notice the steep drop off? - -The increased activity (and subsequent dip) correlates squarely to a huge ETH -mixer that operated between March 2017 and March 2018. During that time, coins -were moved a lot between addresses which lead to big velocity spikes. - -Once the mixer was liquidated, token velocity toppled back to 'normal' levels, -where it's remained ever since. - ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -A non-negative number of times coin/token changes wallet - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily Intervals](/metrics/details/frequency#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -## SanAPI - -Available under the `velocity` name. - -```graphql-explorer -{ - getMetric(metric: "velocity") { - timeseriesDataJson( - slug: "santiment" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/velocity/velocity-technical.md b/src/docs/metrics/velocity/velocity-technical.md deleted file mode 100644 index f72a46030..000000000 --- a/src/docs/metrics/velocity/velocity-technical.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Velocity - Technical -author: Valentin -date: 2020-04-08 ---- - -`Velocity` is a metric which estimates the average frequency at which the -tokens change hands during some period of time. It mimics to a large extent the -[Money Velocity](https://en.wikipedia.org/wiki/Velocity_of_money) metric. -å In order to understand how we -compute this metric, let's see an example in which Alice, Bob and Charlie -exchange tokens. Let's assume that Alice gives Bob 10 tokens at block 1 and Bob -gives Charlie 10 tokens at block 2. The total transaction volume which is -generated for block 1 and 2 is $10 + 10 = 20$, but we can easily see that the -same 10 tokens have been transacted, so the amount of tokens being in -circulation is actually $10$. We can say that the `Token Velocity` for blocks 1 -and 2 is $20 / 10 = 2$, which means that the transacted tokens have changes -hands twice during these blocks. - -_In order to understand how all this can be tracked, you should read [the -article about the token age -consumed](/metrics/age-consumed/age-consumed-technical)._ - -## Formal definition - -In order to define this metric formally we need to establish some definitions: - -- $vol(a, t)$ - amount of tokens going **out** of address $a$ at block $t$ -- $vol(t) = \sum_{a} vol(a,t)$ - amount of tokens going out of all addresses in - block $t$ -- $blocks(d) = {t_1, t_2, ..., t_n}$ - the set of all blocks produced during day - $d$. For ETH these are usually 5760 blocks - -We also need a metric to measure the amount of tokens that are in circulation -for a given day. To compute this we will use the metric describe here: -https://academy.santiment.net/metrics/details/stack-coin-age-model/. In this -article we have a definition for $token\_circulation(t,1\ hour, token)$, let's -not specify the $token$ as this is something which we assume is fixed. Let's -define the token circulation for a given day, as the circulation in the last -block of the day: - -$$ -last\_block(d) = max_{t_i \in blocks(d)}(t_i) -$$ - -$$ -token\_circulation(d, timespan) = token\_circulation(last\_block(d), timespan) -$$ - -Now we can define the `Token Velocity` at day $d$ as: - -$$ -vel(d) = \frac{\sum_{t \in blocks(d)} vol(t)}{token\_circulation(d, 1\ day)} -$$ - -Which is the total token volume divided by the amount of tokens in circulation -during that day. A similar approach can be taken if we want to compute the -metric on a weekly or monthly basis. diff --git a/src/docs/metrics/whale-transaction-count/index.md b/src/docs/metrics/whale-transaction-count/index.md deleted file mode 100644 index 5194c92ff..000000000 --- a/src/docs/metrics/whale-transaction-count/index.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Whale Transaction Count -author: Santiment Team -date: 2022-07-27 -description: Amount of coin/tokens moved on-chain by whales. ---- - -## Description - -This metric shows the number of transactions whose value in USD is above a given threhsold. -There are two metrics available: -- `whale_transaction_count_100k_usd_to_inf` - The count of all transactions whose USD value is above $100,000 -- `whale_transaction_count_1m_usd_to_inf` - The count of all transactions whose USD value is above $1,000,000 ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -Count of transactions - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Change Metrics - -[Change Metrics](/metrics/details/change_metrics) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -## SanAPI - -The metrics are available under the following names: -- `whale_transaction_count_100k_usd_to_inf` -- `whale_transaction_count_1m_usd_to_inf` - -In addition, there following change metrics are available: -- `whale_transaction_count_100k_usd_to_inf_change_1d` -- `whale_transaction_count_100k_usd_to_inf_change_7d` -- `whale_transaction_count_100k_usd_to_inf_change_30d` -- `whale_transaction_count_1m_usd_to_inf_change_1d` -- `whale_transaction_count_1m_usd_to_inf_change_7d` -- `whale_transaction_count_1m_usd_to_inf_change_30d` - -```graphql-explorer -{ - getMetric(metric: "whale_transaction_count_100k_usd_to_inf") { - timeseriesDataJson( - slug: "santiment" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d" - ) - } -} -``` diff --git a/src/docs/metrics/whale-transaction-volume/index.md b/src/docs/metrics/whale-transaction-volume/index.md deleted file mode 100644 index b9e622c12..000000000 --- a/src/docs/metrics/whale-transaction-volume/index.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Whale Transaction Volume -author: Santiment Team -date: 2024-12-06 -description: USD Volume of coin/tokens moved on-chain by whales. ---- - -## Description - -This metric shows the total volume of transactions whose value in USD is above a given threhsold. -There are two metrics available: -- `whale_transaction_volume_100k_usd_to_inf` - The volume of all transactions whose USD value is above $100,000 -- `whale_transaction_volume_1m_usd_to_inf` - The volume of all transactions whose USD value is above $1,000,000 ---- - -## Access - -[Restricted Access](/metrics/details/access#restricted-access). - ---- - -## Measuring Unit - -USD - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [these -assets]() - ---- - -## SanAPI - -The metrics are available under the following names: -- `whale_transaction_volume_100k_usd_to_inf` -- `whale_transaction_volume_1m_usd_to_inf` - -```graphql-explorer -{ - getMetric(metric: "whale_transaction_volume_100k_usd_to_inf") { - timeseriesDataJson( - slug: "bitcoin" - from: "2020-04-01T00:00:00Z" - to: "2020-04-07T00:00:00Z" - interval: "1d") - } -} -``` diff --git a/src/docs/metrics/xrpl-metrics/assets-issued/index.md b/src/docs/metrics/xrpl-metrics/assets-issued/index.md deleted file mode 100644 index fbdcbe096..000000000 --- a/src/docs/metrics/xrpl-metrics/assets-issued/index.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Assets Issued Metrics -author: Boris -date: 2023-03-13 -description: Descriptions about the assets issued metrics ---- - -## Description - -We track the issued assets under two metrics: - -- **Total assets issued** - total number of issued assets through time -- **Number of new assets issued** - tracks only the new assets issued per day - -We would count an asset as part of this metric only if the issuer has more than 100 active trustlines at the time the asset is issued. - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Amount of assets - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily frequency](/metrics/details/frequency/#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for: -- `total_assets_issued` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22total_assets_issued%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) -- `daily_assets_issued` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22daily_assets_issued%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) - ---- - -### SanAPI - -Available under the `total_assets_issued` name. - -```graphql-explorer -{ - getMetric(metric: "total_assets_issued") { - timeseriesDataJson( - slug: "xrp" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - ) - } -} -``` - -Available under the `daily_assets_issued` name. - -```graphql-explorer -{ - getMetric(metric: "daily_assets_issued") { - timeseriesDataJson( - slug: "xrp" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - ) - } -} -``` diff --git a/src/docs/metrics/xrpl-metrics/dex-volume/index.md b/src/docs/metrics/xrpl-metrics/dex-volume/index.md deleted file mode 100644 index c5d0b25b6..000000000 --- a/src/docs/metrics/xrpl-metrics/dex-volume/index.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: DEX volume -author: Boris -date: 2023-03-13 -description: XRPL DEX trading volume ---- - -## Description - -DEX volume tracks the exchange volume at the XRPL Decentralized Exchange. The volume includes all trades where at least one of the assets in the pair have recently traded against XRP. - -`dex_volume_in_usd_5m` measures CLOB volume in USD equivalent. - -`dex_volume_in_xrp_5m` measures CLOB volume in XRP coins. - -`dex_amm_volume_in_xrp_5min` measures AMM volume in XRP coins. - -`dex_amm_volume_in_usd_5min` measures AMM volume in USD coins. - -All four metrics are available only for the `xrp` asset. - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -XRP tokens and USD - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for [xrp only](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22dex_volume_in_usd_5m%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) - ---- - -### SanAPI - -Available under the `dex_volume_in_usd_5m`, `dex_volume_in_xrp_5m`, `dex_amm_volume_in_xrp_5min` and `dex_amm_volume_in_usd_5min` names. - -```graphql-explorer -{ - getMetric(metric: "dex_volume_in_usd_5m") { - timeseriesDataJson( - slug: "xrp" - from: "2024-07-01T00:00:00Z" - to: "2024-07-07T00:00:00Z" - ) - } -} -``` diff --git a/src/docs/metrics/xrpl-metrics/index.md b/src/docs/metrics/xrpl-metrics/index.md deleted file mode 100644 index edacf162a..000000000 --- a/src/docs/metrics/xrpl-metrics/index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: XRPL Chain metrics -headline: "XRP Analysis & Metrics: The Only XRPL Blockchain Data Provider" -description: "Discover XRP analysis and metrics from Santiemnt, the only XRPL blockchain data provider who partnered with the Ripple team. Gain in-depth insights into XRP performance." -author: Boris -date: 2023-03-13 ---- - -## XRPL Metrics - -The [XRP Ledger (XRPL)](https://xrpl.org/) is a decentralized, public blockchain led by a global developer community. - -Santiment provides key metrics about the XRPL Chain which are listed below: - -### Holder Metrics - -- [Number of accounts](/metrics/xrpl-metrics/number-of-accounts) -- [Number of new accounts created](/metrics/network-growth/) - -### Activity Metrics - -- [DEX Volume](/metrics/xrpl-metrics/dex-volume) -- [Number of transactions](/metrics/transaction-count) -- [Number of assets issued](/metrics/xrpl-metrics/assets-issued) -- [Number of active trustlines](/metrics/xrpl-metrics/trustline-count) -- [Liquidity in XRPL AMM Pools](/metrics/xrpl-metrics/liquidity-amm-pools) diff --git a/src/docs/metrics/xrpl-metrics/liquidity-amm-pools/index.md b/src/docs/metrics/xrpl-metrics/liquidity-amm-pools/index.md deleted file mode 100644 index 14be4607a..000000000 --- a/src/docs/metrics/xrpl-metrics/liquidity-amm-pools/index.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Liquidity in XRPL AMM Pools -author: Ante -date: 2024-08-01 -description: XRPL AMM liquidity metrics ---- - -## Description - -We track two metrics related to AMM liquidity: - -- **Liquidity in XRPL AMM Pool by Pair** - the total amount of liquidity for specific asset in pool. -- **Liquidity in XRPL AMM Pool by Asset** - the total amount of tokens in all AMM pools for specific asset. - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Amount of tokens. - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily frequency](/metrics/details/frequency/#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for: -- `liquidity_in_amm_pools_by_pair` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22liquidity_in_amm_pools_by_pair%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) -- `liquidity_in_amm_pools_by_asset` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22liquidity_in_amm_pools_by_asset%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) - ---- - -### SanAPI - -Available under `liquidity_in_amm_pools_by_pair` name. - -```graphql-explorer -{ - getMetric(metric: "liquidity_in_amm_pools_by_pair") { - timeseriesDataJson( - selector: { - slug: "xrp" - owner: "XRP" - label: "XRP-rXmagwMmnFtVet3uL26Q2iwk287SRvVMJ/MAG" - } - from: "2024-07-01T00:00:00Z" - to: "2024-07-07T00:00:00Z" - ) - } -} -``` - -Available under the `liquidity_in_amm_pools_by_asset` name. - -```graphql-explorer -{ - getMetric(metric: "liquidity_in_amm_pools_by_asset") { - timeseriesDataJson( - selector: { - slug: "xrp" - owner: "XRP" - } - from: "2024-07-01T00:00:00Z" - to: "2024-07-07T00:00:00Z" - ) - } -} -``` diff --git a/src/docs/metrics/xrpl-metrics/number-of-accounts/index.md b/src/docs/metrics/xrpl-metrics/number-of-accounts/index.md deleted file mode 100644 index 6dd863cd4..000000000 --- a/src/docs/metrics/xrpl-metrics/number-of-accounts/index.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: Number of accounts -author: Boris -date: 2023-03-13 -description: Metrics related to accounts ---- - -## Description - -- **Total number of accounts** - Counts all addresses which hold XRP token across time. It is computed by summing all holder distribution metrics. Holder distribution metrics are computed on top of balances table. -- **Number of active accounts** - Tracks the number of addresses which have either sent or received XRP token in a previous 30, 60 or 90 days. It is computed on top of balances table. -- **Number of accounts with minimum reserves** - computed by summing all holder distribution metrics except the following groups: - - 0-0.001 - - 0.001-0.01 - - 0.01-0.1 - - 0.1-1 - - 1-10 - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Amount of accounts - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -- **Total number of accounts** - [Daily frequency](/metrics/details/frequency/#daily-frequency) -- **Number of active accounts** - [Five-Minute Intervals](/metrics/details/frequency#five-minute-frequency) -- **Number of accounts with minimum reserves** - [Daily frequency](/metrics/details/frequency/#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for: -- `holders_distribution_total` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric:%20%22holders_distribution_total%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) -- `active_addresses_30d` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric:%20%22active_addresses_30d%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) -- `active_addresses_60d` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22active_addresses_60d%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) -- `active_addresses_90d` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22active_addresses_90d%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) - ---- - -### SanAPI - -Available under the `holders_distribution_total` name. - -```graphql-explorer -{ - getMetric(metric: "holders_distribution_total") { - timeseriesDataJson( - slug: "xrp" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - ) - } -} -``` - -Available under the `active_addresses_30d` name. - -```graphql-explorer -{ - getMetric(metric: "active_addresses_30d") { - timeseriesDataJson( - slug: "xrp" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - ) - } -} -``` - -Available under the `active_addresses_60d` name. - -```graphql-explorer -{ - getMetric(metric: "active_addresses_60d") { - timeseriesDataJson( - slug: "xrp" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - ) - } -} -``` - -Available under the `active_addresses_90d` name. - -```graphql-explorer -{ - getMetric(metric: "active_addresses_90d") { - timeseriesDataJson( - slug: "xrp" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - ) - } -} -``` \ No newline at end of file diff --git a/src/docs/metrics/xrpl-metrics/trustline-count/index.md b/src/docs/metrics/xrpl-metrics/trustline-count/index.md deleted file mode 100644 index e4661a24f..000000000 --- a/src/docs/metrics/xrpl-metrics/trustline-count/index.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Trustline Count Metrics -author: Boris -date: 2023-03-13 -description: Descriptions about the trustline count metrics ---- - -## Description - -We track two metrics related to trustline count: - -- **Total number of trustlines** - the total amount of active trustline through time. -- **Net trustlines created** - change in number of active trustlines on a daily basis. - ---- - -## Access - -[Free Access](/metrics/details/access#free-access) - ---- - -## Measuring Unit - -Amount of trustlines - ---- - -## Data Type - -[Timeseries Data](/metrics/details/data-type#timeseries-data) - ---- - -## Frequency - -[Daily frequency](/metrics/details/frequency/#daily-frequency) - ---- - -## Latency - -[On-Chain Latency](/metrics/details/latency#on-chain-latency) - ---- - -## Available Assets - -Available for: -- `total_trustlines_count` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22total_trustlines_count%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) -- `daily_trustlines_count_change` - [these assets](https://api.santiment.net/graphiql?variables=&query=%7B%0A%20%20getMetric(metric%3A%20%22daily_trustlines_count_change%22)%20%7B%0A%20%20%20%20metadata%20%7B%0A%20%20%20%20%20%20availableSlugs%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A) - ---- - -### SanAPI - -Available under the `total_trustlines_count` name. - -```graphql-explorer -{ - getMetric(metric: "total_trustlines_count") { - timeseriesDataJson( - slug: "xrp" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - ) - } -} -``` - -Available under the `daily_trustlines_count_change` name. - -```graphql-explorer -{ - getMetric(metric: "daily_trustlines_count_change") { - timeseriesDataJson( - slug: "xrp" - from: "2020-01-01T00:00:00Z" - to: "2020-01-07T00:00:00Z" - ) - } -} -``` diff --git a/src/docs/navigation.js b/src/docs/navigation.js deleted file mode 100644 index 1c4225193..000000000 --- a/src/docs/navigation.js +++ /dev/null @@ -1,464 +0,0 @@ -import React from 'react' -import Metrics from '../images/docs/Metrics' -import Changelog from '../images/docs/Changelog' -import Education from '../images/docs/Education' -import ProductsAndPlans from '../images/docs/Products' -import SANtokens from '../images/docs/San' -import SanAPI from '../images/docs/Sanapi' -import Sansheets from '../images/docs/Sansheets' -import Sanqueries from '../images/docs/Sanqueries' -import Sanbase from '../images/docs/Sanbase' -import Glossary from '../images/docs/Glossary' -import Signals from '../images/docs/Signals' -import Labels from '../images/docs/Labels' -import Youtube from '../images/docs/Youtube' - -export const GUIDES = [ - { - title: 'Education and Use cases', - description: ( - <> - Examples and use cases -
    - for Santiment metrics - - ), - icon: Education, - articles: [ - { - slug: 'age consumed alert', - title: 'Alerts - Age Consumed', - }, - { - slug: 'social trend alerts', - title: 'Alerts - Social Trends/Trending Words', - }, - { - slug: 'whale activity alert', - title: 'Alerts - Whale Activity', - }, - { - slug: 'timing market volatility with token age consumed', - title: 'Timing Market Volatility with Token Age Consumed', - }, - { - slug: 'analyze speculative activity with exchange metrics', - title: 'Analyze Speculative Activity with Exchange Metrics', - }, - { - slug: 'spot tops with price network activity divergences', - title: 'Spot Tops with Price - Network Activity divergences', - }, - { - slug: 'price to daily addresses divergence guide', - title: 'Price vs DAA Divergence; An On-Chain Trading Strategy Guide', - }, - { - slug: 'santiment pro report samples', - title: 'Santiment PRO Report Samples', - }, - { - slug: 'trading and transaction volume', - title: 'Trading and Transaction Volume', - }, - { - slug: 'understanding daily active addresses', - title: 'Understanding Daily Active Addresses', - }, - { - slug: 'understanding circulation', - title: 'Understanding Circulation', - }, - { - slug: 'understanding long-term market trends and cycles', - title: 'Understanding Long-term Market Trends and Cycles', - }, - { - slug: 'understanding short-term market trends', - title: 'Understanding Short-term Market Trends', - }, - { - slug: 'understanding crypto market cycles through lending metrics', - title: 'Understanding Crypto Market Cycles Through Lending Metrics', - }, - { - slug: - 'understanding market expectations through historical crypto trends', - title: - 'Understanding Market Expectations Through Historical Crypto Trends', - }, - { - slug: 'whale monitoring to predict market moves', - title: 'Whale Monitoring to Predict Market Moves', - }, - { - slug: 'case study liquidations and sentiment ratio', - title: - 'Case Study 1: DeFi liquidations and Sentiment Ratio for Dip Buying', - }, - { - slug: 'case study nrpl mvrv', - title: 'Case Study 2: NRPL and 3y MVRV to Spot Macro Cycle Bottoms', - }, - { - slug: 'case study social volume', - title: 'Case Study 3: Social Volume Indicates a Top', - }, - { - slug: 'case study retail profit taking', - title: 'Case Study 4: Using Retail Balances for Profit-Taking Analysis', - }, - { - slug: 'sanr a playground for trading', - title: 'SanR: a Playground for Trading', - }, - ], - }, - { - title: 'Sanbase', - icon: Sanbase, - description: ( - <> - Our crypto analytics -
    & behavior platform - - ), - articles: [ - 'Account settings', - 'Alerts page', - { slug: 'Assets page', title: 'Assets Overview page' }, - 'Insights', - 'Keyboard Shortcuts', - 'Logging into Sanbase', - { - slug: 'Requesting display new project', - title: 'Request to Display New Project', - }, - 'Social Trends', - ], - }, - { - title: 'Santiment Queries', - icon: Sanqueries, - description: ( - <> - Our database explorer -
    & research tool - - ), - articles: [ - 'Introduction', - 'Exploration', - 'Writing SQL Queries', - 'API Access', - 'Rate Limits and Credits Cost', - 'Prices Tables', - 'Metric Tables', - { slug: 'bridges', title: 'Bridge Transactions' }, - 'Lending Pools', - 'DEX Pools', - 'NFT Tables', - 'XRPL Tables', - ], - }, - { - title: 'SanAPI', - icon: SanAPI, - description: ( - <> - Our API, available metrics -
    & documentation - - ), - articles: [ - 'Accessing the API', - 'Fetching Metrics', - 'Common Queries', - 'Rate Limits', - 'Historical and Realtime data restrictions', - 'Complexity', - 'Supported Blockchains', - ], - }, - { - title: 'Sansheets', - icon: Sansheets, - description: ( - <> - Our Spreadsheets plugin -
    - for Santiment data - - ), - articles: ['Setting Up', 'Adding an API key', - { - slug: 'assets-correlation-matrix-google-sheets', - title: 'Correlation Matrix', - }, - { - slug: 'asset-activity-matrix', - title: 'Asset Activity Matrix', - }, - 'Functions', 'PRO Templates'], - }, - { - title: 'Products and Plans', - icon: ProductsAndPlans, - description: ( - <> - On the Santiment suite -
    - and available plans - - ), - articles: [ - 'Access Plans', - { - slug: 'sanbase-plans', - title: 'Plans - Sanbase', - }, - { - slug: 'sanapi-plans', - title: 'Plans - SanAPI', - }, - 'Sanbase subscription via SanR NFT', - 'Santiment Products', - 'How to pay with crypto', - 'Create an API key', - 'Sanbase PRO features', - ], - }, - { - title: 'SAN Tokens', - icon: SANtokens, - description: ( - <> - Use cases, roadmap -
    - and where to buy - - ), - articles: [ - 'How to buy SAN tokens', - 'Connect a wallet to the Sanbase account', - 'SAN tokens holding benefits', - ], - }, - { - title: 'Glossary', - icon: Glossary, - description: ( - <> - Introduction to all relevant -
    - terms and concepts - - ), - articles: ['Asset', 'Deposit Addresses'], - }, - { - title: 'Youtube Videos', - description: ( - <> - Santiment webinars, video -
    - tutorials and more - - ), - icon: Youtube, - articles: ['Webinars', 'Walkthroughs', 'Tutorials'], - }, -] - -export const REFERENCES = [ - { - title: 'Metrics', - description: `Introduction to Santiment's on-chain, social and development indicators`, - icon: Metrics, - articles: [ - 'Active Addresses 24h', - 'Active Deposits', - 'Active Withdrawals', - 'Age Consumed', - 'Amount in Top Holders', - 'Annual Inflation Rate', - 'BTC and S and P 500 Price Divergence', - 'Binance Derivatives', - 'BitMEX Derivatives', - 'Bitcoin ETF Volume', - 'Bitfinex Derivatives', - 'Circulation', - 'Community Messages Count', - 'CrvUSD Savings', - 'Daily Active Addresses', - 'Daily Aggregated Financial Metrics', - 'Decentralized Exchange Metrics', - 'Deprecated Metrics', - { slug: 'finalized', title: 'Finalized Metrics' }, - 'Deribit Derivatives', - 'Development Activity', - 'Difficulty', - 'Dormant Circulation', - 'dYdX Derivatives', - 'ETF Flow', - 'ETH 2', - 'Emerging Trends', - 'Ethena Protocol', - 'Ethereum Fees', - 'Ethereum Spent', - 'Exchange Funds Flow', - 'FTX Derivatives', - 'Fully Diluted Valuation', - 'Funding Rates Aggregated', - 'GHO Savings', - 'Gini Index', - 'Huobi Derivatives', - 'Labeled Balance', - 'Labeled Exchange', - 'Labelled Historical Balance', - 'Lending and Borrowing Protocols', - 'M2 Money Supply', - 'MVRV', - 'MakerDAO DAI Savings Rate', - 'Marketcap', - 'Mean Coin Age', - 'Mean Realized Price', - 'NFT Collection Holders Balance', - 'NFT Collection Price', - 'NFT Market Volume', - 'NFT Network Profit Loss', - 'NFT Social Volume', - 'NFT Trade Volume USD', - 'NFT Trades Count', - 'NVT', - 'Network Growth', - 'Network Profit Loss', - 'New Deployed Contracts', - 'Open Interest', - 'Pendle Markets', - 'Price DAA Divergence', - 'Price Volatility', - 'Price', - 'RSI', - 'Rank', - 'Realized Market Capitalization Hodl Waves', - 'Realized Value', - 'Sentiment Metrics', - 'Sky Savings', - 'Social Dominance', - 'Social Volume AI', - 'Social Volume', - 'Spent Coins Age Band', - 'Stock To Flow', - 'Supply Distribution', - 'Supply On Or Outside Exchanges', - 'Thermocap', - 'Top Holders', - 'Top Social Gainers Losers', - 'Total Supply', - 'Trading Volume', - 'Transacted Coin Acquisition Cost', - 'Transaction Count', - 'Transaction Size', - 'Transaction Volume In Profit Or Loss', - 'Transaction Volume', - 'Trending Words Rank', - 'Unique Social Volume', - 'Velocity', - 'Whale Transaction Count', - 'Whale Transaction Volume', - 'XRPL Metrics', - // 'Top Transfers', - ], - }, - { - title: 'Changelog', - description: - 'Development updates, new features and other platform-wide improvements', - icon: Changelog, - articles: ['Assets', 'Metrics', 'Legacy Changelog'], - }, - { - title: 'Labels', - description: 'List and descriptions of all address labels on Santiment', - icon: Labels, - articles: [ - 'Airdrop Receiver', - 'Airdrop Sender', - 'Bridge', - 'CeFi', - 'Centralized exchange', - 'Charity', - 'Closed', - 'Cold wallet', - 'Contract', - 'Dead address', - 'Decentralized exchange', - 'Derivatives', - 'Deposit', - 'DEX user', - 'ERC721', - 'ERC1155', - 'ETH2 Staking', - 'ETH2 Staking Address', - 'Factory', - 'Fund', - 'Gambling', - 'GameFi', - 'Genesis', - 'Lending', - 'Lending User', - 'Liquidity', - 'Migration Address', - 'Miner', - 'NFT', - 'NFT collection', - 'NFT collection name', - 'NFT collection symbol', - 'NFT Influencer', - 'NFT marketplace', - 'NFT trader', - 'NFT trader threshold', - 'NFT user', - 'Owner', - 'Proxy', - 'Used NFT marketplace', - 'Whale', - 'Whale USD Balance', - 'Yield Farming', - 'Withdrawal', - ], - }, - { - title: 'Data Anomaly', - description: 'Directory of key stakeholder data anomalies available on Santiment', - icon: Signals, - articles: [ - 'Large Exchange Transactions 1M', - 'Binance Funding Rate', - 'BTC Correlation', - 'Dex Exchanges 1M USD', - 'ETH Whale Dump', - 'Hyperliquid Average Funding Rates', - 'Large Transfers', - 'Large USDC-USDT Mint', - 'Liquidations', - 'MVRV Danger (Overvaluation) Zone', - 'MVRV Opportunity (Undervaluation) Zone', - 'Network Activity - Price Divergence', - 'Project in Trends', - 'Social Dominance Spike', - 'Social-Dev Score', - 'USDC Borrow', - { - slug: 'deprecated', - title: 'Deprecated Data Anomalies', - }, - ], - }, -] - -export const GETTING_STARTED = { - title: 'Getting started', - articles: ['Santiment Introduction', 'For Traders', 'For Developers'], -} diff --git a/src/docs/people.js b/src/docs/people.js deleted file mode 100644 index a66a3c4e9..000000000 --- a/src/docs/people.js +++ /dev/null @@ -1,160 +0,0 @@ -// `link` for your profile on sanbase (will be use for following) -import Dino from '../images/people/Dino.png' -import Irina from '../images/people/Irina.png' -import Anatoliy from '../images/people/Anatoliy.png' -import Ivan from '../images/people/Ivan.png' -import IvanK from '../images/people/IvanK.png' -import Jan from '../images/people/Jan.png' -import Yordan from '../images/people/Yordan.png' -import Tzanko from '../images/people/Tzanko.png' -import Max from '../images/people/Max.png' -import Tsetso from '../images/people/Tsetso.png' -import Vassil from '../images/people/Vassil.png' -import Ante from '../images/people/Ante.png' -import Lyudmil from '../images/people/Lyudmil.png' -import Brian from '../images/people/Brian.png' -import Yura from '../images/people/Yura.png' -import Valentin from '../images/people/Valentin.png' -import Serge from '../images/people/Serge.png' -import MaksimR from '../images/people/MaksimR.png' -import Alex from '../images/people/Alex.png' -import Vlad from '../images/people/Vlad.png' -import Katsiaryna from '../images/people/Katsiaryna.png' -import Ilya from '../images/people/Ilya.png' -import Larry from '../images/people/Larry.png' -// import Alan from "../images/people/Alan.png" -// import Anastasiya from "../images/people/Anastasiya.png" -// import Jia from "../images/people/Jia.png" -// import Dima from "../images/people/Dima.png" -// import Garry from "../images/people/Garry.png" -// import Kelvin from "../images/people/Kelvin.png" -// import Kim from "../images/people/Kim.png" -// import Maksim from "../images/people/Maksim.png" -// import Mayumi from "../images/people/Mayumi.png" -// import Nastya from "../images/people/Nastya.png" -// import Nikolay from "../images/people/Nikolay.png" -// import Rinat from "../images/people/Rinat.png" -// import Serena from "../images/people/Serena.png" -// import Yura from "../images/people/Yura.png" - -export const PEOPLE = { - 'santiment team': { - description: 'Several authors', - link: '', - }, - 'tzanko matev': { - description: 'Developer/Mathematician', - imageUrl: Tzanko, - link: '', - }, - ivan: { - description: 'Developer', - imageUrl: Ivan, - link: '', - }, - valentin: { - description: '', - imageUrl: Valentin, - link: '', - }, - tsetso: { - description: 'Developer', - imageUrl: Tsetso, - link: '', - }, - lyudmil: { - description: 'Developer', - imageUrl: Lyudmil, - link: '', - }, - vassil: { - description: 'Developer', - imageUrl: Vassil, - link: '', - }, - ante: { - description: 'Big Data Engineer', - imageUrl: Ante, - link: '', - }, - alex: { - description: 'Data Scientist', - imageUrl: Alex, - link: '', - }, - 'ivan klimuk': { - description: 'Data scientist', - imageUrl: IvanK, - link: '', - }, - 'irina pranovich': { - description: 'Data scientist', - imageUrl: Irina, - link: '', - }, - vlad: { - description: 'Data Scientist', - imageUrl: Vlad, - link: '', - }, - katsiaryna: { - description: 'Data Scientist', - imageUrl: Katsiaryna, - link: '', - }, - anatoliy: { - description: 'Big Data Engineer', - imageUrl: Anatoliy, - link: '', - }, - 'max bartel': { - description: 'Tech support', - imageUrl: Max, - link: '', - }, - 'jordan pavlov': { - description: 'Full-stack developer', - imageUrl: Yordan, - link: '', - }, - 'dino ibisbegovic': { - description: 'Content & SEO', - imageUrl: Dino, - link: '', - }, - 'jan s': { - description: 'Data Scientist', - imageUrl: Jan, - link: '', - }, - 'brian quinlivan': { - description: 'Director of Marketing', - imageUrl: Brian, - link: '', - }, - 'yura zatsepin': { - description: 'Product Dev Lead', - imageUrl: Yura, - link: '', - }, - 'serge nedashkovsky': { - description: 'Data Scientist', - imageUrl: Serge, - link: '', - }, - 'maksim razhev': { - description: 'Big Data Engineer', - imageUrl: MaksimR, - link: '', - }, - ilya: { - description: 'Data Scientist', - imageUrl: Ilya, - link: '', - }, - larry: { - description: 'Data Anomaly Lead', - imageUrl: Larry, - link: '', - }, -} diff --git a/src/docs/products-and-plans/create-an-api-key/index.md b/src/docs/products-and-plans/create-an-api-key/index.md deleted file mode 100644 index 19bce2405..000000000 --- a/src/docs/products-and-plans/create-an-api-key/index.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: How to Create an API Key -author: Santiment Team ---- - -All of our current products use the [Sanbase](https://app.santiment.net) -account as reference. You cannot use Sanbase as a login -option for the API or for Sansheets. This is -where an API key comes in. - -When you create a Sanbase account, you have the ability to generate an API key that carries the same access rights for use with our other products. The access rights assigned to this key depend on your subscription plan. - -## Creating an API Key - -To create an API key, visit the account settings of [Sanbase](https://app.santiment.net/account), [SanAPI](https://api.santiment.net/account), or [Sansheets](https://sheets.santiment.net/account). - -In the account settings, click on the **`Generate`** button to create a new key. - -![generate apikey button](generate-apikey-button.png) - -The key will be displayed as a string. You can copy it and use it wherever needed. - -![revoke apikey button](revoke-apikey-button.png) - -You can revoke the key at any time from the same location. - -## Using an API Key - -The [Authentication Section](/sanapi#authentication) demonstrates how to include an API key in your requests. - diff --git a/src/docs/products-and-plans/how-to-pay-with-crypto/index.md b/src/docs/products-and-plans/how-to-pay-with-crypto/index.md deleted file mode 100644 index 48871e24d..000000000 --- a/src/docs/products-and-plans/how-to-pay-with-crypto/index.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: How to Pay with Crypto -author: Santiment Team -date: 2025-10-16 -description: Instructions on how to pay with crypto ---- - -> **Note:** Payment in crypto is only available for yearly subscriptions, not for monthly ones. - -## Pay With ETH or DAI - -To drive cryptocurrency mass adoption, we let users pay with various cryptocurrencies for quick, easy access to our services. - -*[Make use of your SAN tokens for a hefty discount](/products-and-plans/how-to-pay-with-crypto/#burning-san-tokens-to-make-payments).* - -To make a payment with crypto, you can choose to use `ETH`, `DAI`, `USDC`, or `USDT` for any of our products and services. If you would like to pay with an unlisted token, please contact us at [support@santiment.net](mailto:support@santiment.net). - -Send either form of crypto to this address: - -`pay.santiment.eth` -or -`0x1F3dF0b8390BB8e9e322972C5e75583E87608Ec2` - -![](PaySan.jpg) - -After making the payment please contact our team at [support@santiment.net](mailto:support@santiment.net) so we can activate your account. - -> **Note:** We accept `ETH`, `DAI`, `USDC`, or `USDT` for any of our products and services. - -## Burning SAN Tokens for Subscription Payments - -SAN token holders can burn their tokens to pay for subscriptions, instead of using regular payments. - -What is token burning? It's the process of sending tokens to an invalid address, permanently removing them from circulation. - -Benefits: - -- 2x Value: If you Burn SAN we credit you at 2x the current market rate. -- Supply reduction: Every burn decreases the total SAN supply, increasing proportional ownership for all holders. - -Please be aware of the following restrictions: - -> - Paying via SAN burn is limited to Sanbase subscriptions and is not available for SanAPI subscriptions. -> - SAN burn is not available for residents of the Swiss Confederation due to tax regulations. -> - SAN burn can only be applied to yearly base subscription prices. No other discounts are applicable when using SAN burn. - -If you are ready to burn SAN for a yearly Sanbase Pro subscription, please contact us at [support@santiment.net](mailto:support@santiment.net) and we will gladly guide you through the process. - -## Providing SAN Uniswap Liquidity - -Another way to gain Pro access to Sanbase is by providing liquidity for the SAN/ETH trading pair on Uniswap V2! As long as you provide 3000+ SAN to our Uniswap V2 pool (and the corresponding amount of ETH), you will receive FREE access to Sanbase Pro, including all our metrics, new templates, and daily market insights! - -You can add liquidity to the SAN|ETH pool here: [https://app.uniswap.org/#/add/v2/ETH/0x7C5A0CE9267ED19B22F8cae653F198e3E8daf098](https://app.uniswap.org/#/add/v2/ETH/0x7C5A0CE9267ED19B22F8cae653F198e3E8daf098). - -As soon as you hold the LP tokens in your wallet and connect it to your account or log in with it, you will automatically receive a Pro subscription within one hour. 💗 - -- [How to sign up/sign in with Metamask](/sanbase/logging-into-sanbase/#first-login-using-metamask) -- [How to connect your wallet to an existing account](/san-tokens/how-to-stake-san/#connecting-a-wallet-to-an-already-existing-account) - -*Please make sure to do your own due diligence regarding the Uniswap protocol and the risks involved in providing liquidity. Santiment has no control over the Uniswap protocol and cannot be held accountable for any potential losses of any kind.* diff --git a/src/docs/products-and-plans/index.md b/src/docs/products-and-plans/index.md deleted file mode 100644 index 5f18d3139..000000000 --- a/src/docs/products-and-plans/index.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Santiment products and plans -author: Santiment Team -date: 2025-10-25 ---- - -- [Plans - Sanbase](/products-and-plans/sanbase-plans) -- [Plans - SanAPI](/products-and-plans/sanapi-plans) -- [Sanbase subscription via SanR NFT](/products-and-plans/sanbase-subscription-via-sanr-nft) -- [Santiment products](/products-and-plans/santiment-products/) -- [How to pay with crypto](/products-and-plans/how-to-pay-with-crypto/) -- [Create an API key](/products-and-plans/create-an-api-key/) -- [Sanbase PRO features](/products-and-plans/sanbase-pro-features/) diff --git a/src/docs/products-and-plans/sanapi-plans/index.md b/src/docs/products-and-plans/sanapi-plans/index.md deleted file mode 100644 index 77beb5a29..000000000 --- a/src/docs/products-and-plans/sanapi-plans/index.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Santiment API Plans -author: David Utro -date: 2025-09-22 ---- - -## Overview - -Santiment API Plans provide access to various metrics through the API endpoint: https://api.santiment.net. -Check the [pricing page](https://app.santiment.net/pricing) for the latest plans and pricing. - -## Plans for Individuals - -| Feature | **Free Plan** | **Sanbase Pro Plan** | **Sanbase Max Plan** | -| --- | --- | --- | --- | -| **API Access** | | | | -| Free Metrics | Full access | Full access | Full access | -| Restricted Metrics | Partial access:
    • 1 years of historical data
    • 30 days lag | Partial access:
    • 1 years of historical data
    • 30 days lag | Partial access:
    • 1 years of historical data
    • No realtime restriction | -| **Rate Limits** | | | | -| Monthly Limit | 1,000 API calls | 5,000 API calls | 80,000 API calls | -| Hourly Limit | 500 API calls | 1,000 API calls | 4,000 API calls | -| Per Minute Limit | 100 API calls | 100 API calls | 100 API calls | -| **Sanbase Access** | | | | -| Free Metrics | Full access | Full access | Full access | -| Restricted Metrics | Partial access:
    • 1 years of historical data
    • 30 days lag | Partial access:
    • 1 years of historical data
    • 30 days lag | Partial access:
    • 1 years of historical data
    • Realtime data | -| Alerts Limit | 3 alerts allowed | 20 alerts allowed | 20 alerts allowed | -| Insights Access | Limited access | Full access | Full access | - -## Plans for Business - -| Feature | **Business Pro Plan** | **Business Max Plan** | **Enterprise Plan** | -| --- | --- | --- | --- | -| **API Access** | | | | -| Free Metrics | Full access | Full access | Full access | -| Restricted Metrics | Partial access:
    • 2 years of historical data
    • No realtime restriction | Full access | Full access | -| **Rate Limits** | | | | -| Monthly Limit | 600,000 API calls | 1,200,000 API calls | custom | -| Hourly Limit | 30,000 API calls | 60,000 API calls | custom | -| Per Minute Limit | 600 API calls | 1,200 API calls | custom | -| **Sanbase Access** | Full access to [Sanbase](https://app.santiment.net) | Full access to [Sanbase](https://app.santiment.net) | Full access to [Sanbase](https://app.santiment.net) | diff --git a/src/docs/products-and-plans/sanbase-plans/index.md b/src/docs/products-and-plans/sanbase-plans/index.md deleted file mode 100644 index 796be7161..000000000 --- a/src/docs/products-and-plans/sanbase-plans/index.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Sanbase Plans -author: David Utro -date: 2025-10-28 ---- - -## Overview - -Sanbase Plans provide access to various metrics through the [Sanbase website](https://app.santiment.net). - -## Free Plan - -### Sanbase - -- Full access to free metrics -- Partial access to restricted metrics on the Sanbase website: - - 2 years of historical data - - Last 30 days of data are cut-off -- Allowed number of alerts: 3 -- Limited access to insights - -### API - -- Full access to free metrics -- Partial access to restricted metrics via Graphql API: - - 1 year of historical data - - Last 30 days of data are cut-off -- Rate limits: - - 1000 API calls per month - - 500 API calls per hour - - 100 API calls per minute -- Detailed metrics access restrictions can be found [here](https://api.santiment.net/graphiql?query=%7B%0A%20%20getAccessRestrictions(plan%3A%20FREE%2C%20product%3A%20SANBASE)%20%7B%0A%20%20%20%20name%0A%20%20%20%20type%0A%20%20%20%20isAccessible%0A%20%20%20%20isRestricted%0A%20%20%20%20restrictedFrom%0A%20%20%20%20restrictedTo%0A%20%20%7D%0A%7D%0A) - -## Pro Plan - -The Pro Plan includes everything in the Free Plan, plus: - -### Sanbase - -- Full access to all metrics on the Sanbase website -- Allowed number of alerts: 20 -- Full access to PRO insights -- Full access to [Google Sheets plugin](https://sheets.santiment.net) - -### API - -- Partial access to restricted metrics via Graphql API: - - 1 year of historical data - - The last 30 days of data are cut-off -- Rate limits: - - 5000 API calls per month - - 1000 API calls per hour - - 100 API calls per minute -- Detailed metrics access restrictions can be found [here](https://api.santiment.net/graphiql?query=%7B%0A%20%20getAccessRestrictions(plan%3A%20PRO%2C%20product%3A%20SANBASE)%20%7B%0A%20%20%20%20name%0A%20%20%20%20type%0A%20%20%20%20isAccessible%0A%20%20%20%20isRestricted%0A%20%20%20%20restrictedFrom%0A%20%20%20%20restrictedTo%0A%20%20%7D%0A%7D%0A) - -## Max Plan - -The Max Plan includes everything in the Pro Plan, plus: - -### Sanbase - -- Allowed number of alerts: 50 - -### API - -- Partial access to restricted metrics via the Graphql API: - - 2 years of historical data - - No realtime restriction -- Rate limits - - 80K API calls per month - - 4K API calls per hour - - 100 API calls per minute diff --git a/src/docs/products-and-plans/sanbase-pro-features/index.md b/src/docs/products-and-plans/sanbase-pro-features/index.md deleted file mode 100644 index 070f8da02..000000000 --- a/src/docs/products-and-plans/sanbase-pro-features/index.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Sanbase PRO Features -description: A rundown of everything you have access to with Sanbase Pro -author: Santiment Team -date: 2019-12-19 ---- - -Our crypto behavior analysis & monitoring platform is packed with custom tools and features to give you context and remove noise from the crypto markets. - -Here’s a rundown of everything you now have access to with Sanbase Pro: - -## Full Historical and Present-Day Data for All Sanbase Metrics - -Here are a few examples of how to use our metrics: - -- [6 Different Ways](https://insights.santiment.net/read/6-ways-you-could-have-caught-ren%E2%80%99s-summer-tops-643) to use Sanbase to spot forming tops -- [Using Token Age Consumed](https://insights.santiment.net/read/btc-%22coin-days-destroyed%22-spiked.-volatility-is-coming.-672) to predict volatility cycles -- [Identifying Trend Reversals](https://insights.santiment.net/read/chainlink-hits-ath-following-coinbase-listing---perhaps-it's-time-to-chill-541) with a combination of on-chain and social indicators - -## Access to our private #sanbase-pro Discord channel - -With Sanbase Pro, you also get access to our private Discord channel on the Santiment server, known as #sanbase-pro. This exclusive channel is for our paid members, where you can engage in discussions about the current state of the markets and the direction of our data with both our staff and top-tier traders who use our platform! Discussions include: - -- In-depth analysis of Santiment's key leading indicators, and whether they're pointing to buy, hold, or sell opportunities -- Assistance with any aspect of the platform that is causing you trouble -- Improvement suggestions for our staff, and how we can create a better experience for you as a VIP member of Santiment's community - -Enjoy discussing anything and everything beyond just the more generic content found in our #general channel on the Discord server. You'll be amazed by the high-level discussions we have there, and the insights uncovered from our most valued members! - -## Exclusive Market Insights with Sanbase Pro - -Sanbase Pro grants you access to special market reports and daily analysis produced by the Santiment team. Pro Insights include: - -- Actionable market calls based on our in-house signals and indicators -- Daily briefs on the behavior of whales, miners, traders, and other market stakeholders -- Timely analysis of short-term market trends and top coins to watch - -Each Santiment Insight doubles as a crash course on exactly how to use on-chain, social, and development data to clarify the crypto markets and its biggest driving forces. - -Learn it today, apply it tomorrow. - -## Full Access to Sansheets - -Our plugin allows you to import Santiment data directly into Google Spreadsheets. To help you get started, we've provided a few pre-made Sansheets templates: - -- [Determine the most profitable trading days](https://docs.google.com/spreadsheets/d/1RD9AMy2hLWPix0DCupl-LaN5aloFkd_BQDvzJrgU0qI/edit?usp=sharing) for any coin -- [Analyze any coin's risk-adjusted returns](https://docs.google.com/spreadsheets/d/1mHLRlP2H3hFvomO1fVDlxdmpWWZcQcUx-eT6WUDMgqs/edit?usp=sharing) (Sharpe and Sortino ratios) -- [Backtest a 'moving average' strategy](https://docs.google.com/spreadsheets/d/1YEm8qdqJvkHCTUwEmOyQLfkZqtQ0ndwo0GWxGsCRnSQ/edit?usp=sharing) for any coin -- Set up a [dynamic portfolio manager](https://docs.google.com/spreadsheets/d/1itY_q3KvC-KhOpY21wtmeAj5lL4qT8gbMvilgt8avZw/edit?usp=sharing) -- [Track the NVT](https://docs.google.com/spreadsheets/d/1Sb8SjyvJYdRTvxZZtFRfLnLrEssF6Uq2feCmK8VSgF8/view) of any coin - -## Unlimited number of Signals - -and Access to All Future Signals Added to Sanbase (Coming Soon!) - -Here are a few pre-made Signals to get you started: - -- [15% spike in daily addresses transferring ETH](https://app.santiment.net/sonar/signal/789?title=Ethereum%20daily%20active%20addresses%20up%2015%25%20compared%20to%201%20day%28s%29%20earlier) (signaling elevated on-chain activity) -- [5%+ dip in BTC’s price in 24 hours](https://app.santiment.net/sonar/signal/790?title=Bitcoin%20price%20goes%20down%205%25%20compared%20to%201%20day%28s%29%20earlier) (triggered at several bottoms in past 3 months) -- [Chainlink’s (LINK) appearance on our daily Emerging Trends](https://app.santiment.net/sonar/signal/787?title=ChainLink%20in%20trending%20assets%2Fprojects) (indicating a potential top) -- [Price/volume divergence for XMR](https://app.santiment.net/sonar/signal/788?title=Price%2Fvolume%20difference%20between%20an%20Monero%20price%20and%20trading%20volume) (previously triggered at Monero’s 1-year high) - -## Weekly Performance Analytics for All Your Sanbase Watchlists - -To activate them, click on "Weekly Report" in the upper right corner of your Watchlist's page. - -## Special End-of-Month Reports from the Santiment Team - -We cover the most important findings from our data and metrics. - -
    - -If you have any questions, please let us know as soon as possible. [Join our Discord](https://santiment.net/discord) for even faster assistance! - -A message from Maksim Balashevich, our founder: - -> Excited to have you onboard - together we are crossing the sea from a centralized to a decentralized world, from uncertainty to clarity, from too much noise to "I get only what I need when I need it." -> -> This is a pretty long way to get to the final destination. But as is the case with every big journey, it starts with the first step. I’m excited we get to walk it together. - diff --git a/src/docs/products-and-plans/sanbase-subscription-via-sanr-nft/index.md b/src/docs/products-and-plans/sanbase-subscription-via-sanr-nft/index.md deleted file mode 100644 index 6967a6b52..000000000 --- a/src/docs/products-and-plans/sanbase-subscription-via-sanr-nft/index.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Sanbase subscription via SanR NFT -description: How to use SanR points to obtain Santiment's Sanbase PRO subscription -author: Santiment Team -date: 2024-09-04 ---- - -Registered [SanR.app](https://sanr.app/) users can unlock free access to the [Sanbase platform](https://app.santiment.net/) by earning **SanR points**. This access includes all features provided under the [Sanbase Pro plan](https://academy.santiment.net/products-and-plans/sanbase-pro-features), valid for 12 months. Points are earned through active participation and performance in SanR Epochs and Leagues, giving SanR users a chance to enjoy premium analytics without spending money! - -## How it works - -To obtain a SanR NFT, users would need to compete in the Epoch Competitions and earn points by winning the SanR Leagues. Players can compete in the Leagues by providing crypto price signals. Each Epoch includes three distinct Leagues, each ranking players based on different performance criteria. These Leagues renew every two weeks, rewarding the top 10 players in each League at the end of the period. [Video guide on how to navigate SanR.](https://www.youtube.com/watch?v=NvsqZMdhQNg) - -The key to success is simple: post high-quality signals and stay consistent—whether your signals go up or down, consistency is what counts! - -![SanR League Rewards](https://github.com/user-attachments/assets/80e20f57-0126-452a-94ba-b5d42f70016f) - -**Minting the SanR NFT**: When a user has collected 10,000 points, they can exchange their points to mint an NFT via SanR.app, granting them 12-month access to the Sanbase Pro plan. - -![Minting NFT](minting-nft.png) - - -
    -### Important notes: - -- The Sanbase Pro subscription obtained via the SanR NFT is valid for **12 months**. -- Each user is allowed to mint the NFT and claim the free Sanbase subscription **only once**. -- The same MetaMask address used to mint the NFT must also be connected to the **Sanbase** account. -- Users with an existing Sanbase Pro plan **cannot activate** the free plan from the NFT. -- After the free NFT subscription expires, users must [pay](https://app.santiment.net/pricing) to continue accessing Sanbase Pro features. - -
    - -## Step-by-step process to claim your NFT - -![SanR Profile Page](https://github.com/user-attachments/assets/2f26bb0e-5627-4ddc-a048-83047c179d67) - -1. **Head to your SanR profile page** -To mint an NFT, you'll need a connected [MetaMask](https://metamask.io/) wallet. Start by visiting your profile page on [SanR.app](http://sanr.app/) by clicking the profile icon in the top-right corner of the application. -2. **Mint your NFT** -Once you’ve accumulated 10,000 SanR points, head to the **Reward History** section of your profile and exchange the points to mint your Sanbase subscription NFT. -3. **Create Sanbase account** - - If you don’t already have an account, go to the [Sanbase](https://app.santiment.net/) page and create one. If you’re already a user, simply log in. - - ![image](https://github.com/user-attachments/assets/2b7fcb78-9f3d-4b58-9946-b7f39ad44c9f) - -4. **Connect your MetaMask wallet to your Sanbase account in Account Settings** - - In your [Sanbase Account Settings](https://app.santiment.net/account), connect the **same MetaMask address** that was used to mint your NFT. This step is crucial to access the Sanbase Pro features. - - ![subscription.png](nft-subscription.png) - -5. **Click on the “Check NFT access” button** - - Scroll down to the subscription section of your [Account Settings](https://app.santiment.net/account) page and click the **“Check NFT access”** button. If your MetaMask wallet holds the SanR NFT, your Sanbase Pro plan will be activated automatically. - - - If you encounter any issues, feel free to reach out via the [Santiment Discord](https://santiment.net/discord) for support. diff --git a/src/docs/products-and-plans/santiment-products/index.md b/src/docs/products-and-plans/santiment-products/index.md deleted file mode 100644 index 157b7bfe9..000000000 --- a/src/docs/products-and-plans/santiment-products/index.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Current products of Santiment -author: Santiment Team -date: 2025-10-25 ---- - -## Sanbase - -Sanbase is our main product. It offers development, financial, on-chain, and social data for the cryptocurrency market which includes over 1500 crypto assets across an expanding number of blockchains. - - - -## SanAPI - -SanAPI is the GraphQL API that powers Sanbase. We provide a Python library called [Sanpy](https://github.com/santiment/sanpy), which offers Python users easy access to the data. - - - -![](neuro.png) - -## Sansheets - -Sansheets is a Google Sheets plugin that provides access to our data using simple functions directly within your spreadsheet. - - - -![](sheets.png) - -![](sheets2.png) - -## Insights - -Insights is a comprehensive crypto analytics feed and research hub designed to deliver timely, data-driven market intelligence for cryptocurrency investors, traders, and project teams. Expect market reports, behavioral analysis, alerts, signals, and more posted by both the team and our community. - - - -## SanR - -SanR is a decentralized price prediction platform designed to enhance transparency and accountability in price forecasting by leveraging the power of blockchain technology. SanR ensures that every prediction is immutable, verified, and recorded on a blockchain, eliminating the possibility of faked performance which creates real reputation for forecasters. - - diff --git a/src/docs/san-tokens/connect-a-wallet-to-the-sanbase-account/index.md b/src/docs/san-tokens/connect-a-wallet-to-the-sanbase-account/index.md deleted file mode 100644 index cdbd01c26..000000000 --- a/src/docs/san-tokens/connect-a-wallet-to-the-sanbase-account/index.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Connect a Wallet to Your Sanbase Account -author: Santiment Team ---- - - -This article describes how to stake SAN tokens that are already in your possession. Please refer to [this article](/san-tokens/how-to-buy-san-tokens/) to learn how to buy SAN tokens in the first place. - - -There are two ways to connect an Ethereum address to a Sanbase account. You can use MetaMask as a first login (and add an email address later) or add it to an existing account. - -## Logging into Sanbase using MetaMask - -This procedure is described in the article [Logging into Sanbase](/sanbase/logging-into-sanbase/). Please refer to this resource as needed. - -## Connecting a Wallet to an Existing Account - -After logging into Sanbase using your email address, open the account settings. These settings can be found in the upper right corner by hovering over your account icon: - -![noborder](41_account_settings_v4.png) - -In account settings, you will find the following option. Click it: - -![noborder](44_connect_wallet_with_mm_v2.png) - -If your MetaMask plugin is not logged in yet, please do so now as prompted. - -Please note that MetaMask can create a local wallet within the browser, import a wallet in multiple ways, or be connected to a hardware wallet like the Ledger Nano S. Make sure your tokens are safe! - -Please confirm the following steps to let Sanbase connect to MetaMask (and the selected wallet): - -![noborder](45_v2.png) - -You will now be asked to sign a message with your private key. Please note that this is not a transaction, no tokens are sent, and no changes are made to the blockchain. This step simply proves that the connected account is in your control, and hereby belongs to you. - -![noborder](46_connect_wallet_with_mm_sign_v2.png) - -After confirmation, you will see your address and SAN token balance in the account settings. - -Staking currently means that you are holding a certain number of tokens at an ETH address that Sanbase can check each time you visit. This is a lot like maintaining a minimum balance in a bank account. In the future, we plan to implement a more advanced staking mechanism. - -## What's Next? - -Congratulations! You can now enjoy all the benefits provided to users holding SAN Tokens. - - -💎 [SAN Tokens Holding Benefits](/san-tokens/san-tokens-holding-benefits) - -💰 [How to Buy SAN Tokens](/san-tokens/how-to-buy-san-tokens) - diff --git a/src/docs/san-tokens/how-to-buy-san-tokens/index.md b/src/docs/san-tokens/how-to-buy-san-tokens/index.md deleted file mode 100644 index b27ff77d3..000000000 --- a/src/docs/san-tokens/how-to-buy-san-tokens/index.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: How to Buy SAN Tokens -author: Santiment Team -date: 2019-12-18 -description: Instructions on how to acquire SAN tokens ---- - -To use SAN tokens with our platform, you need to have them in a MetaMask wallet or a wallet supported by MetaMask (such as Trezor or Ledger). We will outline the three necessary steps to accomplish this. - -## Step 1: Install and Set Up MetaMask - -For instructions on how to install and set up MetaMask, visit [MetaMask.io](https://metamask.io). You will need an Ethereum address to hold SAN tokens and interact with the Santiment platform. You can create a new wallet in MetaMask, import an existing wallet, or connect MetaMask to a hardware wallet like **Ledger** or **Trezor**. - -__Result of Step 1:__ Installed and working Metamask - -## Step 2: Add Funds to MetaMask Wallet - -To acquire SAN tokens, you will need to swap them for ETH or another ERC20 token. You can obtain ETH from a centralized exchange like [Bitfinex](https://bitfinex.com/t/ETH:USD) and then transfer it to your MetaMask wallet. - -__Result of Step 2:__ Metamask wallet with ETH or ERC-20 token balance - -## Step 3: Swap ETH to SAN Tokens - -You can use decentralized exchanges or decentralized exchange aggregators to swap ETH or another ERC20 token for SAN tokens. These platforms operate in a similar manner. First, connect your Metamask wallet, and then proceed to swap ETH for SAN tokens. - -### Decentralized Exchanges - -#### Uniswap - -The SAN token is also available on [Uniswap](https://app.uniswap.org/#/swap?outputCurrency=0x7C5A0CE9267ED19B22F8cae653F198e3E8daf098&inputCurrency=ETH) at competitive rates. - -![noborder](Uniswap.png) - -#### Kyber - -San tokens are also available on [Kyber](https://kyber.network/) via [Kyber Swap](https://kyberswap.com/swap/ethereum/eth-to-san). If you don’t have any crypto, you may get it on [Kyber](https://kyberswap.com/buy-crypto) using your credit card. - -![noborder](Kyber.png) - -#### Bancor - -The SAN token is available on [Bancor](https://app.bancor.network/trade?from=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&to=0x7C5A0CE9267ED19B22F8cae653F198e3E8daf098). Once you connect your Metamask, you can [purchase ETH on Bancor](https://app.bancor.network/fiat) using your credit card and then swap it for SAN Tokens. - -![noborder](Bancor.png) - -### Decentralized Exchange Aggregators - -You can use a decentralized exchange aggregator like [ParaSwap.io](http://app.paraswap.io/) or [1inch.exchange](https://1inch.exchange/) to acquire SAN tokens. Using an aggregator may sometimes provide a better price than using an exchange directly. - -__Result of Step 3:__ Metamask wallet with SAN token balance - -## What to do next? - -Now, simply [log in with a MetaMask](https://app.santiment.net/login) account that holds SAN tokens. Alternatively, you can [connect your Sanbase account](/san-tokens/connect-a-wallet-to-the-sanbase-account) with your MetaMask wallet in the settings. - -We'll detect the SAN tokens you're holding and grant you access to our discounts, based on the amount of tokens you hold. - - -🔮 [Connect a wallet to the Sanbase account](/san-tokens/connect-a-wallet-to-the-sanbase-account/) - -💎 [SAN tokens holding benefits](/san-tokens/san-tokens-holding-benefits) - diff --git a/src/docs/san-tokens/index.md b/src/docs/san-tokens/index.md deleted file mode 100644 index cb996b81e..000000000 --- a/src/docs/san-tokens/index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: SAN tokens -author: Santiment Team ---- - -[SAN token](https://etherscan.io/token/0x7c5a0ce9267ed19b22f8cae653f198e3e8daf098) is an ERC-20 token issued by Santiment on the Ethereum blockchain. Santiment is a market data and analytic research platform that aims to help crypto beginners and experts by providing in-depth and accessible analyses of the market's condition at any given time. - -## Understanding Santiment business model - -Santiment is at the forefront of a strategic evolution, pivoting from a traditional Web 2.0 subscription model towards a Web 3.0 framework, with a stronger integration of SAN token economy. During the transition, access to a suite of tools, data, and metrics remains versatile. - -As we navigate through this transition, anticipate a gradual shift where the utility of SAN token will become central to the operation and governance of Santiment. Stay informed and be part of the journey towards a token-centric future. - -## [How to Buy SAN Tokens](/san-tokens/how-to-buy-san-tokens/) - -Learn how to acquire SAN tokens with our simple 3-step guide and enjoy the benefits of holding them. You can swap ETH or any ERC-20 tokens for SAN tokens. We are also working on an improved method to purchase SAN tokens directly on our website using a credit card. - -## [Connect a Wallet to Your Sanbase Account](/san-tokens/connect-a-wallet-to-the-sanbase-account/) - -Easily connect your cryptocurrency wallet and SAN token balance to your Sanbase account by following our straightforward and comprehensive instructions. - -## [SAN Token Holding Benefits](/san-tokens/san-tokens-holding-benefits/) - -Discover all the benefits provided to users who hold, stake, and contribute to SAN token liquidity. This includes various levels of discounts, the option to pay by burning SAN tokens, and even FREE access to a Sanbase PRO subscription. - - diff --git a/src/docs/san-tokens/san-tokens-holding-benefits/index.md b/src/docs/san-tokens/san-tokens-holding-benefits/index.md deleted file mode 100644 index b50732fab..000000000 --- a/src/docs/san-tokens/san-tokens-holding-benefits/index.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Benefits of Holding SAN Tokens -author: Santiment Team ---- - -There are several benefits for our SAN token holders: - -- Sanbase Subscription Discount -- Sanbase Payment with SAN Tokens -- Sanbase Subscription in exchange for providing liquidity in the SAN/ETH Liquidity Pool on Uniswap - -## Use SAN Tokens for Discounts - -> :bulb: You can now use SAN tokens for a discount. -:point_right: Holding more than 1,000 SAN tokens provides a 20% discount on all our plans. - -This discount will be automatically applied to your account if you log in with your crypto wallet or connect your wallet to your existing account. - -![noborder](sanpricing_v3.png) - -## Sanbase Payment with SAN Tokens - -You can burn your SAN Tokens to pay for a Sanbase subscription at 50% off the normal price. Once you burn your SAN tokens, we will credit your Sanbase account at a rate of twice the current market value. You can use your credits to pay for any available Sanbase plans. - -__Example:__ If you burn 1000 SANs with an estimated value of $114.50 USD, we will credit your account with $229 USD in credit. - -If you're unfamiliar with what burning entails, it's simply the act of intentionally sending tokens to an invalid address to permanently remove them from the available circulating supply. - -You can pay for your subscription plan partially by using credits from SAN burning, and pay the remainder in USD. - -If you are ready to burn SAN for a yearly Sanbase Pro subscription, please let us know at [support@santiment.net](mailto:support@santiment.net) and we will be happy to walk you through the process. - -## Sanbase Access for Providing SAN Uniswap Liquidity - -By providing 3,000+ SAN to our Uniswap V2 pools (and the corresponding amount of ETH), you get FREE access to Sanbase Pro, including all our metrics, new templates, and daily market insights! - -![noborder](liquidity.png) - -You can add liquidity to the SAN<->ETH pool here: - -As soon as you hold the LP tokens in your wallet and connect it to your account or login with it, you will automatically receive a Pro subscription within one hour. 💗 - -Please make sure to do your own due diligence regarding the Uniswap protocol and understand the risks involved in providing liquidity. Santiment has no control over the Uniswap protocol and cannot be held accountable for any potential losses of any kind. - diff --git a/src/docs/sanapi/accessing-the-api/index.md b/src/docs/sanapi/accessing-the-api/index.md deleted file mode 100644 index 1c1c6b92e..000000000 --- a/src/docs/sanapi/accessing-the-api/index.md +++ /dev/null @@ -1,346 +0,0 @@ ---- -title: Accessing the API -author: Santiment Team -date: 2023-06-01 ---- - -- [Overview](#overview) -- [Access the API](#access-the-api) - - [GraphiQL API Explorer](#graphiql-api-explorer) - - [Python library](#python-library) - - [Programming language of your choice](#programming-language-of-your-choice) - - [curl](#curl) -- [Authentication](#authentication) - - [GraphiQL API Explorer](#authentication-with-graphiql-explorer) - - [curl](#authentication-with-curl) -- [Errors](#errors) - -## Overview - -Santiment API utilizes [GraphQL](https://graphql.org). The reasons for choosing -GraphQL over REST include: - -- It allows for precise data requests and easy batching of requests. This - effectively addresses the problems of underfetching and overfetching data. - For instance, why fetch all 20+ fields of a project when only its name is - required? - -- The request outlines the format of the response. This eliminates the need to - guess what data the result contains and how to parse it. - -- It provides an easy, ready-to-use method to explore our API via our Live - Explorer. - -## Access the API - -Please note that some metrics may not be freely available or may have -restrictions, such as limited historical and real-time data. To explore these -metrics without restrictions, use the slug `santiment`. - -There are several methods to retrieve data from Santiment's API: - -### GraphiQL API Explorer - -The Graph**i**QL (graphical interactive in-browser GraphQL IDE) allows you to -run queries directly from your browser. You can access the explorer at the -following link: -[https://api.santiment.net/graphiql](https://api.santiment.net/graphiql). - -Here's an example of how to run a query and view the results directly in your -browser: - -[GraphQL Request fetching transaction volume]() - -### Python library - -Santiment offers a Python wrapper for the GraphQL API, known as `sanpy`. You -can find the documentation and installation instructions for this library -[here](https://github.com/santiment/sanpy). - -You can install `sanpy` using `pip` with the following command: - -```bash -pip install sanpy -``` - -To fetch Ethereum development activity data using this library, use the following code: - -```python -san.get( - "dev_activity/ethereum", - from_date="2019-01-01T00:00:00Z", - to_date="2019-01-07T00:00:00Z", - interval="1d" -) -``` - -The result will be a pandas dataframe, as shown below: - -```python -datetime activity -2019-01-01 00:00:00+00:00 44.0 -2019-01-02 00:00:00+00:00 89.0 -2019-01-03 00:00:00+00:00 140.0 -2019-01-04 00:00:00+00:00 177.0 -2019-01-05 00:00:00+00:00 46.0 -2019-01-06 00:00:00+00:00 22.0 -``` - -### Programming language of your choice - -In the [san-sdk](https://github.com/santiment/san-sdk) repository, you can find -examples of how to query the API using various programming languages. Here are -some examples: - -- [R](https://github.com/santiment/san-sdk/tree/master/R-graphql) -- [Ruby](https://github.com/santiment/san-sdk/blob/master/ruby-graphql/example.rb) -- [Elixir](https://github.com/santiment/san-sdk/blob/master/elixir-graphql/san_graphql_ex/lib/san_graphql_ex.ex) - -### curl - -The following GraphQL request will be executed with curl: - -```graphql-explorer -{ - getMetric(metric: "dev_activity") { - timeseriesDataJson( - slug: "ethereum" - from: "utc_now-60d" - to: "utc_now-50d" - interval: "1d" - ) - } -} -``` - -Copy and paste the following curl request into your console: - -```bash -curl \ --X POST \ --H "Content-Type: application/graphql" \ ---data ' -{ getMetric(metric: "dev_activity"){ timeseriesDataJson( slug: "ethereum" from: "utc_now-60d" to: "utc_now-50d" interval: "1d") } }' https://api.santiment.net/graphql -``` - -The response should look similar to this: - -```bash -{"data":{"getMetric":{"timeseriesDataJson":[{"value":38,"datetime":"2025-02-23T00:00:00Z"},{"value":345,"datetime":"2025-02-24T00:00:00Z"},{"value":411,"datetime":"2025-02-25T00:00:00Z"},{"value":461,"datetime":"2025-02-26T00:00:00Z"},{"value":364,"datetime":"2025-02-27T00:00:00Z"},{"value":334,"datetime":"2025-02-28T00:00:00Z"},{"value":164,"datetime":"2025-03-01T00:00:00Z"},{"value":186,"datetime":"2025-03-02T00:00:00Z"},{"value":262,"datetime":"2025-03-03T00:00:00Z"},{"value":236,"datetime":"2025-03-04T00:00:00Z"},{"value":155,"datetime":"2025-03-05T00:00:00Z"}]}}} -``` - -If you have the `jq` tool installed, you can use it to visualize the response more effectively: - -```bash -curl \ --X POST \ --H "Content-Type: application/graphql" \ ---data ' -{ getMetric(metric: "dev_activity"){ timeseriesDataJson( slug: "ethereum" from: "utc_now-60d" to: "utc_now-50d" interval: "1d")} }' https://api.santiment.net/graphql \ -| jq .data.getMetric.timeseriesDataJson -``` - -The output should look like this: - -```json -[ - { - "value": 38, - "datetime": "2025-02-23T00:00:00Z" - }, - { - "value": 345, - "datetime": "2025-02-24T00:00:00Z" - }, - { - "value": 411, - "datetime": "2025-02-25T00:00:00Z" - }, - { - "value": 461, - "datetime": "2025-02-26T00:00:00Z" - }, - { - "value": 364, - "datetime": "2025-02-27T00:00:00Z" - }, - { - "value": 334, - "datetime": "2025-02-28T00:00:00Z" - }, - { - "value": 164, - "datetime": "2025-03-01T00:00:00Z" - }, - { - "value": 186, - "datetime": "2025-03-02T00:00:00Z" - }, - { - "value": 262, - "datetime": "2025-03-03T00:00:00Z" - }, - { - "value": 236, - "datetime": "2025-03-04T00:00:00Z" - }, - { - "value": 155, - "datetime": "2025-03-05T00:00:00Z" - } -] -``` - -## Authentication - -Certain APIs necessitate a valid API key, which must be linked to an account -with a paid subscription to access additional data. You can generate your API -key on your [Account Settings](https://app.santiment.net/account#api-keys) -page. - -After generating your API key, you need to include it as an additional HTTP -header in the format `Authorization: Apikey `. - -### Authentication with GraphiQL Explorer - -Santiment also offers an advanced version of GraphiQL that is particularly useful!\[\] -for API users: -[https://api.santiment.net/graphiql_advanced](https://api.santiment.net/graphiql_advanced). -This version allows users to add HTTP headers, which can be used to include an -API key and authenticate your requests. To do this, simply add the following -header: `Authorization: Apikey YOUR_OWN_API_KEY`. - -![](./graphiql_header.png) - -### Authentication with curl - -Include the `Authorization: Apikey ` header using the `-H` option: - -```bash -curl \ - -X POST \ - -H "Content-Type: application/graphql" \ - -H "Authorization: Apikey "\ - --data '{ curentUser { id} }' \ - https://api.santiment.net/graphql -``` - -## Errors - -GraphQL errors are returned with HTTP status code 200. - -To check for errors, you need to check for the presence of the `errors` key in the JSON response. - -If the query does not return a status code of `200`, it indicates a different -issue. Here are some possibilities: - -- `429` - You're being rate-limited. Reduce the number of requests you're - making. Check the [Rate limits](/sanapi/rate-limits) page for more - information. -- `5xx` - An internal server error has occurred. Please let us know in the - support channel on our [Discord server](https://santiment.net/discord). - -### Error example - syntax error - -For instance, if an invalid query is passed to the API, the following will occur: - -```bash -$ curl \ - -X POST \ - -H "Content-Type: application/graphql" \ - --data '{getMetric' \ - https://api.santiment.net/graphql | jq . -``` - -```json -{ - "errors": [ - { - "message": "syntax error before: ", - "locations": [ - { - "line": 1, - "column": 2 - } - ] - } - ] -} -``` - -### Error example - missing parameter - -If your query is missing an argument, the error response will describe this: - -```bash -$ curl \ - -X POST \ - -H "Content-Type: application/graphql" \ - --data '{ getMetric(metric: "price_usd"){ timeseriesDataJson(slug: "bitcoin") } }' \ - https://api.santiment.net/graphql | jq . -``` - -```json -{ - "errors": [ - { - "message": "In argument \"to\": Expected type \"DateTime!\", found null.", - "locations": [ - { - "line": 1, - "column": 35 - } - ] - }, - { - "message": "In argument \"from\": Expected type \"DateTime!\", found null.", - "locations": [ - { - "line": 1, - "column": 35 - } - ] - } - ] -} -``` - -### Error example - historical and realtime data restriction - -If the `from` and/or `to` parameters are outside of the allowed interval for the subscription plan and -[Historical and Realtime data restrictions](/sanapi/historical-and-realtime-data-restrictions) are applied, -the error will look like this: - -```bash -$ curl \ - -X POST \ - -H "Content-Type: application/graphql" \ - --data '{ getMetric(metric: "mvrv_usd_1d"){ timeseriesDataJson(slug: "bitcoin" from: "2015-01-01T00:00:00Z" to: "2016-01-01T00:00:00Z") } }' \ - https://api.santiment.net/graphql | jq . -``` - -```json -{ - "data": { - "getMetric": { - "timeseriesDataJson": null - } - }, - "errors": [ - { - "message": "Both `from` and `to` parameters are outside the allowed interval you can query timeseries_data_json with your current subscription SANAPI FREE. Upgrade to a higher tier in order to access more data.\n\nAllowed time restrictions:\n - `from` - 2024-04-24 12:55:45.778508Z\n - `to` - 2025-03-25 12:55:45.778508Z\n", - "path": ["getMetric", "timeseriesDataJson"], - "locations": [ - { - "line": 1, - "column": 37 - } - ] - } - ] -} -``` - - -**Read next: [Fetching Metrics](/sanapi/fetching-metrics)** - diff --git a/src/docs/sanapi/common-queries.md b/src/docs/sanapi/common-queries.md deleted file mode 100644 index 9038a4daf..000000000 --- a/src/docs/sanapi/common-queries.md +++ /dev/null @@ -1,372 +0,0 @@ ---- -title: Common Santiment API GraphQL Queries -author: Santiment Team -date: 2024-07-01 ---- - -# Overview - -In this article we explore some of the most frequently used queries in the SanAPI. - -### Retrieve data for one asset - -This query obtains the daily active addresses for bitcoin for a period of 30 days. - -```graphql-explorer -{ - getMetric(metric: "daily_active_addresses") { - timeseriesDataJson( - selector: { slug: "bitcoin" } - from: "2024-01-01T00:00:00Z" - to: "2024-01-31T23:59:59Z" - interval: "1d" - ) - } -} -``` - -### Retrieve data for one asset, apply some transformation - I - -The development activity is very sensitive to day/night cycles, as well as public holidays or vacation days taken by the team. -To smooth the data we can apply a moving average transformation to the data direclty in the API call. - -```graphql -{ - getMetric(metric: "dev_activity") { - timeseriesDataJson( - slug: "ethereum" - from: "utc_now-365d" - to: "utc_now" - interval: "7d" - transform: { type: "moving_average", movingAverageBase: 4 } - ) - } -} -``` - -You can test this query in the [GraphiQL Explorer](). - -### Retrieve data for one asset, apply some transformation - II - -The `twitter_followers` metric shows the total number of twitter followers of -the handle of a project. If we apply the `consecutive_difference` we can -directly see how the total number of followers changes week by week (because we -use 7 day interval). The values show how many followers the project gained or -lost for each time period. - -```graphql -{ - getMetric(metric: "twitter_followers") { - timeseriesDataJson( - slug: "ethereum" - from: "utc_now-365d" - to: "utc_now" - interval: "7d" - transform: { type: "consecutive_differences" } - ) - } -} -``` - -You can test this query in the [GraphiQL Explorer]() - -### Retrieve data for multiple assets with a single API call - -This query obtains data for a list of assets in a single request. -You can specify the assets by providing a list of their slugs using the `slugs` -selector. - -```graphql -{ - getMetric(metric: "price_usd") { - timeseriesDataPerSlugJson( - from: "utc_now-1d" - to: "utc_now" - interval: "15m" - selector: { - slugs: [ - "ethereum" - "tezos" - "eos" - "color-platform" - "enecuum" - "slink" - ] - } - ) - } -} -``` - -You can test this query in the [GraphiQL Explorer](). - -> **Note:** If you want to retrieve the most recent data, you can use "utc_now" as the value for the `to` argument, instead of specifying a date. - -### Retrieving Prices at 1-Second Intervals - -Only the price data with source `cryptocompare` is available at such small -intervals. - -If you need to fetch the price of a cryptocurrency that changes every second -within a specific time frame, you can do so using our API. - -Here is an example of how to retrieve the price of Bitcoin in USD at 1-second -intervals for the past minute: - -```graphql -{ - getMetric(metric: "price_usd") { - timeseriesDataJson( - selector: { slug: "bitcoin", source: "cryptocompare" } - from: "utc_now-1m" - to: "utc_now" - interval: "1s" - cachingParams: { baseTtl: 1, maxTtlOffset: 1 } - ) - } -} -``` - -You can test this query in the [GraphiQL Explorer](). - -### Get some information about each project - -Get some data for each project - -```graphql -{ - allProjects { - slug - name - ticker - description - logoUrl - websiteLink - twitterLink - discordLink - slackLink - telegramLink - facebookLink - marketSegments - githubLinks - infrastructure - } -} -``` - -You can test this query in the [GraphiQL Explorer](https://api.santiment.net/graphiql?query=%7B%0A%20%20allProjects%20%7B%0A%20%20%20%20slug%0A%20%20%20%20name%0A%20%20%20%20ticker%0A%20%20%20%20description%0A%20%20%20%20logoUrl%0A%20%20%20%20websiteLink%0A%20%20%20%20twitterLink%0A%20%20%20%20discordLink%0A%20%20%20%20slackLink%0A%20%20%20%20telegramLink%0A%20%20%20%20facebookLink%0A%20%20%20%20marketSegments%0A%20%20%20%20githubLinks%0A%20%20%20%20infrastructure%0A%20%20%7D%0A%7D%0A) - -### Aggregate Data for Multiple Assets - -If you need to retrieve the most recent MVRV data for multiple assets, such as -Ethereum, Bitcoin, and Aave, you can accomplish this with a single query. The -following is a simple solution: - -```graphql -{ - allProjects( - selector: { baseProjects: { slugs: ["ethereum", "bitcoin", "aave"] } } - ) { - slug - aggregatedTimeseriesData( - metric: "mvrv_usd_intraday_365d" - from: "utc_now-1d" - to: "utc_now" - aggregation: LAST - ) - } -} -``` - -You can test this query in the [GraphiQL Explorer](). - -### Get an aggregated value for each asset - -The example below returns 3 values for each asset: - -- The latest known price in the last 24 hours, `null` if no new price is known; -- The highest price of the past 7 days; -- The total [development activity](/metrics/development-activity/development-activity/) for the past 30 days. - -```graphql -{ - allProjects(page: 1, pageSize: 100) { - slug - name - ticker - latestPrice: aggregatedTimeseriesData( - metric: "price_usd" - aggregation: LAST - from: "utc_now-1d" - to: "utc_now" - ) - highestWeeklyPrice: aggregatedTimeseriesData( - metric: "price_usd" - aggregation: MAX - from: "utc_now-7d" - to: "utc_now" - ) - devActivity30d: aggregatedTimeseriesData( - metric: "dev_activity-1d" - aggregation: SUM - from: "utc_now-30d" - to: "utc_now" - ) - } -} -``` - -[Run the example]() - -### Filter and order assets and get data for them - -The API allows for very complex queries that filter, order and paginate projects. The example below: - -- Runs on the watchlist `stablecoins` (one can use their own watchlists) with the addition of `santiment`, `bitcoin` and `ethereum`; -- Keeps only those projects that have at least 1000 daily active addresses on average for the last 7 days; -- Orders the result in descending order using the current daily active addresses; -- Returns the first 10 projects according to these filter and orderding rules. - -```graphql -{ - allProjects( - selector: { - baseProjects: [ - { watchlistSlug: "stablecoins" } - { slugs: ["santiment", "bitcoin", "ethereum"] } - ] - filters: [ - { - metric: "daily_active_addresses" - from: "utc_now-7d" - to: "utc_now" - aggregation: AVG - operator: GREATER_THAN - threshold: 1000 - } - ] - orderBy: { - metric: "daily_active_addresses" - from: "utc_now-3d" - to: "utc_now" - aggregation: LAST - direction: DESC - } - pagination: { page: 1, pageSize: 10 } - } - ) { - slug - avgDaa7d: aggregatedTimeseriesData( - metric: "daily_active_addresses" - from: "utc_now-7d" - to: "utc_now" - aggregation: AVG - ) - } -} -``` - -[Run the example]() - -### Retrieve all available projects for a specific metric - -```graphql -{ - getMetric(metric: "daily_active_addresses") { - metadata { - availableProjects { - slug - } - } - } -} -``` - -You can test this query in the [GraphiQL Explorer](). - -### Retrieve all available metrics for a specific project - -```graphql -{ - projectBySlug(slug: "bitcoin") { - # All metrics - availableMetrics - # Only the timeseries metrics -- those that are fetched by getMetric's timeseriesData field - availableTimeseriesMetrics - # The available metrics paired with the link to their documentation - availableMetricsExtended { - metric - docs { - link - } - } - } -} -``` - -You can test this query in the [GraphiQL Explorer]() - -### Retrieve the access restrictions for each metric for a given subscription plan - -```graphql -{ - getAccessRestrictions(filter: METRIC, product: SANAPI, plan: BUSINESS_PRO) { - # Name of the metric - name - # Is the metric accessible at all, some metrics are not accessible in FREE plan - isAccessible - # If some time range restrictions are applied - isRestricted - # If the metric is scheduled for deprecation - isDeprecated - # What is the earliest date you can access. null if no restriction is applied - restrictedFrom - # What is the latest date you can access. null if no restriction is applied - restrictedTo - docs { - link - } - } -} -``` - -You can test this query in the [GraphiQL Explorer]() - -### Retrieve Current Prices for All Assets - -```graphql-explorer -{ - allProjects { - slug - price: aggregatedTimeseriesData( - metric: "price_usd" - from: "utc_now-1d" - to: "utc_now" - aggregation: LAST - ) - } -} -``` - -### Retrieve Current Trending Words - -```graphql-explorer -{ - getTrendingWords( - from: "utc_now-3h" - to: "utc_now" - size: 20 - interval: "1h" - ) { - datetime - topWords { - word - score - } - } -} -``` - - -**Read next: [Rate Limits](/sanapi/rate-limits)** - diff --git a/src/docs/sanapi/complexity.md b/src/docs/sanapi/complexity.md deleted file mode 100644 index 40a72c149..000000000 --- a/src/docs/sanapi/complexity.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: API Complexity -author: Santiment Team -date: 2023-05-09 ---- - -## Overview - -API queries for metrics, such as [this NVT example](/metrics/nvt#sanapi), can -potentially yield extensive results (ranging from thousands to hundreds of thousands of -data points). They may also generate queries that scan the entire -database, thereby consuming substantial resources. This could potentially -expose the system to DoS attacks. - -To prevent such scenarios, every GraphQL request is analyzed before execution. -The **complexity** of each query is calculated, and if it exceeds a certain -threshold, the API server rejects it and returns an error without executing the -query. Generally, the complexity is proportional to the number of data points -and the size of the time interval included in the result. - -The complexity calculation considers the following factors: - -- Number of data points returned - **N**. For instance, fetching 30 days of - data at daily intervals results in 30 data points. -- Number of fields in a data point - **F**. Most metrics include two fields: - **datetime** and **value**. -- Years time range span - **Y**. If the request uses a large interval (like 30 - days), the number of data points is small. However, the time range spans - several years. The query still needs to read and aggregate a lot of data in - the database. -- Metric weight - **W**. Most metrics are stored in specialized fast data - storage, so they have a smaller weight (0.3). The remaining metrics have a - weight of 1. -- Weighted number of assets - **A**. In case of returning data for many assets (timeseriesDataPerSlugJson API), - the number of assets multiplied by a weight of 0.1, minimum of 1. In case of returning - data for a single asset, the weight is 1. -- Subscription plan tier - **S**. The higher the user's plan, the larger the - complexity limit (3 for Basic, 5 for Pro, 7 for Premium). As the complexity - threshold is constant, the computed complexity is divided by **S**. This - means that the same query executed by a Pro user will have a complexity five - times smaller than the same query executed by a Free user. - -Given the above-defined values, the complexity is calculated using the -following formula: - -$$ -Complexity(Q) := \dfrac{N(Q) * F(Q) * Y(Q) * W(Q) * A(Q)}{S(Q)} -$$ - -In this formula, Q represents the query being analyzed, and N(Q)...S(Q) are the described values computed for that query. - -## Example - -Let's examine how to calculate the complexity when a Business PRO subscription user executes the following query: - -```graphql-explorer -{ - getMetric(metric: "price_usd") { - timeseriesDataPerSlugJson( - selector: { slugs: ["bitcoin", "ethereum", "xrp"] } - from: "utc_now-1500d" - to: "utc_now" - interval: "30m" - ) - } -} -``` - -- `N(Q) = 1500 * 24 * 2 = 72000` - The time range spans 3650 days and the interval is set to 1 hour. -- `F(Q) = 2` - The data points count in practice is 4, but it is explicitly set to 2, so it mimics the behavior - of `timeseriesDataJson` which returns just a list of `datetime` and `value`. -- `Y(Q) = 2` - Computed as: `max(diff(2025-04-24, 2021-03-16, "years"), 2) / 2`, where `/` is integer division -- `S(Q) = 5` - The SanAPI PRO plan offers complexity limits that are 5 times higher than those of the SanAPI Free plan. -- `A(Q) = 1` - The API call returns data for 3 assets, so the value is `max(1, 3\*0.1) = 1` - - if the number of assets was 50, then the weight would be `max(1, 50*0.1) = max(1, 5) = 5` - -The complexity of the query, Q, is calculated as follows: - -$$ -Complexity(Q) = \frac{72000 * 2 * 2 * 0.3 * 1}{5} = 17280 -$$ - -The complexity threshold is 50000, so this query is valid and the API server -will execute it. If a SanAPI Free user attempts to execute this query, S(Q) -will equal 1 and the complexity will be 86400. This will trigger the -following error: - -``` -Operation is too complex: -complexity is 86400 and maximum is 50000 -``` - - -**Read next: [Supported Blockchains](/sanapi/supported-blockchains)** - diff --git a/src/docs/sanapi/fetching-metrics.md b/src/docs/sanapi/fetching-metrics.md deleted file mode 100644 index 3a2addec4..000000000 --- a/src/docs/sanapi/fetching-metrics.md +++ /dev/null @@ -1,594 +0,0 @@ ---- -title: Fetching Metrics -author: Santiment Team -date: 2020-04-06 ---- - -- [Overview](#overview) -- [Available Metrics](#available-metrics) -- [Metrics Restrictions Per Plan](#metrics-restrictions-per-plan) -- [Metrics Documentation](#metrics-documentation) -- [Available Assets](#available-assets) -- [Available Metrics Per Project](#available-metrics-per-project) -- [Available Projects Per Metric](#available-projects-per-metric) -- [Minimal Interval](#minimal-interval) -- [Aggregation](#aggregation) -- [Queryable Fields](#queryable-fields) - - [timeseriesDataJson](#timeseriesdatajson) - - [timeseriesDataPerSlugJson](#timeseriesdataperslugjson) - - [aggregatedTimeseriesData](#aggregatedtimeseriesdata) - - [histogramData](#histogramdata) - - [metadata](#metadata) - - [availableSince](#availablesince) - - [lastDatetimeComputedAt](#lastdatetimecomputedat) -- [Examples](#examples) - -## Overview - -The `getMetric` GraphQL query provides a unified method for accessing a variety -of metrics for all supported assets. This query enables you to retrieve -metadata, datetime availability, assets availability, and various metric representations, including -timeseries data, histogram data, and aggregated timeseries data. - -Here is an example of a GraphQL `getMetric` query: - -```graphql-explorer -{ - getMetric(metric: "active_addresses_24h") { - timeseriesDataJson( - slug: "bitcoin" - from: "2023-05-01T08:00:00Z" - to: "2023-05-02T08:00:00Z" - interval: "30m" - ) - } -} -``` - -This query retrieves the timeseries data for the metric "active_addresses_24h" -for Bitcoin, from 8:00 on May 1, 2023, to 8:00 on May 2, 2023, with a 30-minute -interval between data points. - -## Available Metrics - -You can fetch the list of all available metrics using the following [query](https://api.santiment.net/graphiql?query=%7B%0A++getAvailableMetrics%0A%7D%0A): - -```graphql-explorer -{ - getAvailableMetrics -} -``` - -To fetch the list of available metrics for a specific plan and product, provide -the `plan` and `product` arguments in the -[query](https://api.santiment.net/graphiql?query=%7B%0A++getAvailableMetrics%28product%3A+SANAPI+plan%3A+BUSINESS_PRO%29%0A%7D): - -```graphql-explorer -{ - getAvailableMetrics(product: SANAPI, plan: BUSINESS_PRO) -} -``` - -## Metrics restrictions per plan - -Access to certain metrics may be limited in various ways based on your subscription plan: - -- Some metrics may not be accessible to users on lower-tier subscription plans. -- Lower-tier subscription plans may have limited access to certain metrics, - excluding access to historical and real-time data, or no access at all. - -You can obtain detailed information about the restrictions on all metrics for a specific subscription plan using this query: - -```graphql-explorer -{ - getAccessRestrictions(product: SANAPI, plan: BUSINESS_PRO, filter: METRIC) { - name - minInterval - isAccessible - isRestricted - isDeprecated - restrictedFrom - restrictedTo - docs { - link - } - } -} -``` - -The following fields are selected: - -- `name` - the name of the metric -- `minInterval` - what is the minimal interval between two data points (5 minutes or 1 day in most cases) -- `isDeprecated` - is the deprecated. If true, you must stop using this metric as it will be removed in the future. -- `isAccessible` - is the metric accessible with the selected subscription plan. -- `restrictedFrom` - what is the earliest date for which this subscription plan can fetch data. If `null`, then no restrictions apply. -- `restrictedTo` - what is the latest date for which this subscription plan can fetch data. If `null`, then no restrictions apply. -- `docs` - link to the documentation of the metric. - -## Metrics Documentation - -You can find the documentation for most of the metrics on [this page](/metrics). - -## Available Assets - -Each metric is retrieved for a specific asset, which is identified by its `slug`. -You can obtain a list of all slugs using this query: - -```graphql-explorer -{ - allProjects { - slug - name - ticker - } -} -``` - -## Available metrics per project - -The range of available metrics varies for each asset. The query below -demonstrates three distinct lists: - -- All accessible metrics -- A subset of all accessible metrics that are timeseries metrics -- A subset of all accessible metrics that are histogram metrics - -You can retrieve these lists of metrics using this query: - -```graphql-explorer -{ - projectBySlug(slug: "ethereum") { - availableMetrics - availableTimeseriesMetrics - availableHistogramMetrics - } -} -``` - -## Available projects per metric - -To fetch the list of available slugs for a specific metric, use this query: - -```graphql-explorer -{ - getMetric(metric: "mvrv_usd") { - metadata { - availableProjects { - slug - } - } - } -} -``` - -## Minimal Interval - -Metrics are stored as pairs of datetime and value. The term `minInterval` -refers to the time interval between two consecutive data points. It signifies -the smallest interval that can be utilized when querying the metric. - -The most frequently used `minInterval`s include: - -- 1 day (`1d`): Metrics with this interval are typically referred to as "daily" - metrics. -- 5 minutes (`5m`): Metrics with this interval are often called "intraday" - metrics. - -When querying data, the `interval` argument is used to determine the resolution -of the data. This interval can be significantly larger than the `minInterval`. -In such instances, all the values within that larger interval must be -aggregated into a single value. The `aggregation` parameter controls how this -data is aggregated. - -## Aggregation - -Fields that return timeseries data accept an `aggregation` parameter. When an -`interval` larger than `minInterval` is provided for a specific metric, -multiple data point values will be consolidated into a single data point. - -> **Note**: Each metric has a manually selected default aggregation that is -> used if the `aggregation` parameter is not specified. The default aggregation -> is chosen to be the most logical one. - -The types of aggregations are: - -- `SUM` - The sum of all values. -- `AVG` - The average of the values. -- `MEDIAN` - The median of all values. -- `FIRST` - The earliest value (with the smallest datetime). -- `LAST` - The most recent value (with the latest datetime). -- `MAX` - The largest value. -- `MIN` - The smallest value. -- `ANY` - Any value within the interval. This is typically used when all values - are expected to be the same, and you just want to select one of them. No - metrics use this as their default aggregation. This type of aggregation is - more commonly used when users write their own SQL queries using the - [Santiment Queries](/santiment-queries) product. - -> **Note:** The aggregation is of the [GraphQL enum -> type](https://graphql.org/learn/schema/#enumeration-types) and should be -> provided in uppercase without quotes, like this: `aggregation: MAX`. - -The following query retrieves the default aggregation and all available aggregations for each metric: - -```graphql-explorer -{ - getMetric(metric: "daily_active_addresses") { - metadata { - defaultAggregation - availableAggregations - } - } -} -``` - -## Queryable fields - -In the `getMetric` function, you can query the following fields: - -- `timeseriesDataJson` -- `timeseriesDataPerSlugJson` -- `aggregatedTimeseriesData` -- `histogramData` -- `metadata` -- `availableSince` -- `lastDatetimeComputedAt` - -### timeseriesDataJson - -Timeseries data is a sequence of data points collected at consistent intervals -over time. Each data point provided by the API includes a `datetime` and a -`value` field. - -To retrieve the values for a specific metric, slug, and time range, you can use -the `timeseriesDataJson` field of the `getMetric` API. - -#### Parameters: - -| Parameter | Description | -| --------------------- | ----------------------------------------------------------------------------------------------------------------- | -| slug | The slug of the project | -| from | The starting date for the values to be returned, in ISO8601 format | -| to | The ending date for the values to be returned, in ISO8601 format | -| interval | The intervals to be returned. The default is `1d`. This is optional | -| aggregation | The aggregation to be used when fetching data for longer intervals. This is optional | -| includeIncompleteData | Exclude the last incomplete day (today) if it could lead to misleading data. Default is `false`. This is optional | -| fields | Optionally give aliases the returned fields `datetime` and `value` | -| transform | Apply a transformation to the result. Default is `none`. This is optional | - -- `aggregation`: This parameter is optional. If not provided, each metric has a - default aggregation that is most suitable. You can view the default - aggregation function using the [metadata](#metadata) query. -- `includeIncompleteData`: In some cases, if the day is not yet complete, the - current value can be misleading. For instance, fetching daily active - addresses at 12pm would include only half a day's data, potentially making - the data for that day appear too low. -- `fields`: If the returned fields name should be something other than `datetime` or `value`, aliases can be given. - In case of `aggregation: OHLC`, the fields that can be overriden are `valueOhlc`, `open`, `high`, `close` and `low` - - `{datetime: "dt", value: "v"}` -- `transform`: Apply a transformation to the timeseries data result. Available transformations include: - - `{type: "none"}`: Do not apply any transformation - - `{type: "moving_average", moving_average_base: base}`: Apply a simple moving average. Each data point value is calculated as the average of the last `base` intervals. To compute this, it fetches enough data before `from` so it can be computed. - - `{type: "changes"}`: For each data point, change the value to the difference between the value and the previous value. - -```graphql-explorer -{ - getMetric(metric: "dev_activity") { - timeseriesDataJson( - slug: "santiment" - from: "utc_now-60d" - to: "utc_now-50d" - interval: "1d" - aggregation: SUM - transform: { type: "moving_average", moving_average_base: 3 } - ) - } -} -``` - -### timeseriesDataPerSlugJson - -This API acts similar to timeseriesDataJson, but it can return data for more than one asset at a time. -The differences in parameters compared to timeseriesDataJson are as follows: - -- Instead of `slug` it can accept the `selector` parameters where multiple assets can be provided at once: - `selector: {slugs: ["bitcoin", "ethereum"]}` -- It does not support the `transform` parameter - -```graphql-explorer -{ - getMetric(metric: "price_usd") { - timeseriesDataPerSlugJson( - selector: { slugs: ["bitcoin", "ethereum"] } - from: "utc_now-60d" - to: "utc_now-50d" - includeIncompleteData: true - interval: "1d" - ) - } -} -``` - -### aggregatedTimeseriesData - -Aggregated timeseries data is useful when you require a single value instead of -multiple values separated by an even interval. This can be utilized to fetch -the All-Time High (ATH) price or the highest number of daily active addresses, -among other examples. - -#### Parameters: - -| Parameter | Description | -| ----------- | ----------------------------------------------------------------------------- | -| slug | The slug of the project | -| from | The start date for the returned values in ISO8601 format | -| to | The end date for the returned values in ISO8601 format | -| aggregation | The aggregation to be used when fetching data for longer intervals (Optional) | - -- `aggregation`: This parameter is optional. If not provided, each metric has a default aggregation function that is most suitable. The default aggregation function can be viewed using the [metadata](#metadata) query. - -The following query fetches the all-time highest price for Santiment: - -```graphql-explorer -{ - getMetric(metric: "price_usd") { - highest_price: aggregatedTimeseriesData( - slug: "santiment" - from: "2017-07-01T00:00:00Z" - to: "2020-04-01T00:00:00Z" - aggregation: MAX - ) - } -} -``` - -### aggregatedTimeseriesData on the project type - -Queries like `allProject` or `projectBySlug` also have `aggregatedTimeseriesData` field that works the same way. -The only difference is that when using `getMetric` the `metric` is already pinned and the `slug` needs to be provided, while -for `allProjects` and `projectBySlug` it is vice versa. -Using aliases, the `aggregatedTimeseriesData` can be selected multiple times. - -```graphql-explorer -{ - allProjects(page: 1, pageSize: 20) { - slug - devActivity: aggregatedTimeseriesData( - metric: "dev_activity_1d" - from: "utc_now-30d" - to: "utc_now" - aggregation: SUM - ) - priceUsd: aggregatedTimeseriesData( - metric: "price_usd" - from: "utc_now-1d" - to: "utc_now" - aggregation: LAST - ) - } -} -``` - -### histogramData - -A histogram is a graphical representation that organizes a group of data points -into a specified range. For instance, if we consider the period from January -2018 to January 2019, we can fetch the amount of Ether that was bought in every -100-dollar price range: $0-$100, $100-$200, ..., $1300-$1400. - -To fetch the values for a given histogram metric, slug, and time interval, you -can use the `histogramData` subquery of the `getMetric` API. - -#### Parameters: - -| Parameter | Description | -| --------- | ------------------------------------------------ | -| slug | The slug of the project | -| from | The start date for the values in ISO 8601 format | -| to | The end date for the values in ISO 8601 format | -| interval | The intervals to be returned. Default is `1d` | -| limit | The number of results to be returned. Optional | - -Different histogram metrics may have different response types or formats. - -```graphql-explorer -{ - getMetric(metric: "age_distribution") { - histogramData( - slug: "ethereum" - from: "utc_now-90d" - to: "utc_now-80d" - limit: 20){ - labels - values{ - ... on FloatList{ - data - } - } - } - } -} -``` - -### metadata - -Each metric is accompanied by metadata that describes the following: - -- The minimum interval for which it can be fetched. Different metrics are - available at varying granularities. -- The default aggregation that will be used when retrieving the metric at a - higher resolution. -- The supported aggregations for the metric. -- The existing selectors for the metric. -- The projects for which the metric is available. -- The type of the metric, which can be either a timeseries or a histogram. - -```graphql-explorer -{ - getMetric(metric: "daily_active_addresses") { - metadata { - availableAggregations - availableSelectors - availableSlugs - dataType - defaultAggregation - minInterval - } - } -} -``` - -### availableSince - -You can fetch the date from which a specific metric is available for an asset using the following query: - -```graphql-explorer -{ - getMetric(metric: "transaction_volume") { - availableSince(slug: "bitcoin") - } -} -``` - -Typically, a metric is available for a given asset from the moment the contract -or blockchain is created. However, there are exceptions. For instance, if the -calculation of a metric requires pricing data that is not available, the metric -will only be available from the date the pricing data becomes available. - -For example, Bitcoin has been operational since early 2009, but there were no -exchanges or markets for over a year. Therefore, the pricing data only starts -from July 2010. As a result, the MVRV metric, which requires market -capitalization, is also only available since July 2010. - -### lastDatetimeComputedAt - -> **Note:** This field may be complex to understand. However, in the general -> case, this field is not used. - -The `lastDatetimeComputedAt` shows the when the latest -data point was computed. - -```graphql-explorer -{ - getMetric(metric: "daily_active_addresses") { - lastDatetimeComputedAt(slug: "santiment") - } -} -``` - -## Examples - -**Timeseries Data Example** - -```graphql-explorer -{ - getMetric(metric: "active_addresses_24h") { - timeseriesDataJson( - slug: "bitcoin" - from: "2023-05-01T08:00:00Z" - to: "2023-05-02T08:00:00Z" - interval: "30m" - ) - } -} -``` - -This example query retrieves the `development_activity` metric for the Ethereum -project over the last 60 days, with a 1-day interval. - -**Timeseries Data Example** - -```graphql-explorer -{ - getMetric(metric: "twitter_followers") { - timeseriesData( - slug: "maker" - from: "2023-01-01T00:00:00Z" - to: "2023-02-01T00:00:00Z" - interval: "7d" - transform: { type: "consecutive_differences" } - ) { - datetime - value - } - } -} -``` - -**Aggregated Timeseries Data Example** - -```graphql-explorer -{ - getMetric(metric: "daily_active_addresses") { - highest_daa: aggregatedTimeseriesData( - slug: "ethereum" - from: "2022-01-01T00:00:00Z" - to: "2023-01-01T00:00:00Z" - aggregation: MAX - ) - lowest_daa: aggregatedTimeseriesData( - slug: "ethereum" - from: "2022-01-01T00:00:00Z" - to: "2023-01-01T00:00:00Z" - aggregation: MIN - ) - } -} -``` - -**Histogram Metric Example I** - -```graphql-explorer -{ - getMetric(metric: "age_distribution") { - histogramData( - slug: "santiment" - from: "2020-02-10T07:00:00Z" - to: "2020-03-30T07:00:00Z" - interval: "1d" - ) { - values { - ... on DatetimeRangeFloatValueList { - data { - range - value - } - } - } - } - } -} -``` - -The response result is a list that contains a 2-element range of datetimes and a float value. - -**Histogram Metric Example** - -```graphql-explorer -{ - getMetric(metric: "price_histogram") { - histogramData( - slug: "santiment" - from: "2020-02-10T07:00:00Z" - to: "2020-03-30T07:00:00Z" - interval: "1d" - ) { - values { - ... on FloatRangeFloatValueList { - data { - range - value - } - } - } - } - } -} -``` - -The response is a list that contains a 2-element range of float (prices) and a float value. - - -**Read next: [Common GraphQL Queries](/sanapi/common-queries)** - diff --git a/src/docs/sanapi/historical-and-realtime-data-restrictions/index.md b/src/docs/sanapi/historical-and-realtime-data-restrictions/index.md deleted file mode 100644 index cb6ae9f2e..000000000 --- a/src/docs/sanapi/historical-and-realtime-data-restrictions/index.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: API Historical and Realtime data restrictions -author: Santiment Team -date: 2024-07-03 ---- - -## Overview - -This articles outlines the restrictions that apply to historical and realtime -data for the [metrics](/sanapi/fetching-metrics). - -Example: If you are on the Free plan, you cannot access `mvrv_usd_1d` values: - -- older than 1 year; -- from the last 30 days. - -When you query a metric it can happen that some of the data is cut off, or if -the whole date range you request is outside the allowed range, you will get an -error. - -For example, if you are on the Free plan, for most metrics you will have access -to the last 2 years of data with the last 30 days excluded. To access more historical -and current-day data, you should upgrade to a higher subscription plan. - -## Free Metrics - -Some of the metrics have their entire historical data and realtime data -available without any restrictions. These metrics are available to all users, -regardless of their subscription level. However, the [Rate -Limits](/sanapi/rate-limits) still apply and lower subscription plan users can -make fewer API calls, so they can get less data in the end. - -## Restricted Metrics - -The metrics that are not free have their historical and realtime data access -restricted depending on the subscription plan. - -Users without any subscription plan are represented as using the FREE subscription plan. -They have access to 1 year old historical data without the last 30 days. - -The historical and realtime restrictions seen on the [Pricing Page](https://app.santiment.net/pricing?plans=business) -apply only to those restricted metrics. - -![](./pricing-plans-restrictions.png) - -## How to determine the restrictions of each metric - -You can obtain detailed information about the restrictions of each metric for a -specific subscription plan using this query: - -```graphql-explorer -{ - getAccessRestrictions(product: SANAPI plan: BUSINESS_PRO filter: METRIC) { - name - isDeprecated - isAccessible - isRestricted - restrictedFrom - restrictedTo - } -} -``` - -The following fields are selected: - -- `name` - the name of the metric -- `isDeprecated` - is the deprecated. If true, you must stop using this metric as it will be removed in the future. -- `isAccessible` - is the metric accessible with the selected subscription plan. -- `restrictedFrom` - what is the earliest date for which this subscription plan can fetch data. If `null`, then no restrictions apply. -- `restrictedTo` - what is the latest date for which this subscription plan can fetch data. If `null`, then no restrictions apply. - -You are interested in the `restrictedFrom` and `restrictedTo` fields. -If they are both `null` -- the selected subscription plan has access to the full historical and realtime data for that plan. - - -**Read next: [Complexity](/sanapi/complexity)** - diff --git a/src/docs/sanapi/index.md b/src/docs/sanapi/index.md deleted file mode 100644 index 1c785d942..000000000 --- a/src/docs/sanapi/index.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: API Reference -author: Santiment Team -date: 2020-04-06 -description: This page serves as a comprehensive guide to all the APIs provided by Santiment. ---- - -- [Overview](#overview) -- [How to Access the API](#how-to-access-the-api) -- [Fetching Metrics](#fetching-metrics) -- [Rate Limits](#rate-limits) -- [Complexity](#complexity) -- [Glossary](#glossary) -- [Supported Blockchains](#supported-blockchains) - -## Overview - -Santiment API utilizes [GraphQL](https://graphql.org). The decision to use -GraphQL over REST was made due to several reasons: - -- It allows you to request precisely the data you need and conveniently batch - requests together. This effectively addresses the issues of underfetching and - overfetching data. For instance, why fetch all 20+ fields of a project when - you only need its name? - -- The request describes the format of the response. This eliminates the need to - guess what data the result contains and how to parse it. - -- It provides an easy, out-of-the-box method to explore our API via our Live - Explorer. - -### Example - -The example below demonstrates a GraphQL query used to fetch timeseries price -data. The parameters control the time range, the interval between data points, -and how all the values within an interval are aggregated. - -```graphql-explorer -{ - getMetric(metric: "twitter_followers") { - timeseriesDataJson( - slug: "ethereum" - from: "utc_now-90d" - to: "utc_now-60d" - interval: "1d") - } -} -``` - -## How to access the API - -Instructions how to access the API can be found on the [Accessing the API](/sanapi/accessing-the-api) page. - -## Fetching Metrics - -You can find information on how to explore and fetch the available metrics on the [Fetching Metrics](/sanapi/fetching-metrics) page. - -## Common GraphQL queries - -The list of [Common GraphQL queries](/sanapi/common-queries) gives examples for -the different type of queries one can craft and execute. - -## Rate Limits - -The [Rate Limits Page](/sanapi/rate-limits) provides detailed information on -how API calls are counted and how rate limits are applied. - -## Historical and Realtime data restrictions - -The [Historical and Realtime data -restrictions](/sanapi/historical-and-realtime-data-restrictions) provides -information about the applied restrictions per plan. - -## Complexity - -Each API query has a limit to the amount of data points it can fetch. The -[Complexity Page](/sanapi/complexity) provides a detailed explanation on how -complexity analysis determines whether a given query will be executed or -rejected. - -## Glossary - -You can find the definitions of some terms used on this page in our dedicated -[glossary page](/glossary). - -## Supported Blockchains - -You can find information about the blockchains we support on our [Supported -Blockchains page](/sanapi/supported-blockchains). diff --git a/src/docs/sanapi/rate-limits/index.md b/src/docs/sanapi/rate-limits/index.md deleted file mode 100644 index 8a23c2743..000000000 --- a/src/docs/sanapi/rate-limits/index.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -title: API Rate Limits -author: Santiment Team -date: 2023-05-09 ---- - -## Overview - -Santiment API Rate Limiting is a mechanism that restricts the number of -requests a user can make within a specific time frame. This limitation is -crucial for maintaining stability and optimal performance for a large number of -clients. - -1. **Maintaining Service Stability and Performance:** API Rate Limits prevent a - single entity from excessively using the API service, which could - potentially degrade the performance for other users. - -2. **Fair Resource Allocation:** API Rate Limits ensure a more equitable - distribution of API resources among users. They prevent individual users or - applications from monopolizing the available resources, ensuring that all - users have equal access and opportunity to use the API services. - -3. **Protection Against Malicious Activities:** API Rate Limits serve as a - basic security measure to protect against malicious activities such as DoS - (Denial of Service) attacks. By limiting the number of requests from a - single source, Santiment can mitigate potential harm. - -## How are API calls counted? - -Each [GraphQL Query](https://academy.santiment.net/glossary/#query) is counted -as one API call. One GraphQL request can contain any number of GraphQL queries -inside of it. This means that one GraphQL request can count as multiple API -calls. In most cases, a single GraphQL request will contain only one GraphQL -query. - -Executing the following GraphQL request will count as 1 API calls: - -```graphql-explorer -{ - getMetric(metric: "active_addresses_24h") { - timeseriesDataJson( - slug: "ethereum" - from: "2019-01-01T00:00:00Z" - to: "2019-01-01T03:00:00Z" - interval: "30m" - ) - } -} -``` - -Executing the following GraphQL request will count as 2 API calls: - -```graphql-explorer -{ - activeAddresses: getMetric(metric: "active_addresses_24h") { - timeseriesDataJson( - slug: "ethereum" - from: "2019-01-01T00:00:00Z" - to: "2019-01-01T03:00:00Z" - interval: "30m" - ) - } - - transactionVolume: getMetric(metric: "transaction_volume") { - timeseriesDataJson( - slug: "ethereum" - from: "2019-01-01T00:00:00Z" - to: "2019-01-01T03:00:00Z" - interval: "30m" - ) - } -} -``` - -## How are rate limits applied and refreshed? - -API Rate Limits are applied on a **per account** basis. This means that all API -keys associated with a single account share the same limits. It's important to -note that API keys used for testing or development purposes can impact the rate -limits of the API key used for production. - -The rate limits vary based on the subscription plan. You can find the details -for each plan in [this article](products-and-plans/sanapi-plans). - -Rate limits are applied on a **per minute**, **per hour** and **per month** -basis, with all dates and times set to the UTC timezone. - -The refreshment of these limits occurs **at the start of the next minute, hour, -or month**. This means that regardless of when the subscription was created, -the count of API calls will reset at the start of the next month, specifically -at 00:00:00 UTC on the 1st of the month. - -## How to Determine If You Are Being Rate Limited? - -When the rate limit is reached, an error response with HTTP code 429 is -returned. The content of the response body includes a human-readable format of -the error and the remaining time until you can make another request. The -remaining time, measured in seconds, is also provided as the value of the -`x-ratelimit-reset` HTTP header. - -Several other HTTP headers provide information about the rate limits: - -The following three HTTP headers indicate the limits of your current -subscription plan. These values remain constant from request to request and -only change when your subscription plan changes: - -- `x-ratelimit-limit-month` -- `x-ratelimit-limit-hour` -- `x-ratelimit-limit-minute` - -The next three HTTP headers change from request to request and show the number -of API calls remaining before you reach the limit of allowed API calls: - -- `x-ratelimit-remaining-month` -- `x-ratelimit-remaining-hour` -- `x-ratelimit-remaining-minute` - -## What to do if the rate limits are reached? - -Rate limits can be reached for various different reasons: - -- Excessive usage of the API during a development phase; -- Programming error that consumes many API calls; -- Unexpected usage peak; -- Need for more API calls in the long term. - -In case of a temporary issue or error, you can go to you [Account page](https://app.santiment.net/account#api-keys) -and press the `Reset`. The self-reset of API rate limits is available once per 90 days: -![](./reset_api_rate_limits.png) - -Contact Santiment support if additional issues are encountered. - -In case the need for more API calls is long-term, please consider upgrading to a higher subscription plan. -If the highest subscription plan does not cover your needs, contact Santiment support. - - -**Read next: [Historical and Realtime data restrictions](/sanapi/historical-and-realtime-data-restrictions)** - diff --git a/src/docs/sanapi/supported-blockchains.md b/src/docs/sanapi/supported-blockchains.md deleted file mode 100644 index 38f249f57..000000000 --- a/src/docs/sanapi/supported-blockchains.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Supported Blockchains -author: Santiment Team -date: 2023-05-31 ---- - -When Santiment designates a blockchain as supported, it signifies that on-chain transactions (including events, receipts, and other pertinent data) are exported, and metrics are constructed based on these data. - -Please note that not all supported blockchains have metrics related to exchanges, labels, or miners. - -For more information on the types of metrics available for each blockchain, please check [here](https://api.santiment.net/graphiql?variables=&query=%7B%0A++getAvailableBlockchains+%7B%0A++++blockchain%0A++++slug%0A++++infrastructure%0A++++createdOn%0A++++hasLabelMetrics%0A++++hasMinersMetrics%0A++++hasExchangeMetrics%0A++++hasTopHoldersMetrics%0A++++hasPureOnchainMetrics%0A++++hasOnchainFinancialMetrics%0A++%7D%0A%7D%0A). - -Price data may be available for blockchains not listed here. - -| Bitcoin | Ethereum | XRPL | -| ------------------ | ------------------ | ------------------ | -| :white_check_mark: | :white_check_mark: | :white_check_mark: | - -| BNB Chain | Bitcoin Cash | Litecoin | -| ------------------ | ------------------ | ------------------ | -| :white_check_mark: | :white_check_mark: | :white_check_mark: | - -| Cardano | Dogecoin | Polygon | -| ------------------ | ------------------ | ------------------ | -| :white_check_mark: | :white_check_mark: | :white_check_mark: | - -| Avalanche | Optimism | Arbitrum | -| ------------------ | ------------------ | ------------------ | -| :white_check_mark: | :white_check_mark: | :white_check_mark: | - -| ICP | Solana | -| ------------------ | ------------------ | -| :white_check_mark: | :white_check_mark: | \ No newline at end of file diff --git a/src/docs/sanbase/account-settings/index.md b/src/docs/sanbase/account-settings/index.md deleted file mode 100644 index c2891a72a..000000000 --- a/src/docs/sanbase/account-settings/index.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Account Settings -author: Santiment Team ---- - -To customize your profile, please visit [Account Settings](https://app.santiment.net/account) on the Santiment website. - -## Overview - -Depending on your method of logging into Sanbase, you may already see some information displayed in the Account Settings upon your first visit. - -![](primary.png) - -## Connections and Notifications - -If you initially logged in using your email, this section will display your email address, as shown in the screenshot below. You can use the `Connect with Metamask` option to associate an Ethereum address with your active account. - -If you logged in using MetaMask, your ETH address will be displayed, and you can now add an email address and username. - -![](connections.png) - -The Notifications section allows you to choose the channels through which you want to receive notifications from Sanbase, such as triggered signals. Once you've connected an account, you can activate it. Please note that currently, you need Telegram Desktop to connect a Telegram account. - -## Get tokens - -If your login wallet contains any SAN tokens, they will be displayed in the `Get tokens` section located in the center of the page. - -In case you wish to purchase SAN tokens, we provide links to exchanges that offer trading pairs with SAN. Alternatively, you can utilize the `Convert` button to leverage our Bancor integration. For more information on how to use this feature, please refer to [this article](/san-tokens/buy-san-tokens-using-bancor/). - -![](tokens.png) - -## Creating an API Key - -At the bottom of the page, you'll find options to create new API keys and view existing ones. You also have the ability to revoke any previously created keys from this location. - -For more information on API usage, consider starting with [this article](/products-and-plans/create-an-api-key/). - -![](api.png) - -## Subscription - -From this section, you can upgrade your current plan, modify your billing cycle, or cancel your subscription as needed. - -![](subscriptions.png) - diff --git a/src/docs/sanbase/alerts-page/index.md b/src/docs/sanbase/alerts-page/index.md deleted file mode 100644 index e8544df62..000000000 --- a/src/docs/sanbase/alerts-page/index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Alerts Page -author: Santiment Team -description: Learn how to create custom alerts, subscribe to existing ones, monitor recent activities, manage your alerts, and share them with other users. ---- - -To start using the **Alerts** feature on Sanbase, click here: [https://app.santiment.net/alerts](https://app.santiment.net/alerts). - -## Introduction - - - -## How to Create an Alert - - - -## Use Cases for Alerts - -- [Example of Age Consumed Alert on Sanbase](/education-and-use-cases/alerts-on-sanbase/) -- [Example of Social Trends/Trending Words Alert on Sanbase](/education-and-use-cases/social-trends-alerts/) -- [Example of Whale Alert on Sanbase](/education-and-use-cases/whale-alert/) - diff --git a/src/docs/sanbase/assets-page/index.md b/src/docs/sanbase/assets-page/index.md deleted file mode 100644 index e30f487c6..000000000 --- a/src/docs/sanbase/assets-page/index.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Assets Overview page -author: Santiment Team -description: This page provides a quick overview of your watchlists and common categories. ---- - -## Structure - -This page is divided into two main sections: - -1. **`Categories`** - - These are specific asset lists curated by the Santiment Team based on various aspects of the assets, such as `Stablecoins`. If you have any feedback or believe we might be missing tokens in any of these categories, please feel free to get in touch with us. - -2. **`Watchlists`** - - These are similar to **Categories**, but the key difference is that they can be created by any user. - - ![](assets.png) - -## Available Categories - -- **`All Assets`**: This category contains all tokens we track across various blockchains. -- **`ERC 20`**: This category exclusively displays Ethereum-based ERC20 tokens. -- **`Top 50 ERC20`**: This is a dynamic category that showcases the 50 most prominent ERC20 projects we track. -- **`Stablecoins`**: This is a curated list of assets that are intended to maintain a fixed value. -- **`Decentralized Exchanges`**: This category contains a curated list of decentralized exchanges and their utility tokens. -- **`Centralized Exchanges`**: This category features a curated list of regular exchanges and their utility tokens. -- **`Emerging Trending Assets`**: This is a dynamic category with assets that are currently trending in our [**_Emerging Trends_**](/sanbase/emerging-trends-page). - -Each category page contains a table similar to the one found on the **_Watchlist page_**, but the list of assets cannot be modified. - -## How to Create a Watchlist - - - diff --git a/src/docs/sanbase/index.md b/src/docs/sanbase/index.md deleted file mode 100644 index 71d2d6a71..000000000 --- a/src/docs/sanbase/index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Sanbase -author: Santiment Team -date: 2021-05-27 -description: A platform for comprehensive coin analysis, low-latency signals, and asset watchlists ---- - -Sanbase is a platform designed for in-depth coin analysis, low-latency signals, and asset watchlists. Here are some of the key features you can explore: - -- [Account Settings](/sanbase/account-settings): Manage your account settings here. -- [Alerts](/sanbase/alerts-page): Here, you can create and manage your own alerts or subscribe to existing alerts from other users. -- [Assets Overview page](/sanbase/assets-page): This page provides an overview of your watchlists, screeners, and common categories. -- [Insights](/sanbase/insights): This feature allows you to create note-like posts, share them with the community, or browse existing posts. -- [Keyboard Shortcuts](/sanbase/keyboard-shortcuts/): Learn the keyboard shortcuts to navigate Sanbase more efficiently. -- [Logging into Sanbase](/sanbase/logging-into-sanbase): Find out how to log into your Sanbase account. -- [Request to Display New Project](/sanbase/requesting-display-new-project): Learn how to request a new project display on Sanbase. -- [Social Tool](/sanbase/social-tool/): This tool allows you to monitor interest in any topic across dedicated cryptocurrency social channels, including over 1000 Telegram groups, Discord servers, crypto subreddits, Twitter accounts, and more. -- [Social Trends](/sanbase/emerging-trends-page): This feature contains the `Top 10` trending words in crypto, providing a quick overview of the top developing topics in the crypto world at the moment. diff --git a/src/docs/sanbase/insights/index.md b/src/docs/sanbase/insights/index.md deleted file mode 100644 index 58410cce0..000000000 --- a/src/docs/sanbase/insights/index.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Sanbase Insights -author: Santiment Team -description: Learn how to create, share, and browse note-like posts using "Sanbase Insights". ---- - -Begin your journey with **Sanbase Insights** here: [https://insights.santiment.net/](https://insights.santiment.net/) - -Sanbase Insights enables you to create your own note-like posts, share them with the Santiment community, or browse through existing insights. - -![](page.png) - -## Creating a New Insight - -To begin creating a new insight, click on `New Insight` located in the profile dropdown menu. - -During the creation process, you will be asked to provide a title and body for your insight: - -![](new.png) - -Once you've filled in the title and body, Sanbase will automatically begin saving your progress as a draft. - -You also have the option to add tags to your insight. Each insight can have up to five tags, which should correspond to the tickers of the crypto assets your insight is discussing. - -![](prepublish.png) - -Additionally, you have the option to immediately share your insight with the public. - -## Publishing or Deleting Draft Insights - -Under the `My drafts` section, you will find insights that you have initiated but have not yet published for other users. These drafts can be deleted or edited. Once edited, they can be shared using the buttons located on the right side of the screen. - diff --git a/src/docs/sanbase/keyboard-shortcuts/index.md b/src/docs/sanbase/keyboard-shortcuts/index.md deleted file mode 100644 index ac2f34e8c..000000000 --- a/src/docs/sanbase/keyboard-shortcuts/index.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Keyboard Shortcuts -author: Santiment Team ---- - -### Site Wide Shortcuts - -| Keyboard shortcut | Description | -|-----------|------------| -|**/** | Select the Sanbase search bar | -|**esc** | Close pop-up modals like alerts, and return to the parent element | - -## Charts - -### General Shortcuts - -| Keyboard Shortcut | Description | -|-----------|------------| -| **CMD(CTRL) + CLICK** | Hover over any metric on the left-side menu to add it to the first chart | -| **CMD(CTRL) + SHIFT + CLICK** | Hover over any metric on the left-side menu to create a new chart with this metric selected | -| **CMD(CTRL) + CLICK** | For Holder Distribution metrics - select only a single group of holders (deselect all others) | -| **CMD(CTRL) + \** | Collapse the tree of metrics (left-side menu) | -| **CMD(CTRL) + M** | Open Mapview | -| **CMD(CTRL) + L** | Open Chart layout explorer | -| **CMD(CTRL) + S** | Save Chart layout | - -### Drawing Tools - -| Keyboard Shortcut | Description | -|-----------|------------| -| **SHIFT + CLICK** | Draw straight lines on the chart by holding the "Shift" key while using the draw tool. | - -## Social Tool Shortcuts - -| Keyboard Shortcut | Description | -|-----------|------------| -| **CMD(CTRL) + CLICK** | Add trending word to compare input | - -## Tables - -| Keyboard Shortcut | Description | -|-----------|------------| -| **SHIFT + CLICK** | Apply multiple sorting by holding the "Shift" key and clicking on the sortable column header. | - diff --git a/src/docs/sanbase/logging-into-sanbase/index.md b/src/docs/sanbase/logging-into-sanbase/index.md deleted file mode 100644 index 1a752bf66..000000000 --- a/src/docs/sanbase/logging-into-sanbase/index.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: How to Log in Sanbase -author: Santiment Team ---- - -There are two methods to log into Sanbase: through [**MetaMask**](https://metamask.io/) and via **email**. For convenience, both methods can and should be linked to the same account. - -## Logging in to Sanbase Using MetaMask - -When you first visit Sanbase at [https://app.santiment.net](https://app.santiment.net), you can find the login option in the upper right corner of the screen. Simply hover your mouse over the last symbol to see it: - -![](13_login.png) - -Click on `Log in`. This will present you with two options for logging in: using MetaMask or your email. For this guide, choose the MetaMask option. - -![](25_login_choice.png) - -At this point, the MetaMask plugin will request permission to display your currently selected account's public data on the Sanbase website. Click `Connect` to allow the plugin and the website to communicate. - -![](26_metamask_seperate.png) - -If you don't see this window, look for the MetaMask icon in the upper right corner of the screen. It should display a small message indicator: - -![](14_mm.png) - -Clicking the MetaMask icon will bring the missing window to the front. - -Once MetaMask and Sanbase are connected, you should see the following screen: - -![](28_metamask_connected.png) - -Click `Sign in with Metamask`. Another prompt will appear: - -![](29_metamask_signin.png) - -Click `SIGN` to securely sign a message with your private key. This action verifies that you are the owner of the connected account. Congratulations, you are now logged into Sanbase. - -#### Adding Your Email - -To add your email, hover over the account icon located at the top right corner of the screen. This action will reveal additional options, including 'Account Settings'. - -![](09_account_menu.png) - -In the 'Account Settings', enter your email address. Once this is done, you can log in using either MetaMask or your email. Regardless of the method you choose, you will be directed to the same account. - -For more information about the 'Account Settings' page, please refer to [this article](/sanbase/account-settings). - -## Logging in via Email - -Logging into Sanbase via email is a straightforward process. Simply enter your email address, and you will receive a link that directs you to a logged-in Sanbase session. - -If this is your first time logging in via email, you have the option to add an Ethereum (ETH) address. This can be done using MetaMask through the Account Settings page, as mentioned above. - -### Purchasing and Staking SAN Tokens - -You are now prepared to stake SAN tokens in order to avail discounts on your access plan. To learn how to stake SAN tokens, please refer to [this article](/san-tokens/connect-a-wallet-to-the-sanbase-account). - -If you need assistance on how to purchase SAN tokens initially, you can find guidance in [this article](/san-tokens/how-to-buy-san). - diff --git a/src/docs/sanbase/requesting-display-new-project/index.md b/src/docs/sanbase/requesting-display-new-project/index.md deleted file mode 100644 index 1b82de4b8..000000000 --- a/src/docs/sanbase/requesting-display-new-project/index.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: How to Request New Projects and Tokens for Display on Sanbase -author: Santiment Team ---- - -At Santiment, we work directly with Ethereum on-chain data, which allows us to display information about any token whose contract address is known. However, due to the high volume of tokens available, we have chosen to only make a curated and continuously expanding list of tokens searchable on Sanbase. - -To request the addition of a new token to Sanbase, or to add a known team wallet containing significant assets held by the team, please use the form provided below: - - - -While we appreciate token holders requesting their favorite tokens, we prioritize direct requests from a project's team, especially those that provide information about their funding. - diff --git a/src/docs/sanbase/social-trends/index.md b/src/docs/sanbase/social-trends/index.md deleted file mode 100644 index 1345caf23..000000000 --- a/src/docs/sanbase/social-trends/index.md +++ /dev/null @@ -1,327 +0,0 @@ ---- -title: Social Trends -author: Santiment Team -date: 2025-03-20 ---- - -**Social Trends by Santiment** is a comprehensive set of tools for analyzing -cryptocurrency trends. These tools enable the examination of current trends, -identification of underlying factors, and studying of trend changes and how -they correlate with asset prices. - - - -Social trends functionality consists of 5 tools: - -- [Trending words](https://app.santiment.net/social-trends) -- [Trending coins](https://app.santiment.net/social-trends/trending-coins) -- [Historical Crypto Trends](https://app.santiment.net/social-trends/crypto-trends) -- [Key narratives](https://app.santiment.net/social-trends/crypto-narratives) -- [Alpha narratives](https://app.santiment.net/social-trends/crypto-narratives?dialog=alpha_narratives#alpha-narratives) - -Let's take a closer look at each of these tools: - -## Trending Words - -[Trending words](https://app.santiment.net/social-trends?) **page contains the -hourly `Top 10` trending words related to crypto, sourced from more than 6000 -crypto-specific social media channels.** - -The more mentions a word starts receiving compared to the previous period, the -more it is trending. This allows you to find words whose discussions in the -cryptocurrency space are currently gaining popularity. - -![noborder](image1.png) - -**Two purposes for this tool:** - -- To provide a quick overview of the most discussed topics currently in the - crypto social media. -- To provide simple AI explanations for why topics are trending and why they - might be growing. - -### Calculation Methodology - -The analysis of a large number of crypto information sources identifies the -stories that are gaining popularity in the crypto community. So at any given -moment, you can see what's trending in crypto. - -To do this, _every 60 minutes we calculate the top 10 words with the biggest -spike in social media mentions compared to their average social volume over the -previous 2 weeks._ - -This signals an abnormally high interest in a previously uninspiring topic, -making the list practical for discovering new and developing talking points in -the crypto community. - -The results are sourced from more than 6000 crypto-specific social media -channels, including: - -- 500+ Telegram groups -- 500+ crypto subreddits -- 400+ crypto substack newsletters -- 5000+ Twitter accounts - -![noborder](image2.png) - -#### Hype Score - -The Hype Score is the primary criterion for ranking words on our list. It's -based on this[formula](/metrics/emerging-trends/#hype-score) developed -by Santiment, which analyzes all social media messages. - -Using [social volume](https://academy.santiment.net/sanbase/emerging-trends-page/#social-volume) -and number of unique authors we rank words by popularity in social media at the -moment. - -A higher **Hype Score** indicates that for the last 24 hours this particular -word or topic became more valuable for the audience compared to previous 14 -days. - -### How to use it - -1. **Get a 1-minute overview of the biggest (developing) stories in crypto** - - Crypto social media is filled with noise and numerous minor or irrelevant - stories. Our curated list is designed to filter out this noise, focusing - only on topics that have garnered significant attention. Additionally, our - list often highlights important stories that might have been overlooked by - major crypto publications. - -2. **Spot local tops and hype peaks** - - Based on our experience, we've found that the appearance of a token's ticker - on our Top 10 list can serve as an effective indicator of a local top. If - the coin is already in an uptrend, its presence on our list could suggest - that a local top is imminent, indicating that the hype surrounding the coin - has reached its peak. [See our - research.](https://insights.santiment.net/read/can-you-trade-on-trending-crypto-tokens-7396) - -### Explanation for all columns - -#### Social dominance SUM - -![noborder](image3.png) - -Displays the percentage of the total discussions in the crypto space that -the top 10 words occupy. - -#### Trending Chart - -![noborder](image4.png) - -Displays a chart of the popularity of a word over the last 7 days - -#### Social Dominance, 7d - -![noborder](image5.png) - -Displays the average social volume of this word over 7 days; It’s a -percentage of the total number of discussions in the crypto space this word -takes up. - -#### AI Summary - -![noborder](image6.png) - -![noborder](image7.png) - -Our AI integrations helps readers understand of the reasons behind the -sudden rise in popularity of a word. Previously, people could infer the -context from the word cloud of related words, but now AI gives a more -specific answer based on many inputs and sources. In short, it answers the -common question: "**Why is this topic trending? What is the history and -opinions behind it?**" - -#### Connected Words - -![noborder](image8.png) - -Displays a word cloud, showing the words that are most frequently used in -conjunction with your primary keyword on crypto social media. The larger the -displayed word, the more often it appears in comments that also contain your -primary keyword. - -## Trending Coins - -![noborder](image9.png) - -[Trending coins](https://app.santiment.net/social-trends?t=trending-tokens) -shows the top 10 tokens with the most growing number of mentions in the -cryptocurrency space. The more mentions a coin starts receiving compared to -the previous period, the more it is trending. This allows you to find tokens -whose discussions in the cryptocurrency space are currently gaining -popularity. - -By tracking trending tokens, you can find effective entry points into coins -at their price peaks and then play down effectively. You can learn more by -reading [this -article](https://insights.santiment.net/read/can-you-trade-on-trending-crypto-tokens-7396). - -### Token Sentiment - -The social volume of token mentions is categorized into neutral, positive -and negative sentiment based on our [Social -Sentiment](https://academy.santiment.net/metrics/sentiment-metrics/#sentiment-analysis) -metric. Studying the distribution of opinions will help you understand the -prevailing sentiment. - -![noborder](image10.png) - -### Top Gainers & Losers - -![noborder](image11.png) - -This block shows the top gainers and losers of coins by change in Social -Dominance over the last 24 hours. - -### Bull-bear meter - -![noborder](image12.png) - -Methodology of bullish, neutral or bearish meters based on custom BERT-like -LLM trained on crypto-related messages from our social media so. - -### AI summary - -![noborder](image13.png) - -![noborder](image14.png) - -Our AI integrations helps readers understand of the reasons behind the -sudden rise in popularity of a word. Previously, people could infer the -context from the word cloud of related words, but now AI gives a more -specific answer based on many inputs and sources. In short, it answers the -common question: "**Why is this topic trending? What is the history and -opinions behind it?**" - -### Bullish summary - -![noborder](image15.png) - -![noborder](image16.png) - -The AI does a summary of messages that have been categorized as bullish. -This way, we can get an overview of all the bullish opinions on social media -and learn in detail why. - -### Bearish summary - -![noborder](image17.png) - -![noborder](image18.png) - -The AI makes a summary of messages that have been categorized as bearish. -This way we can get an overview of all the bearish opinions on social media -and learn in detail why. - -## Historical Crypto Trends - -[Historical Crypto Trends](https://app.santiment.net/dashboards/social-tool#popular-mid-term-trends) -allows you to analyze the dynamics of narratives in the cryptocurrency space -over time and study the impact of these changes on asset prices. This tool -is useful for those who want to see the big picture and historical changes -in trends. - -![noborder](image19.png) - -The main page shows the most popular trends at the moment. But if you need -information on a specific trend, you can use the search bar. - -### Using keywords (OR and AND) and parentheses in searches - -One graph will be displayed for the total mentions, as well as one for each -data source. You can use `AND`, `OR`, and parentheses to logically combine -multiple search terms. Here are some examples: - -- `btc moon` – This will search for the exact phrase "btc moon". -- `btc AND moon` – This will search for messages where both "btc" and "moon" - appear. The words do not need to be next to each other. -- `btc OR moon` – This will search for messages where either "btc" or "moon" - appears. -- `(btc OR bitcoin) AND moon` – This will search for messages where "moon" - appears with either "btc" or "bitcoin". - -### Page with social context analysis of a particular trend - -For example, let's take the Trend Analysis page for the query [bitcoin or -btc](https://app.santiment.net/labs/trends/explore/bitcoin%20or%20btc). - -On the page you can see the [social volume](https://academy.santiment.net/metrics/social-volume/) chart of this -trend, on which you can overlay the [social dominance chart](https://academy.santiment.net/metrics/social-dominance/#definition), the -price of a certain asset, the correlation of the social trend with the price of -which you want to study, and more. - -![noborder](image20.png) - -Below you can see the dynamics of [social volume](https://academy.santiment.net/metrics/social-volume/) change by social -data sources separately. - -You can see graphs for Telegram, Reddit, Twitter, 4chan, and sometimes others. - -![noborder](image21.png) - -The example on the screenshot shows that the spike in social activity on the -\$PEPE coin on the 4Chan site preceded a sharp price increase, while on the -other sources the spike in social activity occurred during or after the price -increase. - -![noborder](image22.png) - -Under “Average” you can see the total social volume compared to the social -volume of your selected topic. - -![noborder](image23.png) - -Nearby, the Social Context feature shows the most used words around your main -keyword on cryptocurrency social media. The size and color of each word in the -cloud represents its frequency in comments that also mention your main keyword. - -![noborder](image24.png) - -If you want to compare the dynamics of one social trend with another, you need -to click “Compare” and add a trend. - -![noborder](image25.png) - -Example comparison of trends: Bitcoin vs. Ethereum - -![noborder](image26.png) - -Average social volume trends comparison example - -![noborder](image27.png) - -## Key Narratives - -The [Key Narratives](https://app.santiment.net/social-trends/crypto-narratives) -chart displays the social media volume of curated, key narratives over time. - -![noborder](image28.png) - -Hover over the chart to view the detailed query. To edit this chart, first copy -it to your Narratives. - -![noborder](image29.png) - -At the bottom of the page you can see the list of narratives shown on the -chart, the social query behind them, as well as the Soc. volume chart and the -Soc. dominance value, 7d. - -![noborder](image30.png) - -## Alpha Narratives - -[Alpha Narratives](https://app.santiment.net/social-trends/crypto-narratives?dialog=alpha_narratives#alpha-narratives) -are an invaluable tool for those looking to identify the most popular -discussion topics from the past week. They provide a clear and data-informed -view of trends, steering clear of subjective opinions. - -Explore how various narratives from X (formerly Twitter) influence the crypto -market. Our AI detects these narratives within the daily message volume, -providing insights into crypto community discussions. - -Track how each narrative evolves over time and access AI-generated explanations -for deeper understanding. - -![noborder](image31.png) diff --git a/src/docs/sansheets/adding-an-api-key/index.md b/src/docs/sansheets/adding-an-api-key/index.md deleted file mode 100644 index 301ee456f..000000000 --- a/src/docs/sansheets/adding-an-api-key/index.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Adding an API Key to Sansheets -author: Max Bartel ---- - -Adding an API key to Sansheets is very simple. Before you begin, make sure you have completed the following steps: - -- [Setting up Sansheets](/sansheets/setting-up/) -- [Creating an API key](https://sheets.santiment.net/account#api-keys) - -If you have already completed these steps, you can proceed with adding the API key to Sansheets. - -You will find the option to add an API key in the **`Add-ons`** menu under **`Santiment Data`**: - -![](11_add_api_key.png) - -A popup will appear, prompting you to enter your API key: - -![](12_add_api_key2.png) - -Copy the API key from your Sanbase account settings, paste it into the popup, and click `Ok`. - -Sansheets will confirm that you have entered a valid API key: - -![](13_add_api_key_confirmation.png) - -You will now have access to more data, depending on your stake of SAN tokens. - diff --git a/src/docs/sansheets/asset-activity-matrix/index.md b/src/docs/sansheets/asset-activity-matrix/index.md deleted file mode 100644 index dd8eacd46..000000000 --- a/src/docs/sansheets/asset-activity-matrix/index.md +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: The Activity Matrix -author: David Utrobin & Brian -date: 2025-11-04 ---- - -# The Activity Matrix - -What if you could absorb all of your daily crypto analytic research on one page? No tab changing, no switching between individual assets one after another, and no scrolling between different metrics to see which are pointing to valuable future tops and bottoms forming. - -Here is the tool for you. Available through SanSheets, the Activity Matrix captures all of the information necessary to make more informed investing and trading decisions for your portfolio. This powerful tool provides the past week of data for 114 of crypto's most well known assets, displaying how the top eight metrics currently stand compared to each asset's respective 3-month averages. - -[Open the FULL version of the Activity Matrix here](https://docs.google.com/spreadsheets/d/1XSYTrBAY6b5oLO5btRRh40I7CftN76gJ1bKU_owHHeA/view), then go to File > Make a Copy, then download and enable the Sansheets Extension, and plug in your API located in your Sanbase Account Settings. - -[Open the MINI version of the Activity Matrix here](https://docs.google.com/spreadsheets/d/1o3WJQCVn5wz66c33B8NZHQPf7epOSwHVAaf9iN3SrFk/view), then go to File > Make a Copy, then download and enable the Sansheets Extension, and plug in your API located in your Sanbase Account Settings. - -## Activity Matrix Guide - -### General Instructions and Guidelines - -**Requirements for Full Version:** - -- Sanbase PRO membership or an active trial. -- A paid Google Suite subscription associated with your Sanbase PRO email address. -- Sansheets [Add-on installed on Google Sheets](https://academy.santiment.net/sansheets/setting-up/) - -**Requirements for Mini Version:** - -- Sanbase PRO membership or an active trial. - -**First time user instructions:** - -- Go to File, then copy for an exact replica of the main Activity Matrix file. The source file is not editable and does not allow API data to load, but your copy will! -- Update this spreadsheet once per day, after 12am UTC. All metrics (other than price) are daily metrics and only update on Santiment's API once daily at 12:00am UTC. Even on fast computers, expect the entire loading process to take 10-20 minutes. -- To refresh, go to the Data tab and hit the 'Backspace' button on your keyboard while highlighting cell A1, wait 1 minute, then hit the Undo button. Alternatively, hit 'Ctrl' + 'Shift' + "R" or your system's equivalent for a hard refresh. -- Depending on your timezone, certain times of day will show either the past 7 full days or past 6 full days (with the bottom row intentionally blank). The amount of days loaded will depend on how far past 12AM UTC time the new partial day has elapsed. If you prefer to see all 7 days loaded at the same time, it is best to refresh 2-6 hours after 12AM UTC. -- The 'Table' and 'Data' tabs don't need to be touched, unless you plan on changing asset slugs(names). These tabs are where the calculations happen to provide the data that feeds to the more useful tabs. - -**Tips:** - -- Keep view of spreadsheet on 150% View magnification for optimal font & color scaling. Use keyboard shortcuts CTRL+ or CTRL- to zoom accordingly. The main 3 tabs are 'Detailed', 'Anomalies', and 'Top 10', and they will all fit a standard or widescreen monitor perfectly with this zoom percentage. -- On the 'Detailed' and 'Anomalies' tabs, you will see the amount of data loaded and completed in cell A1. With the default amount of boxes set (6,948), cell A1 on these two tabs will be considered 100.0% complete if at least 6 out of 7 full days are loaded. - -### What am I Looking at? - -In the Activity Matrix 'Detailed' tab, you'll see a wide range of multi-colored squares ranging from red to blue. And every single one of them has meaning. - -- The y-axis for each square, as you'll see on the far left, represents the day of the week. -- The x-axis for each square, as you'll see on the top, represents the leading alpha metric that helps predict future market movement. - -![](ActivityMatrix.png) - -A red square indicates that the asset's metric is significantly higher than the average of its past 3 months. -For example, [Active Addresses](https://academy.santiment.net/metrics/active-addresses-24h): High activity is important to monitor because it generally reflects more utility on a coin's network, which can support the thesis of long-term future price growth. - -![](redsq.png) - -A blue square indicates that the asset's metric is significantly lower than the average of its past 3 months. -For example, [Whale Transaction Count 100k+ USD](https://academy.santiment.net/metrics/whale-transaction-count): Low whale transaction numbers reflect minimal engagement and interest levels from the key stakeholders for that asset, which generally is a bit more bearish than bullish in most cases. - -![](bluesqq.png) - -A yellow square indicates an average day for that metric compared to the asset's 3-month average, meaning nothing of significance is happening there. - -![](yellowsq.png) - -Colors in between should be fairly intuitive to understand: red > orange > yellow > green > blue - -These colors are also present in the cells containing the name of each asset. You'll see each asset's name in alphabetical order from top to bottom and left to right, with its most recent day's market cap rank in parentheses. - -![](nameorganization.png) - -If the average of the most recent full day's activity for that asset has been high (for the eight metrics combined), then the name should show as red or orange. Alternatively, if the most recent full day's activity for that asset has been low, you'll see the coin's name in blue or green. Yellow would be an average day in reference to the eight metrics combined. - -Additionally, on the 'Detailed' and 'Anomalies' tabs alike, four percentages appear beneath each asset’s name. Reading left to right, they show the 1-day, 7-day, 30-day, and 90-day price percentage changes. Note that the color of each percentage is based on the price returned for that interval, compared to the average of all other coins on the Activity Matrix. So if it's green, it's overperforming compared to other assets. If it's yellow, it's neutral. If it's red, it's underperforming. For example, the 7-day % for Chainlink(image below) is showing +38% in solid green, meaning it is performing better than almost every other coin based on 7-day percentages. - -![](chainlinkexample.png) - -Having price data can be extremely important, as sometimes an asset gets hot before its price has pumped while other times it gets hot because the price has pumped. The scenario where a price hasn't yet reacted to a hot metric usually provides a better opportunity for a trade. - -### The Eight Key Metrics - -![](column1.png) - -Let us examine the eight key metrics we track and the reasons each matters for future price movement. Please note that not every asset reports all eight; most do, but any missing value will appear as a blank (white) square. - -[Active Addresses](https://academy.santiment.net/metrics/active-addresses-24h): The amount of unique addresses interacting on the coin's network. Red squares indicating high address activity show that there is a rising amount of various individuals on the sending or receiving side of transactions, and rising utility is a necessary ingredient for long-term market cap growth. - -[Network Growth](https://academy.santiment.net/metrics/network-growth/): The amount of new addresses created on the coin's network. Similar to Active Addresses, red squares indicating high Network Growth imply that there are more opportunities for rising utility in the future. Simply put, more new existing addresses means more possibilities for transactions to take place. - -[Whale Transaction Count 100k+ USD](https://academy.santiment.net/metrics/whale-transaction-count/): The amount of transactions that exceed $100K in value. Red squares indicating high amounts of whale transactions for that day are an indication that major key stakeholders are taking interest in the asset at an increasing rate. Yes, this can mean that whales could be selling off. But more commonly, a rising amount of large valued transactions means that there is increased interest in the asset overall from a group of traders that can cause an asset's price to rise quickly. - -[$100K-$1M Supply Held](https://academy.santiment.net/metrics/supply-distribution/#our-supply-distribution-metrics): The percentage of the overall available supply of a coin that is held by wallets with ~$100K-$1M worth of the asset. This metric can work hand in hand with Whale Transactions. If there is a rising amount of $100K+ transactions AND a red square indicates that the supply held from this key tier of investors is rising, that is a sure sign that they key stakeholders are accumulating. Note that the asterisk next to this metric means that changing prices could mean that whales holding 100K-1M when the asset costs $2, may actually eventually turn into the $1M-$10M tier instead if the asset's value becomes $20. Look for new model updates from the team that reflect updated prices every few months and/or years. - -[Social Dominance](https://academy.santiment.net/metrics/social-dominance): The only social metric among these eight metrics, social dominance measures the overall percentage of discussion related to an asset when combining chats on Twitter, Reddit, Telegram, and 4Chan. Generally, more long-term discussion about the asset is good. A red square indicating a rise in discussion rate shows that there is increased trader interest. That being said, understand that this metric can also occasionally be useful as a caution flag. If you see rising social dominance BECAUSE an asset has been surging in value, this is a sign of FOMO. So for Social Dominance in particular, pay attention to the price percentage changes of the asset relative to the model's other assets before getting too excited about a red square. - -[Exchange Inflow/Outflow](https://academy.santiment.net/metrics/exchange-funds-flow): The net difference between coins moving on to known exchanges vs. off of known exchanges. A red square reflecting that coins are moving off of exchanges can be very helpful, especially in cases where prices have already been rising, because it means traders are content with moving more coins into self custody instead of selling them off. Alternatively, a blue square (particularly when prices have been rising) indicates that many coins are suddenly moving on to exchanges and a local top is much more common due to a likely sell-off from many traders. - -[Mean Dollar Invested Age](https://academy.santiment.net/metrics/mean-coin-age): The average age in which coins have sat in their respective wallets across a coin's network. A red square indicates that the Mean Dollar Invested Age curve is moving down, which if given enough time, can be interpreted as validation of the coin being in a(n) (at least small) bull run. Alternatively, when coins are stagnant and continuing to "collect dust" in their same wallets, this prevents a healthy amount of utility and circulation that is typically necessary for market caps to grow. - -[Age Consumed](https://academy.santiment.net/metrics/age-consumed): Similar to Mean Dollar Invested age, this metric looks at the amount of coins moved multiplied by the "age" in which they had been sitting prior to being moved. In short, a red square reflects that a large amount of coins (which had previously been stagnant) have suddenly moved for the first time in a long time. This is generally a bullish sign, as it means that a network just received a healthy amount of coins that can now be moved back into regular circulation, theoretically bolstering the network's overall activity. - -### The Anomolies Tab - -The anomolies tab is an alternative view that simplifies things if the massive array of different colors aren't your thing. The 'Anomolies' tab, shown below, displays all squares in yellow UNLESS the metric for that day is an extreme outlier. In other words, only the top 3 days(shown in red) or bottom 3 days(shown in blue), compared to the asset's past 3 months of data, will be visible. This view can make it much easier to quickly find assets of interest. - -![](anomolieview.png) - -### The Top 10 Tab - -If you want to get straight to the point of seeing which assets are doing best amongst different categories on the Activity Matrix model, look no further than the 'Top 10' tab. Here, you will see the 10 best performing coins on the model according to each price change interval, as well as the most recent day's current metric ranking (compared to each coin's 3-month average) for each metric. - -![](top10tab.png) - -This can be tremendously handy, and may even be your preferred way of viewing the data on this model. Want to know which coins are having the highest spikes in whale transactions vs. their 3-month averages? Look no further than the Top 10 list on this tab. - -You will see the price percentage changes next to the coin's name for the price change leaderboards. And within each of the eight metric ranking leaderboards, you will see the coin's most recent full day's ranking for that metric. For example, if you see "1" this shows that the coin in question is having it's best reading of that metric in the last 3 months. - -There is an 'Overall Average Rank' leaderboard on the far right of this 'Top 10' tab. It averages the rankings of all eight metrics together to indicate which coins have the best overall 'Hot' rankings. - -### Loading Data - -When you open the file, you will have to load the data. During loading times, you'll see how much data the model has left to load, as well as any individual coin and metric data errors coming in from the API. These errors will be rare and generally minor, but they are inevitable. So keep in mind that there is nothing wrong with your file when it does happen. Usually it's due to Google Sheets timing out temporarily when trying to retrieve a specific asset's data. If the square reaches 100%, it should turn green. If the progress bar lingers between 97 and 99 % without advancing, you may safely consider the load as complete. The stall may occur because certain metrics for certain assets are occationaly switched active or inactive on the Santiment API. - -![](loading.png) - -With the massive amount of data needing to be pulled, a new load takes roughly 10-15 minutes for a paid Google Suite email address. If you are on a free Google Suite plan, the API data will stop loading after 6 minutes, and there is no way around this. If you can't get around this limitation, we made a convenient [Mini Activity Matrix](https://docs.google.com/spreadsheets/d/1o3WJQCVn5wz66c33B8NZHQPf7epOSwHVAaf9iN3SrFk/view) that has 20 of the most followed assets, which should take less than the maximum 6 minutes of time that a free Google Suite account allows. It will have 20 assets instead of 100+. - -### Refreshing Data - -Google Sheets doesn't exactly allow a simple browser refresh to make the Santiment API reset with new and fresh data every day. Here's the easiest method to refresh: - -Go to the Data tab and hit the 'Backspace' button on your keyboard while highlighting cell A1, wait 1 minute, then hit the Undo button or type '=TODAY+1' and hit the 'Enter' button on your keyboard. - -![](datarefreshhowto.png) - -Due to Google Sheets limitations, there could be trouble refreshing on certain days. To force a refresh if the above step doesn't work, copy the browser URL of your spreadsheet, close the tab on your browser, wait at least 10 seconds, and then paste the URL back in your browser and hit 'Enter' on your keyboard to "hard reload" the spreadsheet. - -Note that this model has daily metrics, so there should be no need to refresh this model more than once per day. With the massive amount of data needing to be pulled, a refresh takes roughly 10-15 minutes for a paid Google Suite email address. If you are on a free Google Suite plan, the API data will stop loading after 6 minutes, and there is no way around this. If you can't get around this limitation, we made a convenient [Mini Activity Matrix](https://docs.google.com/spreadsheets/d/1o3WJQCVn5wz66c33B8NZHQPf7epOSwHVAaf9iN3SrFk/view) that has 20 of the most followed assets, which should take less than the maximum 6 minutes of time that a free Google Suite account allows. It will have 20 assets instead of 100+. - -## Disclaimer - -Trading is, of course, at your own risk. This model simply presents provides you the data necessary for you to make the most informed decisions for your own strategy. diff --git a/src/docs/sansheets/assets-correlation-matrix-google-sheets/index.md b/src/docs/sansheets/assets-correlation-matrix-google-sheets/index.md deleted file mode 100644 index 3761a04e9..000000000 --- a/src/docs/sansheets/assets-correlation-matrix-google-sheets/index.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: How to Create a Correlation Matrix -author: Yura Zatsepin ---- - -In this article, we will demonstrate the power and ease of using Google Sheets Integration with Santiment data. You will learn how to create a correlation matrix similar to the one on Cryptowatch.io, with the added bonus of being able to create a correlation matrix for not only the top 20 assets but for any crypto assets. - -> In the world of finance, correlation is a statistical measure of how two assets move in relation to each other. - -> Simply put, correlation tells us whether two cryptocurrencies move in the same or the opposite direction, or even behave entirely independent of each other. - -> If used properly, coin correlation can elevate your trading in more ways than one. Investing in uncorrelated assets, for example, will help hedge your portfolio and mitigate risk. If you’re not sure where Bitcoin’s headed next and want to protect yourself against losses, taking a position in uncorrelated coins can (in theory) diversify your exposure in case of market correction. - -> On the other hand, trading highly correlated assets is more of a risk-on strategy that some may use to amplify their returns. Even during a bull run, Bitcoin rarely does more than +15% in a week. However, mid-cap alts that tend to mirror BTC’s price action could well explode within the same time frame. - -To create your own correlation matrix, you need to complete 3 steps: - -1. Fetch pricing data for the last 7 days (if you want to see the correlation for the last 7 days) -2. Calculate the correlation coefficient -3. Organize a clear visualization for the resulting matrix - -[You can view the full sample here](https://docs.google.com/spreadsheets/d/1UcgTvueFeDtv9k2xb2zwFLXtsAnUzy1JsN0KIHvC40I/edit?usp=sharing) - -## How to Fetch Pricing Data - -Fetching pricing data is simple using SAN functions in the formula field. Enter the following formula: - -``` -=SAN_PRICES("bitcoin", TODAY() - 7, TODAY()) -``` - -This function will automatically populate the last 7 days of Bitcoin's USD price and trading volume, as shown below: - -![](how-to-fetch-financial-data.png) - -## How to Calculate Correlations - -Google Sheets has a built-in function for calculating the Pearson Correlation: -```=CORREL()``` - -To calculate the Pearson Coefficient for Bitcoin and Ethereum, simply select the cells with BTC price data (in our case, C7:C13) and the cells with Ethereum price data (G7:G13) within the `=CORREL()` function, as shown below: - -![](how-to-calculate-correl.png) - -## Create an Effective Visualization - -We recommend using the following matrix structure for better visualization. You can refer to the image below. - -![](make-a-nice-matrix.png) - -> To create a more visually appealing correlation result, consider rounding the numbers to two decimal places. For example, change 0.034343434 to 0.03. -> -> You can achieve this by using the built-in feature shown in the image below. -> -> ![](how-to-increase-decimals.png) - ---- - -Using Sansheets (Google Sheets Integration of Santiment data) is a convenient and flexible way to conduct your own research based on on-chain, social, and financial data without the need for Python or Julia code. The sample for this article was created in just 10 minutes. - -[View the final sample here](https://docs.google.com/spreadsheets/d/1UcgTvueFeDtv9k2xb2zwFLXtsAnUzy1JsN0KIHvC40I/edit?usp=sharing) diff --git a/src/docs/sansheets/functions/index.md b/src/docs/sansheets/functions/index.md deleted file mode 100644 index 90fa58cbd..000000000 --- a/src/docs/sansheets/functions/index.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Functions We Offer -author: Santiment Team -date: 2023-03-31 ---- - -# Content - -## [On-Chain Data Functions](/sansheets/functions/onchain/) - -## [Social Data Functions](/sansheets/functions/social/) - -## [XRPL-related Data Functions](/sansheets/functions/xrp/) diff --git a/src/docs/sansheets/functions/onchain/index.md b/src/docs/sansheets/functions/onchain/index.md deleted file mode 100644 index e12716135..000000000 --- a/src/docs/sansheets/functions/onchain/index.md +++ /dev/null @@ -1,2884 +0,0 @@ ---- -title: Onchain Data Functions -author: Santiment Team -date: 2023-03-31 ---- - -## SAN_ACTIVE_ADDRESSES - -##### SAN_ACTIVE_ADDRESSES(projectSlug, from, to, interval) ⇒ Array - -Returns the active addresses for the specified asset, during a given time interval. -Active Addresses" refers to the number of unique addresses that -participated in transactions on a blockchain. - -- **Kind**: global function -- **Returns**: Array - of active addresses. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_ACTIVE_ADDRESSES_24H - -##### SAN_ACTIVE_ADDRESSES_24H(projectSlug, from, to, interval) ⇒ Array - -Returns the active addresses for the specified asset, during a given time interval. -Active Addresses" refers to the number of unique addresses that -participated in transactions on a blockchain. - -- **Kind**: global function -- **Returns**: Array - of active addresses for the last 24 hours. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_ACTIVE_ADDRESSES_24H_AGGREGATED - -##### SAN_ACTIVE_ADDRESSES_24H_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the active addresses for the specified asset, during a given time interval. -Active Addresses" refers to the number of unique addresses that -participated in transactions on a blockchain. - -- **Kind**: global function -- **Returns**: number - of aggregated active addresses for the last 24 hours. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_ACTIVE_ADDRESSES_24H_MULTIPLE_SLUGS - -##### SAN_ACTIVE_ADDRESSES_24H_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the active addresses for the specified asset, during a given time interval. -Active Addresses" refers to the number of unique addresses that -participated in transactions on a blockchain. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -active addresses for the last 24 hours. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_ACTIVE_ADDRESSES_AGGREGATED - -##### SAN_ACTIVE_ADDRESSES_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the active addresses for the specified asset, during a given time interval. -Active Addresses" refers to the number of unique addresses that -participated in transactions on a blockchain. - -- **Kind**: global function -- **Returns**: number - of aggregated active addresses. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_ACTIVE_ADDRESSES_MULTIPLE_SLUGS - -##### SAN_ACTIVE_ADDRESSES_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the active addresses for the specified asset, during a given time interval. -Active Addresses" refers to the number of unique addresses that -participated in transactions on a blockchain. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -active addresses. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_ACTIVE_DEPOSITS - -##### SAN_ACTIVE_DEPOSITS(projectSlug, from, to, interval) ⇒ Array - -Returns number of unique deposit addresses that have been active for a project. - -- **Kind**: global function -- **Returns**: Array - of deposit address numbers. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_ACTIVE_DEPOSITS_AGGREGATED - -##### SAN_ACTIVE_DEPOSITS_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns number of unique deposit addresses that have been active for a project. - -- **Kind**: global function -- **Returns**: number - of aggregated deposit address numbers. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_ACTIVE_DEPOSITS_MULTIPLE_SLUGS - -##### SAN_ACTIVE_DEPOSITS_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns number of unique deposit addresses that have been active for a project. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -deposit address numbers. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_AGE_DESTROYED - -##### SAN_AGE_DESTROYED(projectSlug, from, to, interval) ⇒ Array - -Returns the token's age destroyed - -- **Kind**: global function -- **Returns**: Array - of age destroyed values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_AGE_DESTROYED_AGGREGATED - -##### SAN_AGE_DESTROYED_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the token's age destroyed - -- **Kind**: global function -- **Returns**: number - of aggregated age destroyed values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_AGE_DESTROYED_MULTIPLE_SLUGS - -##### SAN_AGE_DESTROYED_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the token's age destroyed - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -age destroyed values. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_ALL_PROJECTS - -##### SAN_ALL_PROJECTS() ⇒ Array - -Returns an array of all assets for which Santiment has data. -Each asset record includes: ticker, name, slug, price in USD, market cap in USD, -volume in USD, USD balance, ETH balance, ETH spent in the last 30 days, -ETH spent in the last 7 days, ETH spent in the last day. - -- **Kind**: global function -- **Returns**: Array - of all projects. -- **Customfunction**: - -## SAN_BITMEX_PERPETUAL_CONTRACT_FUNDING_RATE - -##### SAN_BITMEX_PERPETUAL_CONTRACT_FUNDING_RATE(projectSlug, from, to, interval) ⇒ Array - -Returns the funding rates that are paid by one of the sides of the perpetual contract to the other - -- **Kind**: global function -- **Returns**: Array - of the funding rates that are paid by one of the sides of the perpetual contract to the other -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_BITMEX_PERPETUAL_CONTRACT_FUNDING_RATE_AGGREGATED - -##### SAN_BITMEX_PERPETUAL_CONTRACT_FUNDING_RATE_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the funding rates that are paid by one of the sides of the perpetual contract to the other - -- **Kind**: global function -- **Returns**: number - of aggregated the funding rates that are paid by one of the sides of the perpetual contract to the other -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_BITMEX_PERPETUAL_CONTRACT_FUNDING_RATE_MULTIPLE_SLUGS - -##### SAN_BITMEX_PERPETUAL_CONTRACT_FUNDING_RATE_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the funding rates that are paid by one of the sides of the perpetual contract to the other - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the funding rates that are paid by one of the sides of the perpetual contract to the other -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_BITMEX_PERPETUAL_OPEN_INTEREST - -##### SAN_BITMEX_PERPETUAL_OPEN_INTEREST(projectSlug, from, to, interval) ⇒ Array - -Returns the amount of open perpetual contracts currently on Bitmex's -Project Ticker / USD trading pairs. When open interest reaches unusually high numbers, -it can precede increased volatility in the coin’s price. - -- **Kind**: global function -- **Returns**: Array - of the amount of open perpetual contracts. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_BITMEX_PERPETUAL_OPEN_INTEREST_AGGREGATED - -##### SAN_BITMEX_PERPETUAL_OPEN_INTEREST_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the amount of open perpetual contracts currently on Bitmex's -Project Ticker / USD trading pairs. When open interest reaches unusually high numbers, -it can precede increased volatility in the coin’s price. - -- **Kind**: global function -- **Returns**: number - of aggregated the amount of open perpetual contracts. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_BITMEX_PERPETUAL_OPEN_INTEREST_MULTIPLE_SLUGS - -##### SAN_BITMEX_PERPETUAL_OPEN_INTEREST_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the amount of open perpetual contracts currently on Bitmex's -Project Ticker / USD trading pairs. When open interest reaches unusually high numbers, -it can precede increased volatility in the coin’s price. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the amount of open perpetual contracts. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_DAILY_AVG_MARKETCAP - -##### SAN_DAILY_AVG_MARKETCAP(projectSlug, from, to, currency, interval) ⇒ Array - -Returns the daily average marketcap. - -- **Kind**: global function -- **Returns**: Array - of daily average marketcaps. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_DAILY_AVG_MARKETCAP_AGGREGATED - -##### SAN_DAILY_AVG_MARKETCAP_AGGREGATED(projectSlug, from, to, currency, aggregation) ⇒ number - -Returns the daily average marketcap. - -- **Kind**: global function -- **Returns**: number - of aggregated daily average marketcaps. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_DAILY_AVG_MARKETCAP_MULTIPLE_SLUGS - -##### SAN_DAILY_AVG_MARKETCAP_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, interval) ⇒ Array - -Returns the daily average marketcap. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -daily average marketcaps. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_DAILY_CLOSING_MARKETCAP - -##### SAN_DAILY_CLOSING_MARKETCAP(projectSlug, from, to, currency, interval) ⇒ Array - -Returns the daily closing marketcap. - -- **Kind**: global function -- **Returns**: Array - of daily closing marketcaps. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_DAILY_CLOSING_MARKETCAP_AGGREGATED - -##### SAN_DAILY_CLOSING_MARKETCAP_AGGREGATED(projectSlug, from, to, currency, aggregation) ⇒ number - -Returns the daily closing marketcap. - -- **Kind**: global function -- **Returns**: number - of aggregated daily closing marketcaps. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_DAILY_CLOSING_MARKETCAP_MULTIPLE_SLUGS - -##### SAN_DAILY_CLOSING_MARKETCAP_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, interval) ⇒ Array - -Returns the daily closing marketcap. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -daily closing marketcaps. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_DAILY_CLOSING_PRICE - -##### SAN_DAILY_CLOSING_PRICE(projectSlug, day) ⇒ number - -Returns the closing price for a given day. - -- **Kind**: global function -- **Returns**: number - closing price. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| day | date | The date to fetch the data. Example: DATE(2018, 9, 20) | - -## SAN_DAILY_DEPOSIT_TRANSACTIONS - -##### SAN_DAILY_DEPOSIT_TRANSACTIONS(projectSlug, from, to, interval) ⇒ Array - -Returns number of withdrawal transactions. - -- **Kind**: global function -- **Returns**: Array - of number of withdrawal transactions. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_DAILY_DEPOSIT_TRANSACTIONS_AGGREGATED - -##### SAN_DAILY_DEPOSIT_TRANSACTIONS_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns number of withdrawal transactions. - -- **Kind**: global function -- **Returns**: number - of aggregated number of withdrawal transactions. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_DAILY_DEPOSIT_TRANSACTIONS_MULTIPLE_SLUGS - -##### SAN_DAILY_DEPOSIT_TRANSACTIONS_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns number of withdrawal transactions. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -number of withdrawal transactions. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_DAILY_WITHDRAWAL_TRANSACTIONS - -##### SAN_DAILY_WITHDRAWAL_TRANSACTIONS(projectSlug, from, to, interval) ⇒ Array - -Returns number of withdrawal transactions. - -- **Kind**: global function -- **Returns**: Array - of number of withdrawal transactions. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_DAILY_WITHDRAWAL_TRANSACTIONS_AGGREGATED - -##### SAN_DAILY_WITHDRAWAL_TRANSACTIONS_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns number of withdrawal transactions. - -- **Kind**: global function -- **Returns**: number - of aggregated number of withdrawal transactions. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_DAILY_WITHDRAWAL_TRANSACTIONS_MULTIPLE_SLUGS - -##### SAN_DAILY_WITHDRAWAL_TRANSACTIONS_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns number of withdrawal transactions. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -number of withdrawal transactions. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_DEPOSIT_TRANSACTIONS_BY_EXCHANGE - -##### SAN_DEPOSIT_TRANSACTIONS_BY_EXCHANGE(projectSlug, from, to, owner, interval) ⇒ Array - -Returns the deposit transactions for a slug in a specific exchange - -- **Kind**: global function -- **Returns**: Array - exchange inflow values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| owner | string | Name of the exchange | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_DEPOSIT_TRANSACTIONS_INTRADAY - -##### SAN_DEPOSIT_TRANSACTIONS_INTRADAY(projectSlug, from, to, interval) ⇒ Array - -Returns number of withdrawal transactions with the option of smaller intervals. - -- **Kind**: global function -- **Returns**: Array - of number of withdrawal transactions with the option of smaller intervals. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_DEPOSIT_TRANSACTIONS_INTRADAY_AGGREGATED - -##### SAN_DEPOSIT_TRANSACTIONS_INTRADAY_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns number of withdrawal transactions with the option of smaller intervals. - -- **Kind**: global function -- **Returns**: number - of aggregated number of withdrawal transactions with the option of smaller intervals. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_DEPOSIT_TRANSACTIONS_INTRADAY_MULTIPLE_SLUGS - -##### SAN_DEPOSIT_TRANSACTIONS_INTRADAY_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns number of withdrawal transactions with the option of smaller intervals. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -number of withdrawal transactions with the option of smaller intervals. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_DEV_ACTIVITY - -##### SAN_DEV_ACTIVITY(projectSlug, from, to) ⇒ Array - -Returns a list of dev activity for a given slug and time interval. - -- **Kind**: global function -- **Returns**: Array - of dev activity. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | - -## SAN_EMERGING_TRENDS - -##### SAN_EMERGING_TRENDS(size, from, to) ⇒ Array - -Returns list of emerging trends and their corresponding trend score. - -- **Kind**: global function -- **Returns**: Array - of trending words and their score. -- **Customfunction**: - -| Param | Type | Description | -| ----- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| size | number | An integer showing how many words should be included in the top list (max 100). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | - -## SAN_ERC20_PROJECTS - -##### SAN_ERC20_PROJECTS() ⇒ Array - -Returns an array of all ERC20 assets for which Santiment has data. -Each asset record includes: ticker, name, slug, price in USD, market cap in USD, -volume in USD, USD balance, ETH balance, ETH spent in the last 30 days, -ETH spent in the last 7 days, ETH spent in the last day and main contract address. - -- **Kind**: global function -- **Returns**: Array - of all ERC20 projects. -- **Customfunction**: - -## SAN_ETH_SPENT_OVER_TIME - -##### SAN_ETH_SPENT_OVER_TIME(projectSlug, from, to) ⇒ Array - -Returns ETH spent for each interval from the project's team wallet and time period - -- **Kind**: global function -- **Returns**: Array - of the ETH, that was spent over a given period of time -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | - -## SAN_ETH_TOP_TRANSACTIONS - -##### SAN_ETH_TOP_TRANSACTIONS(projectSlug, from, to, limit, transactionType) ⇒ Array - -Returns top ETH transactions for project's team wallets. - -- **Kind**: global function -- **Returns**: Array - of top transactions -- **Customfunction**: - -| Param | Type | Description | -| --------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| limit | number | The limit of transactions to be shown. | -| transactionType | string | Available transaction types: ALL, IN, OUT | - -## SAN_EXCHANGE_BALANCE - -##### SAN_EXCHANGE_BALANCE(projectSlug, from, to, interval) ⇒ Array - -Returns the exchange balance. - -- **Kind**: global function -- **Returns**: Array - of exchange balances. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_EXCHANGE_BALANCE_AGGREGATED - -##### SAN_EXCHANGE_BALANCE_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the exchange balance. - -- **Kind**: global function -- **Returns**: number - of aggregated exchange balances. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_EXCHANGE_BALANCE_BY_EXCHANGE - -##### SAN_EXCHANGE_BALANCE_BY_EXCHANGE(projectSlug, from, to, owner, interval) ⇒ Array - -Returns the exchange balance for a slug in a specific exchange - -- **Kind**: global function -- **Returns**: Array - exchange inflow values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| owner | string | Name of the exchange | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_EXCHANGE_BALANCE_MULTIPLE_SLUGS - -##### SAN_EXCHANGE_BALANCE_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the exchange balance. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -exchange balances. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_EXCHANGE_FUNDS_FLOW - -##### SAN_EXCHANGE_FUNDS_FLOW(projectSlug, from, to) ⇒ Array - -Returns the difference between the tokens that were deposited minus -the tokens that were withdrawn from an exchange for a given slug and time interval. - -- **Kind**: global function -- **Returns**: Array - of token deposit/withdraw differences. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | - -## SAN_EXCHANGE_INFLOW - -##### SAN_EXCHANGE_INFLOW(projectSlug, from, to, interval) ⇒ Array - -Returns the exchange inflow. - -- **Kind**: global function -- **Returns**: Array - of exchange inflows. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_EXCHANGE_INFLOW_AGGREGATED - -##### SAN_EXCHANGE_INFLOW_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the exchange inflow. - -- **Kind**: global function -- **Returns**: number - of aggregated exchange inflows. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_EXCHANGE_INFLOW_BY_EXCHANGE - -##### SAN_EXCHANGE_INFLOW_BY_EXCHANGE(projectSlug, from, to, owner, interval) ⇒ Array - -Returns the exchange inflow for a slug in a specific exchange - -- **Kind**: global function -- **Returns**: Array - exchange inflow values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| owner | string | Name of the exchange | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_EXCHANGE_INFLOW_MULTIPLE_SLUGS - -##### SAN_EXCHANGE_INFLOW_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the exchange inflow. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -exchange inflows. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_EXCHANGE_OUTFLOW - -##### SAN_EXCHANGE_OUTFLOW(projectSlug, from, to, interval) ⇒ Array - -Returns the exchange outflow. - -- **Kind**: global function -- **Returns**: Array - of exchange outflows. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_EXCHANGE_OUTFLOW_AGGREGATED - -##### SAN_EXCHANGE_OUTFLOW_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the exchange outflow. - -- **Kind**: global function -- **Returns**: number - of aggregated exchange outflows. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_EXCHANGE_OUTFLOW_BY_EXCHANGE - -##### SAN_EXCHANGE_OUTFLOW_BY_EXCHANGE(projectSlug, from, to, owner, interval) ⇒ Array - -Returns the exchange outflow for a slug in a specific exchange - -- **Kind**: global function -- **Returns**: Array - exchange inflow values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| owner | string | Name of the exchange | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_EXCHANGE_OUTFLOW_MULTIPLE_SLUGS - -##### SAN_EXCHANGE_OUTFLOW_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the exchange outflow. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -exchange outflows. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_EXCHANGE_PERCENT_OF_SUPPLY - -##### SAN_EXCHANGE_PERCENT_OF_SUPPLY(projectSlug, from, to, interval) ⇒ Array - -Returns exchange percent of total supply. - -- **Kind**: global function -- **Returns**: Array - of exchange percent of total supply. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_EXCHANGE_PERCENT_OF_SUPPLY_AGGREGATED - -##### SAN_EXCHANGE_PERCENT_OF_SUPPLY_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns exchange percent of total supply. - -- **Kind**: global function -- **Returns**: number - of aggregated exchange percent of total supply. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_EXCHANGE_PERCENT_OF_SUPPLY_MULTIPLE_SLUGS - -##### SAN_EXCHANGE_PERCENT_OF_SUPPLY_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns exchange percent of total supply. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -exchange percent of total supply. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_FUNCTIONS - -##### SAN_FUNCTIONS() ⇒ Array - -Returns all available functions. - -- **Kind**: global function -- **Returns**: Array - of function names. -- **Customfunction**: - -## SAN_FUNDING_RATE_BUSD - -##### SAN_FUNDING_RATE_BUSD(projectSlug, from, to, fundingRateExchange, interval) ⇒ Array - -Returns the funding rates that are paid by one of the sides of the perpetual contract to the other (BUSD). - -- **Kind**: global function -- **Returns**: Array - of the funding rates that are paid by one of the sides of the perpetual contract to the other (BUSD). -- **Customfunction**: - -| Param | Type | Description | -| ------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| fundingRateExchange | string | The exchange platform, from which funding rates are fetched, BITMEX by default: "BITMEX" "BINANCE" "FTX" "DYDX" "BITFINEX" "DERIBIT" | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_FUNDING_RATE_BUSD_AGGREGATED - -##### SAN_FUNDING_RATE_BUSD_AGGREGATED(projectSlug, from, to, fundingRateExchange, aggregation) ⇒ number - -Returns the funding rates that are paid by one of the sides of the perpetual contract to the other (BUSD). - -- **Kind**: global function -- **Returns**: number - of aggregated the funding rates that are paid by one of the sides of the perpetual contract to the other (BUSD). -- **Customfunction**: - -| Param | Type | Description | -| ------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| fundingRateExchange | string | The exchange platform, from which funding rates are fetched, BITMEX by default: "BITMEX" "BINANCE" | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_FUNDING_RATE_BUSD_MULTIPLE_SLUGS - -##### SAN_FUNDING_RATE_BUSD_MULTIPLE_SLUGS(projectSlugsList, from, to, fundingRateExchange, interval) ⇒ Array - -Returns the funding rates that are paid by one of the sides of the perpetual contract to the other (BUSD). - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the funding rates that are paid by one of the sides of the perpetual contract to the other (BUSD). -- **Customfunction**: - -| Param | Type | Description | -| ------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| fundingRateExchange | string | The exchange platform, from which funding rates are fetched, BITMEX by default: "BITMEX" "BINANCE" | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_FUNDING_RATE_USDT - -##### SAN_FUNDING_RATE_USDT(projectSlug, from, to, fundingRateExchange, interval) ⇒ Array - -Returns the funding rates that are paid by one of the sides of the perpetual contract to the other (USDT). - -- **Kind**: global function -- **Returns**: Array - of the funding rates that are paid by one of the sides of the perpetual contract to the other (USDT). -- **Customfunction**: - -| Param | Type | Description | -| ------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| fundingRateExchange | string | The exchange platform, from which funding rates are fetched, BITMEX by default: "BITMEX" "BINANCE" "FTX" "DYDX" "BITFINEX" "DERIBIT" | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_FUNDING_RATE_USDT_AGGREGATED - -##### SAN_FUNDING_RATE_USDT_AGGREGATED(projectSlug, from, to, fundingRateExchange, aggregation) ⇒ number - -Returns the funding rates that are paid by one of the sides of the perpetual contract to the other (USDT). - -- **Kind**: global function -- **Returns**: number - of aggregated the funding rates that are paid by one of the sides of the perpetual contract to the other (USDT). -- **Customfunction**: - -| Param | Type | Description | -| ------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| fundingRateExchange | string | The exchange platform, from which funding rates are fetched, BITMEX by default: "BITMEX" "BINANCE" | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_FUNDING_RATE_USDT_MULTIPLE_SLUGS - -##### SAN_FUNDING_RATE_USDT_MULTIPLE_SLUGS(projectSlugsList, from, to, fundingRateExchange, interval) ⇒ Array - -Returns the funding rates that are paid by one of the sides of the perpetual contract to the other (USDT). - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the funding rates that are paid by one of the sides of the perpetual contract to the other (USDT). -- **Customfunction**: - -| Param | Type | Description | -| ------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| fundingRateExchange | string | The exchange platform, from which funding rates are fetched, BITMEX by default: "BITMEX" "BINANCE" | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_GAS_USED - -##### SAN_GAS_USED(projectSlug, from, to) ⇒ Array - -Returns used Gas by a blockchain. -When you send tokens, interact with a contract or do anything else on the blockchain, -you must pay for that computation. That payment is calculated in Gas. - -- **Kind**: global function -- **Returns**: Array - of quantities of gas used. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | - -## SAN_GITHUB_ACTIVITY - -##### SAN_GITHUB_ACTIVITY(projectSlug, from, to) ⇒ Array - -Returns a list of github activity for a given slug and time interval. - -- **Kind**: global function -- **Returns**: Array - of github activity. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | - -## SAN_HISTORICAL_BALANCE - -##### SAN_HISTORICAL_BALANCE(projectSlug, from, to, address) ⇒ Array - -Returns the historical balance for a given ERC20 or ETH address. - -- **Kind**: global function -- **Returns**: Array - of balances. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| address | string | ERC20 or ETH address. | - -## SAN_HISTORICAL_BALANCE_DEDUP - -##### SAN_HISTORICAL_BALANCE_DEDUP(projectSlug, from, to, address) ⇒ Array - -Returns the historical balance for a given ERC20 or ETH address. - -- **Kind**: global function -- **Returns**: Array - of balances. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| address | string | ERC20 or ETH address. | - -## SAN_HISTORY_TWITTER_DATA - -##### SAN_HISTORY_TWITTER_DATA(projectSlug, from, to) ⇒ Array - -Returns the historical count of twitter followers. - -- **Kind**: global function -- **Returns**: Array - followers count over time. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | - -## SAN_HOLDERS_DISTRIBUTION - -##### SAN_HOLDERS_DISTRIBUTION(projectSlug, from, to, balance, interval) ⇒ Array - -Represents the total number of addresses holding the given amount of tokens. - -- **Kind**: global function -- **Returns**: Array - of total number of addresses holding the given amount of tokens. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| balance | string | Interval of amount of tokens. Available balance intervals are: "0-0.001", "0.001-0.01", "0.01-0.1", "0.1-1", "1-10", "10-100", "100-1k", "1k-10k", "10k-100k", "100k-1M", "1M-10M", "10M-100M", "100M-1B", "1B-inf", "total" | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_HOLDERS_DISTRIBUTION_AGGREGATED - -##### SAN_HOLDERS_DISTRIBUTION_AGGREGATED(projectSlug, from, to, balance, aggregation) ⇒ number - -Represents the total number of addresses holding the given amount of tokens. - -- **Kind**: global function -- **Returns**: number - of aggregated total number of addresses holding the given amount of tokens. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| balance | string | Interval of amount of tokens. Available balance intervals are: "0-0.001", "0.001-0.01", "0.01-0.1", "0.1-1", "1-10", "10-100", "100-1k", "1k-10k", "10k-100k", "100k-1M", "1M-10M", "10M-100M", "100M-1B", "1B-inf", "total" | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_HOLDERS_DISTRIBUTION_COMBINED_BALANCE - -##### SAN_HOLDERS_DISTRIBUTION_COMBINED_BALANCE(projectSlug, from, to, balance, interval) ⇒ Array - -Returns the number of tokens in a specific bucket. - -- **Kind**: global function -- **Returns**: Array - of the number of tokens in a specific bucket. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| balance | string | Interval of amount of tokens. Available balance intervals are: "0-0.001", "0.001-0.01", "0.01-0.1", "0.1-1", "1-10", "10-100", "100-1k", "1k-10k", "10k-100k", "100k-1M", "1M-10M", "10M-100M", "100M-1B", "1B-inf", "total" | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_HOLDERS_DISTRIBUTION_COMBINED_BALANCE_AGGREGATED - -##### SAN_HOLDERS_DISTRIBUTION_COMBINED_BALANCE_AGGREGATED(projectSlug, from, to, balance, aggregation) ⇒ number - -Returns the number of tokens in a specific bucket. - -- **Kind**: global function -- **Returns**: number - of aggregated the number of tokens in a specific bucket. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| balance | string | Interval of amount of tokens. Available balance intervals are: "0-0.001", "0.001-0.01", "0.01-0.1", "0.1-1", "1-10", "10-100", "100-1k", "1k-10k", "10k-100k", "100k-1M", "1M-10M", "10M-100M", "100M-1B", "1B-inf", "total" | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_HOLDERS_DISTRIBUTION_COMBINED_BALANCE_MULTIPLE_SLUGS - -##### SAN_HOLDERS_DISTRIBUTION_COMBINED_BALANCE_MULTIPLE_SLUGS(projectSlugsList, from, to, balance, interval) ⇒ Array - -Returns the number of tokens in a specific bucket. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the number of tokens in a specific bucket. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| balance | string | Interval of amount of tokens. Available balance intervals are: "0-0.001", "0.001-0.01", "0.01-0.1", "0.1-1", "1-10", "10-100", "100-1k", "1k-10k", "10k-100k", "100k-1M", "1M-10M", "10M-100M", "100M-1B", "1B-inf", "total" | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_HOLDERS_DISTRIBUTION_MULTIPLE_SLUGS - -##### SAN_HOLDERS_DISTRIBUTION_MULTIPLE_SLUGS(projectSlugsList, from, to, balance, interval) ⇒ Array - -Represents the total number of addresses holding the given amount of tokens. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -total number of addresses holding the given amount of tokens. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| balance | string | Interval of amount of tokens. Available balance intervals are: "0-0.001", "0.001-0.01", "0.01-0.1", "0.1-1", "1-10", "10-100", "100-1k", "1k-10k", "10k-100k", "100k-1M", "1M-10M", "10M-100M", "100M-1B", "1B-inf", "total" | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_LATEST_PRICE - -##### SAN_LATEST_PRICE(projectSlug, currency) ⇒ number - -Returns the latest price for a given asset in a desired currency. - -- **Kind**: global function -- **Returns**: number - latest price. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| currency | string | The currency in which the data should be presented. Either "USD" or "BTC". | - -## SAN_MARKETCAP - -##### SAN_MARKETCAP(projectSlug, from, to, currency, interval) ⇒ Array - -Returns the marketcap for a slug. - -- **Kind**: global function -- **Returns**: Array - of the slug's marketcap. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_MARKETCAP_AGGREGATED - -##### SAN_MARKETCAP_AGGREGATED(projectSlug, from, to, currency, aggregation) ⇒ number - -Returns the marketcap for a slug. - -- **Kind**: global function -- **Returns**: number - of aggregated the slug's marketcap. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_MARKETCAP_MULTIPLE_SLUGS - -##### SAN_MARKETCAP_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, interval) ⇒ Array - -Returns the marketcap for a slug. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the slug's marketcap. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_MEAN_AGE - -##### SAN_MEAN_AGE(projectSlug, from, to, interval) ⇒ Array - -Returns the token's mean age. - -- **Kind**: global function -- **Returns**: Array - of mean age values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_MEAN_AGE_AGGREGATED - -##### SAN_MEAN_AGE_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the token's mean age. - -- **Kind**: global function -- **Returns**: number - of aggregated mean age values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_MEAN_AGE_MULTIPLE_SLUGS - -##### SAN_MEAN_AGE_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the token's mean age. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -mean age values. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_MEAN_DOLLAR_INVESTED_AGE - -##### SAN_MEAN_DOLLAR_INVESTED_AGE(projectSlug, from, to, interval) ⇒ Array - -Returns the token's mean dollar invested age. - -- **Kind**: global function -- **Returns**: Array - of mean dollar invested age values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_MEAN_DOLLAR_INVESTED_AGE_AGGREGATED - -##### SAN_MEAN_DOLLAR_INVESTED_AGE_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the token's mean dollar invested age. - -- **Kind**: global function -- **Returns**: number - of aggregated mean dollar invested age values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_MEAN_DOLLAR_INVESTED_AGE_MULTIPLE_SLUGS - -##### SAN_MEAN_DOLLAR_INVESTED_AGE_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the token's mean dollar invested age. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -mean dollar invested age values. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_MEAN_REALIZED_PRICE - -##### SAN_MEAN_REALIZED_PRICE(projectSlug, from, to, currency, timeBound, interval) ⇒ Array - -Returns the mean realized price. - -- **Kind**: global function -- **Returns**: Array - of mean realized prices. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years or days. | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_MEAN_REALIZED_PRICE_AGGREGATED - -##### SAN_MEAN_REALIZED_PRICE_AGGREGATED(projectSlug, from, to, currency, timeBound, aggregation) ⇒ number - -Returns the mean realized price. - -- **Kind**: global function -- **Returns**: number - of aggregated mean realized prices. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_MEAN_REALIZED_PRICE_MULTIPLE_SLUGS - -##### SAN_MEAN_REALIZED_PRICE_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, timeBound, interval) ⇒ Array - -Returns the mean realized price. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -mean realized prices. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_MINERS_BALANCE - -##### SAN_MINERS_BALANCE(projectSlug, from, to) ⇒ Array - -Returns miners balances over time -Currently only ETH is supported. - -- **Kind**: global function -- **Returns**: Array - of balances. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | - -## SAN_MINING_POOLS_DISTRIBUTION - -##### SAN_MINING_POOLS_DISTRIBUTION(projectSlug, from, to) ⇒ Array - -Returns the distribution of miners between mining pools. -What part of the miners are using top3, top10 and all the other pools. -Currently only ETH is supported. - -- **Kind**: global function -- **Returns**: Array - of distribution ratios. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | - -## SAN_MVRV_LONG_SHORT_DIFF - -##### SAN_MVRV_LONG_SHORT_DIFF(projectSlug, from, to, currency, interval) ⇒ Array - -Returns the difference between MVRV. - -- **Kind**: global function -- **Returns**: Array - of MVRV differences. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_MVRV_LONG_SHORT_DIFF_AGGREGATED - -##### SAN_MVRV_LONG_SHORT_DIFF_AGGREGATED(projectSlug, from, to, currency, aggregation) ⇒ number - -Returns the difference between MVRV. - -- **Kind**: global function -- **Returns**: number - of aggregated MVRV differences. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_MVRV_LONG_SHORT_DIFF_MULTIPLE_SLUGS - -##### SAN_MVRV_LONG_SHORT_DIFF_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, interval) ⇒ Array - -Returns the difference between MVRV. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -MVRV differences. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_MVRV_RATIO - -##### SAN_MVRV_RATIO(projectSlug, from, to, currency, timeBound, interval) ⇒ Array - -Returns MVRV(Market-Value-to-Realized-Value). - -- **Kind**: global function -- **Returns**: Array - of MVRV ratios. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years or days. | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_MVRV_RATIO_AGGREGATED - -##### SAN_MVRV_RATIO_AGGREGATED(projectSlug, from, to, currency, timeBound, aggregation) ⇒ number - -Returns MVRV(Market-Value-to-Realized-Value). - -- **Kind**: global function -- **Returns**: number - of aggregated MVRV ratios. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_MVRV_RATIO_INTRADAY - -##### SAN_MVRV_RATIO_INTRADAY(projectSlug, from, to, timeBound, interval) ⇒ Array - -Returns MVRV(Market-Value-to-Realized-Value) with the option of smaller intervals. - -- **Kind**: global function -- **Returns**: Array - of MVRV ratios with the option of smaller intervals. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years or days. | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_MVRV_RATIO_INTRADAY_AGGREGATED - -##### SAN_MVRV_RATIO_INTRADAY_AGGREGATED(projectSlug, from, to, timeBound, aggregation) ⇒ number - -Returns MVRV(Market-Value-to-Realized-Value) with the option of smaller intervals. - -- **Kind**: global function -- **Returns**: number - of aggregated MVRV ratios with the option of smaller intervals. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_MVRV_RATIO_INTRADAY_MULTIPLE_SLUGS - -##### SAN_MVRV_RATIO_INTRADAY_MULTIPLE_SLUGS(projectSlugsList, from, to, timeBound, interval) ⇒ Array - -Returns MVRV(Market-Value-to-Realized-Value) with the option of smaller intervals. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -MVRV ratios with the option of smaller intervals. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_MVRV_RATIO_MULTIPLE_SLUGS - -##### SAN_MVRV_RATIO_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, timeBound, interval) ⇒ Array - -Returns MVRV(Market-Value-to-Realized-Value). - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -MVRV ratios. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_MVRV_Z_SCORE - -##### SAN_MVRV_Z_SCORE(projectSlug, from, to, interval) ⇒ Array - -Returns the MVRV Z score. - -- **Kind**: global function -- **Returns**: Array - of the MVRV Z score. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_MVRV_Z_SCORE_AGGREGATED - -##### SAN_MVRV_Z_SCORE_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the MVRV Z score. - -- **Kind**: global function -- **Returns**: number - of aggregated the MVRV Z score. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_MVRV_Z_SCORE_MULTIPLE_SLUGS - -##### SAN_MVRV_Z_SCORE_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the MVRV Z score. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the MVRV Z score. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_NETWORK_GROWTH - -##### SAN_NETWORK_GROWTH(projectSlug, from, to, interval) ⇒ Array - -Returns the token's network growth - -- **Kind**: global function -- **Returns**: Array - of network growth. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_NETWORK_GROWTH_AGGREGATED - -##### SAN_NETWORK_GROWTH_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the token's network growth - -- **Kind**: global function -- **Returns**: number - of aggregated network growth. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_NETWORK_GROWTH_MULTIPLE_SLUGS - -##### SAN_NETWORK_GROWTH_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the token's network growth - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -network growth. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_NETWORK_PROFIT_LOSS - -##### SAN_NETWORK_PROFIT_LOSS(projectSlug, from, to, interval) ⇒ Array - -Returns the network's profit/loss. - -- **Kind**: global function -- **Returns**: Array - of the network's profit/loss. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_NETWORK_PROFIT_LOSS_AGGREGATED - -##### SAN_NETWORK_PROFIT_LOSS_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the network's profit/loss. - -- **Kind**: global function -- **Returns**: number - of aggregated the network's profit/loss. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_NETWORK_PROFIT_LOSS_MULTIPLE_SLUGS - -##### SAN_NETWORK_PROFIT_LOSS_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the network's profit/loss. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the network's profit/loss. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_NVT_RATIO - -##### SAN_NVT_RATIO(projectSlug, from, to, interval) ⇒ Array - -Returns NVT (Network-Value-to-Transactions-Ratio Daily Market Cap / Daily Token Circulation) -Since Daily Transaction Volume gets rather noisy and easy to manipulate -by transferring the same tokens through a couple of addresses repeatedly, -it’s not an ideal measure of a network’s economic activity. That’s why we also -offer another way to calculate NVT by using Daily Token Circulation. -This method filters out excess transactions and provides a cleaner overview of a blockchain’s -daily transaction throughput. - -- **Kind**: global function -- **Returns**: Array - of NVT ratios -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_NVT_RATIO_AGGREGATED - -##### SAN_NVT_RATIO_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns NVT (Network-Value-to-Transactions-Ratio Daily Market Cap / Daily Token Circulation) -Since Daily Transaction Volume gets rather noisy and easy to manipulate -by transferring the same tokens through a couple of addresses repeatedly, -it’s not an ideal measure of a network’s economic activity. That’s why we also -offer another way to calculate NVT by using Daily Token Circulation. -This method filters out excess transactions and provides a cleaner overview of a blockchain’s -daily transaction throughput. - -- **Kind**: global function -- **Returns**: number - of aggregated NVT ratios -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_NVT_RATIO_MULTIPLE_SLUGS - -##### SAN_NVT_RATIO_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns NVT (Network-Value-to-Transactions-Ratio Daily Market Cap / Daily Token Circulation) -Since Daily Transaction Volume gets rather noisy and easy to manipulate -by transferring the same tokens through a couple of addresses repeatedly, -it’s not an ideal measure of a network’s economic activity. That’s why we also -offer another way to calculate NVT by using Daily Token Circulation. -This method filters out excess transactions and provides a cleaner overview of a blockchain’s -daily transaction throughput. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -NVT ratios -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_OHLC - -##### SAN_OHLC(projectSlug, from, to) ⇒ Array - -Returns the open, high, low, and close price values for the specified asset, -during a given time interval. - -- **Kind**: global function -- **Returns**: Array - of open, high, low, and close price values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | - -## SAN_PRICE - -##### SAN_PRICE(projectSlug, from, to, currency, interval) ⇒ Array - -Returns the prices for the slug in the given time period. - -- **Kind**: global function -- **Returns**: Array - of the prices for the slug in the given time period. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_PRICE_ABSOLUTE_CHANGE - -##### SAN_PRICE_ABSOLUTE_CHANGE(projectSlug, from, to) ⇒ number - -Returns the absolute price change for the specified asset, during a given time interval. - -- **Kind**: global function -- **Returns**: number - absolute price change. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | - -## SAN_PRICE_AGGREGATED - -##### SAN_PRICE_AGGREGATED(projectSlug, from, to, currency, aggregation) ⇒ number - -Returns the prices for the slug in the given time period. - -- **Kind**: global function -- **Returns**: number - of aggregated the prices for the slug in the given time period. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_PRICE_MULTIPLE_SLUGS - -##### SAN_PRICE_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, interval) ⇒ Array - -Returns the prices for the slug in the given time period. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the prices for the slug in the given time period. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_PRICE_PERCENT_CHANGE - -##### SAN_PRICE_PERCENT_CHANGE(projectSlug, from, to) ⇒ number - -Returns the percent price change for the specified asset, during a given time interval. - -- **Kind**: global function -- **Returns**: number - price change in percent. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | - -## SAN_PRICE_VOLUME - -##### SAN_PRICE_VOLUME(projectSlug, from, to, interval) ⇒ Array - -Returns the prices for the specified asset, during a given time interval. - -- **Kind**: global function -- **Returns**: Array - of prices. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_PRICE_VOLUME_DIFF - -##### SAN_PRICE_VOLUME_DIFF(currency, projectSlug, from, to) ⇒ Array - -Returns the price-volume difference technical indicator for a given asset, -currency and time interval. This indicator measures the difference in trend between price and volume, -specifically when price goes up as volume goes down. Currency can be displayed in either USD or BTC. - -- **Kind**: global function -- **Returns**: Array - of price-volume difference technical indicator. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| currency | string | The currency in which the data should be presented. Either "USD" or "BTC". | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | - -## SAN_PRICES - -##### SAN_PRICES(projectSlug, from, to, interval) ⇒ Array - -Returns the prices for the specified asset, during a given time interval. - -- **Kind**: global function -- **Returns**: Array - of prices. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_PROJECT_FUNDAMENTALS - -##### SAN_PROJECT_FUNDAMENTALS(projectSlug) ⇒ Array - -Fetch fundamentals for a specified project. - -- **Kind**: global function -- **Returns**: Array - of project details. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | - -## SAN_REALIZED_VALUE - -##### SAN_REALIZED_VALUE(projectSlug, from, to, currency, timeBound, interval) ⇒ Array - -Returns Realized value - sum of the acquisition costs of an asset located in a wallet. -The realized value across the whole network is computed by summing the realized values -of all wallets holding tokens at the moment. - -- **Kind**: global function -- **Returns**: Array - of realized values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years or days. | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_REALIZED_VALUE_AGGREGATED - -##### SAN_REALIZED_VALUE_AGGREGATED(projectSlug, from, to, currency, timeBound, aggregation) ⇒ number - -Returns Realized value - sum of the acquisition costs of an asset located in a wallet. -The realized value across the whole network is computed by summing the realized values -of all wallets holding tokens at the moment. - -- **Kind**: global function -- **Returns**: number - of aggregated realized values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_REALIZED_VALUE_MULTIPLE_SLUGS - -##### SAN_REALIZED_VALUE_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, timeBound, interval) ⇒ Array - -Returns Realized value - sum of the acquisition costs of an asset located in a wallet. -The realized value across the whole network is computed by summing the realized values -of all wallets holding tokens at the moment. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -realized values. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_REVERSE - -##### SAN_REVERSE(array) ⇒ Array - -Returns the reversed array of the results - -- **Kind**: global function -- **Returns**: Array - of reversed results -- **Customfunction**: - -| Param | Type | Description | -| ----- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| array | array | The array of results | - -## SAN_TOKEN_AGE_CONSUMED - -##### SAN_TOKEN_AGE_CONSUMED(projectSlug, from, to) ⇒ Array - -Returns amount of tokens changing addresses, multiplied by the number of blocks -created on the blockchain since they last moved. -Spikes are signal of a large amount of tokens moving after being idle for an extended period of time. - -Grouping by interval works by summing all records in the interval. - -- **Kind**: global function -- **Returns**: Array - of token age consumed numbers. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | - -## SAN_TOKEN_CIRCULATION - -##### SAN_TOKEN_CIRCULATION(projectSlug, from, to, timeBound, interval) ⇒ Array - -Returns token circulation for a given slug and time interval. - -- **Kind**: global function -- **Returns**: Array - of token circulation values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years or days. | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_TOKEN_CIRCULATION_AGGREGATED - -##### SAN_TOKEN_CIRCULATION_AGGREGATED(projectSlug, from, to, timeBound, aggregation) ⇒ number - -Returns token circulation for a given slug and time interval. - -- **Kind**: global function -- **Returns**: number - of aggregated token circulation values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_TOKEN_CIRCULATION_MULTIPLE_SLUGS - -##### SAN_TOKEN_CIRCULATION_MULTIPLE_SLUGS(projectSlugsList, from, to, timeBound, interval) ⇒ Array - -Returns token circulation for a given slug and time interval. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -token circulation values. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| timeBound | string | The metric is calculated only by taking into account the tokens/coins that have moved in the past number of years/days. | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_TOKEN_TOP_TRANSACTIONS - -##### SAN_TOKEN_TOP_TRANSACTIONS(projectSlug, from, to, limit) ⇒ Array - -Returns top token transactions for a given slug - -- **Kind**: global function -- **Returns**: Array - of top transactions -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| limit | number | The limit of transactions to be shown. | - -## SAN_TOP_HOLDERS_HELD_OFF_EXCHANGE - -##### SAN_TOP_HOLDERS_HELD_OFF_EXCHANGE(projectSlug, from, to, interval) ⇒ Array - -Returns the amount of coins/tokens held only by the non exchange top holders. - -- **Kind**: global function -- **Returns**: Array - of amount of coins/tokens held only by the top holders. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_TOP_HOLDERS_HELD_ON_EXCHANGE - -##### SAN_TOP_HOLDERS_HELD_ON_EXCHANGE(projectSlug, from, to, interval) ⇒ Array - -Returns the amount of coins/tokens held only by the exchange top holders. - -- **Kind**: global function -- **Returns**: Array - of amount of coins/tokens held only by the top holders. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_TOP_HOLDERS_HELD_OVERALL - -##### SAN_TOP_HOLDERS_HELD_OVERALL(projectSlug, from, to, interval) ⇒ Array - -Returns the amount of coins/tokens held by the top holders. - -- **Kind**: global function -- **Returns**: Array - of amount of coins/tokens held by the top holders. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_TOP_HOLDERS_PERCENT_OF_TOTAL_SUPPLY - -##### SAN_TOP_HOLDERS_PERCENT_OF_TOTAL_SUPPLY(projectSlug, from, to, numberOfHolders) ⇒ Array - -Returns the top holders' percent of total supply - in exchanges, outside exchanges and combined. - -- **Kind**: global function -- **Returns**: Array - followers count over time. -- **Customfunction**: - -| Param | Type | Description | -| --------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| numberOfHolders | number | Take top number of holders into account when calculating. | - -## SAN_TRADING_VOLUME - -##### SAN_TRADING_VOLUME(projectSlug, from, to, currency, interval) ⇒ Array - -Returns the slug's trading volume. - -- **Kind**: global function -- **Returns**: Array - of the slugs's trading volume. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_TRADING_VOLUME_AGGREGATED - -##### SAN_TRADING_VOLUME_AGGREGATED(projectSlug, from, to, currency, aggregation) ⇒ number - -Returns the slug's trading volume. - -- **Kind**: global function -- **Returns**: number - of aggregated the slugs's trading volume. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_TRADING_VOLUME_MULTIPLE_SLUGS - -##### SAN_TRADING_VOLUME_MULTIPLE_SLUGS(projectSlugsList, from, to, currency, interval) ⇒ Array - -Returns the slug's trading volume. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the slugs's trading volume. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| currency | string | The metric is calculated using a currency of choice. Available currencies: USD | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_TRANSACTION_VOLUME - -##### SAN_TRANSACTION_VOLUME(projectSlug, from, to, interval) ⇒ Array - -Gets the transaction volume for the specified asset, during a given time interval. -Transaction Volume" refers to the total number of tokens within all -transfers that have occurred on a blockchain. - -- **Kind**: global function -- **Returns**: Array - of transaction volumes. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_TRANSACTION_VOLUME_AGGREGATED - -##### SAN_TRANSACTION_VOLUME_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Gets the transaction volume for the specified asset, during a given time interval. -Transaction Volume" refers to the total number of tokens within all -transfers that have occurred on a blockchain. - -- **Kind**: global function -- **Returns**: number - of aggregated transaction volumes. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_TRANSACTION_VOLUME_LOSS - -##### SAN_TRANSACTION_VOLUME_LOSS(projectSlug, from, to, interval) ⇒ Array - -Returns the transaction volume in loss. - -- **Kind**: global function -- **Returns**: Array - of the transaction volume in loss. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_TRANSACTION_VOLUME_LOSS_AGGREGATED - -##### SAN_TRANSACTION_VOLUME_LOSS_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the transaction volume in loss. - -- **Kind**: global function -- **Returns**: number - of aggregated the transaction volume in loss. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_TRANSACTION_VOLUME_LOSS_MULTIPLE_SLUGS - -##### SAN_TRANSACTION_VOLUME_LOSS_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the transaction volume in loss. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the transaction volume in loss. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_TRANSACTION_VOLUME_MULTIPLE_SLUGS - -##### SAN_TRANSACTION_VOLUME_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Gets the transaction volume for the specified asset, during a given time interval. -Transaction Volume" refers to the total number of tokens within all -transfers that have occurred on a blockchain. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -transaction volumes. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_TRANSACTION_VOLUME_PROFIT - -##### SAN_TRANSACTION_VOLUME_PROFIT(projectSlug, from, to, interval) ⇒ Array - -Returns the transaction volume in profit. - -- **Kind**: global function -- **Returns**: Array - of the transaction volume in profit. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_TRANSACTION_VOLUME_PROFIT_AGGREGATED - -##### SAN_TRANSACTION_VOLUME_PROFIT_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the transaction volume in profit. - -- **Kind**: global function -- **Returns**: number - of aggregated the transaction volume in profit. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_TRANSACTION_VOLUME_PROFIT_LOSS_RATIO - -##### SAN_TRANSACTION_VOLUME_PROFIT_LOSS_RATIO(projectSlug, from, to, interval) ⇒ Array - -Returns the ratio between transaction volume in profit and transaction volume in loss. - -- **Kind**: global function -- **Returns**: Array - of the ratio between transaction volume in profit and transaction volume in loss. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_TRANSACTION_VOLUME_PROFIT_LOSS_RATIO_AGGREGATED - -##### SAN_TRANSACTION_VOLUME_PROFIT_LOSS_RATIO_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the ratio between transaction volume in profit and transaction volume in loss. - -- **Kind**: global function -- **Returns**: number - of aggregated the ratio between transaction volume in profit and transaction volume in loss. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_TRANSACTION_VOLUME_PROFIT_LOSS_RATIO_MULTIPLE_SLUGS - -##### SAN_TRANSACTION_VOLUME_PROFIT_LOSS_RATIO_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the ratio between transaction volume in profit and transaction volume in loss. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the ratio between transaction volume in profit and transaction volume in loss. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_TRANSACTION_VOLUME_PROFIT_MULTIPLE_SLUGS - -##### SAN_TRANSACTION_VOLUME_PROFIT_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the transaction volume in profit. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the transaction volume in profit. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_VELOCITY - -##### SAN_VELOCITY(projectSlug, from, to, interval) ⇒ Array - -Returns the token's velocity. - -- **Kind**: global function -- **Returns**: Array - of token velocity values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_VELOCITY_AGGREGATED - -##### SAN_VELOCITY_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the token's velocity. - -- **Kind**: global function -- **Returns**: number - of aggregated token velocity values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_VELOCITY_MULTIPLE_SLUGS - -##### SAN_VELOCITY_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the token's velocity. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -token velocity values. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_VOLUME - -##### SAN_VOLUME(projectSlug, from, to, interval) ⇒ Array - -Returns the slug's transaction volume. - -- **Kind**: global function -- **Returns**: Array - of the slug's transaction volume. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_VOLUME_AGGREGATED - -##### SAN_VOLUME_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the slug's transaction volume. - -- **Kind**: global function -- **Returns**: number - of aggregated the slug's transaction volume. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_VOLUME_MULTIPLE_SLUGS - -##### SAN_VOLUME_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the slug's transaction volume. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the slug's transaction volume. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_WHALE_TRANSACTION_COUNT - -##### SAN_WHALE_TRANSACTION_COUNT(projectSlug, from, to, interval) ⇒ Array - -Returns the number of transactions transferring more than 100k USD. - -- **Kind**: global function -- **Returns**: Array - of the number of transactions transferring more than 100k USD. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_WHALE_TRANSACTION_COUNT_AGGREGATED - -##### SAN_WHALE_TRANSACTION_COUNT_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the number of transactions transferring more than 100k USD. - -- **Kind**: global function -- **Returns**: number - of aggregated the number of transactions transferring more than 100k USD. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_WHALE_TRANSACTION_COUNT_MULTIPLE_SLUGS - -##### SAN_WHALE_TRANSACTION_COUNT_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns the number of transactions transferring more than 100k USD. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the number of transactions transferring more than 100k USD. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_WITHDRAWAL_TRANSACTIONS_BY_EXCHANGE - -##### SAN_WITHDRAWAL_TRANSACTIONS_BY_EXCHANGE(projectSlug, from, to, owner, interval) ⇒ Array - -Returns the withdrawal transactions for a slug in a specific exchange - -- **Kind**: global function -- **Returns**: Array - exchange inflow values. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| owner | string | Name of the exchange | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_WITHDRAWAL_TRANSACTIONS_INTRADAY - -##### SAN_WITHDRAWAL_TRANSACTIONS_INTRADAY(projectSlug, from, to, interval) ⇒ Array - -Returns number of withdrawal transactions with the option of smaller intervals. - -- **Kind**: global function -- **Returns**: Array - of number of withdrawal transactions with the option of smaller intervals. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_WITHDRAWAL_TRANSACTIONS_INTRADAY_AGGREGATED - -##### SAN_WITHDRAWAL_TRANSACTIONS_INTRADAY_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns number of withdrawal transactions with the option of smaller intervals. - -- **Kind**: global function -- **Returns**: number - of aggregated number of withdrawal transactions with the option of smaller intervals. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_WITHDRAWAL_TRANSACTIONS_INTRADAY_MULTIPLE_SLUGS - -##### SAN_WITHDRAWAL_TRANSACTIONS_INTRADAY_MULTIPLE_SLUGS(projectSlugsList, from, to, interval) ⇒ Array - -Returns number of withdrawal transactions with the option of smaller intervals. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -number of withdrawal transactions with the option of smaller intervals. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m"| diff --git a/src/docs/sansheets/functions/social/index.md b/src/docs/sansheets/functions/social/index.md deleted file mode 100644 index 047db1a48..000000000 --- a/src/docs/sansheets/functions/social/index.md +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: Social Data Functions -author: Santiment Team -date: 2023-03-31 ---- - -## SAN_PROJECT_SOCIAL_DATA - -##### SAN_PROJECT_SOCIAL_DATA(projectSlug) ⇒ Array - -Returns social data for a specified project. - -- **Kind**: global function -- **Returns**: Array - of project's social data. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset at sanbase, which can be found at the end of the URL (eg. the Santiment URL is https://app.santiment.net/projects/santiment, so the projectSlug would be santiment). | - -## SAN_SOCIAL_DOMINANCE - -##### SAN_SOCIAL_DOMINANCE(projectSlug, from, to, source, interval) ⇒ Array - -Returns the social dominance for a slug. - -- **Kind**: global function -- **Returns**: Array - of the slug's social dominance. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_SOCIAL_DOMINANCE_AGGREGATED - -##### SAN_SOCIAL_DOMINANCE_AGGREGATED(projectSlug, from, to, source, aggregation) ⇒ number - -Returns the social dominance for a slug. - -- **Kind**: global function -- **Returns**: number - of aggregated the slug's social dominance. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_SOCIAL_DOMINANCE_MULTIPLE_SLUGS - -##### SAN_SOCIAL_DOMINANCE_MULTIPLE_SLUGS(projectSlugsList, from, to, source, interval) ⇒ Array - -Returns the social dominance for a slug. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the slug's social dominance. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_SOCIAL_VOLUME - -##### SAN_SOCIAL_VOLUME(projectSlug, from, to, source, interval) ⇒ Array - -Returns the social volume for a slug. - -- **Kind**: global function -- **Returns**: Array - of the slug's social volume. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_SOCIAL_VOLUME_AGGREGATED - -##### SAN_SOCIAL_VOLUME_AGGREGATED(projectSlug, from, to, source, aggregation) ⇒ number - -Returns the social volume for a slug. - -- **Kind**: global function -- **Returns**: number - of aggregated the slug's social volume. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_SOCIAL_VOLUME_MULTIPLE_SLUGS - -##### SAN_SOCIAL_VOLUME_MULTIPLE_SLUGS(projectSlugsList, from, to, source, interval) ⇒ Array - -Returns the social volume for a slug. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the slug's social volume. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_SOCIAL_VOLUME_PROJECTS - -##### SAN_SOCIAL_VOLUME_PROJECTS() ⇒ Array - -Returns a list of project slugs for which there is social volume data. - -- **Kind**: global function -- **Returns**: Array - of social volume projects. -- **Customfunction**: - - -## SAN_WEIGHTED_SOCIAL_SENTIMENT - -##### SAN_WEIGHTED_SOCIAL_SENTIMENT(projectSlug, from, to, source, interval) ⇒ Array - -Returns the weighted social sentiment for a slug. - -- **Kind**: global function -- **Returns**: Array - of the slug's weighted social sentiment. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_WEIGHTED_SOCIAL_SENTIMENT_AGGREGATED - -##### SAN_WEIGHTED_SOCIAL_SENTIMENT_AGGREGATED(projectSlug, from, to, source, aggregation) ⇒ number - -Returns the weighted social sentiment for a slug. - -- **Kind**: global function -- **Returns**: number - of aggregated the slug's weighted social sentiment. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_WEIGHTED_SOCIAL_SENTIMENT_MULTIPLE_SLUGS - -##### SAN_WEIGHTED_SOCIAL_SENTIMENT_MULTIPLE_SLUGS(projectSlugsList, from, to, source, interval) ⇒ Array - -Returns the weighted social sentiment for a slug. - -- **Kind**: global function -- **Returns**: Array - of results for multiple slugs -the slug's weighted social sentiment. -- **Customfunction**: - -| Param | Type | Description | -| ---------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlugsList | string | Comma-separated names of the assets, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment,bitcoin". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| source | string | The source of mention counts, one of the following: "TELEGRAM_CHATS_OVERVIEW", "TELEGRAM_DISCUSSION_OVERVIEW", "TWITTER_CHATS_OVERVIEW", "REDDIT_COMMENTS_OVERVIEW", "TOTAL" | -| interval | string | The resolution with which the data is fetched. Example: "5m" \ No newline at end of file diff --git a/src/docs/sansheets/functions/xrp/index.md b/src/docs/sansheets/functions/xrp/index.md deleted file mode 100644 index 526af7b2d..000000000 --- a/src/docs/sansheets/functions/xrp/index.md +++ /dev/null @@ -1,312 +0,0 @@ ---- -title: XRPL-related Data Functions -author: Santiment Team -date: 2023-03-31 ---- - -## SAN_ACTIVE_ADDRESSES_60D - -##### SAN_ACTIVE_ADDRESSES_60D(projectSlug, from, to, interval) ⇒ Array - -Returns the active addresses in the last 60 days. - -- **Kind**: global function -- **Returns**: Array - of the active addresses in the last 60 days. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_ACTIVE_ADDRESSES_60D_AGGREGATED - -##### SAN_ACTIVE_ADDRESSES_60D_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the active addresses in the last 60 days. - -- **Kind**: global function -- **Returns**: number - of aggregated the active addresses in the last 60 days. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_ACTIVE_ADDRESSES_90D - -##### SAN_ACTIVE_ADDRESSES_90D(projectSlug, from, to, interval) ⇒ Array - -Returns the active addresses in the last 90 days. - -- **Kind**: global function -- **Returns**: Array - of the active addresses in the last 90 days. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_ACTIVE_ADDRESSES_90D_AGGREGATED - -##### SAN_ACTIVE_ADDRESSES_90D_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the active addresses in the last 90 days. - -- **Kind**: global function -- **Returns**: number - of aggregated the active addresses in the last 90 days. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_DAILY_ASSETS_ISSUED - -##### SAN_DAILY_ASSETS_ISSUED(projectSlug, from, to, interval) ⇒ Array - -Returns the daily issued assets. - -- **Kind**: global function -- **Returns**: Array - of the daily issued assets. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_DAILY_ASSETS_ISSUED_AGGREGATED - -##### SAN_DAILY_ASSETS_ISSUED_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the daily issued assets. - -- **Kind**: global function -- **Returns**: number - of aggregated the daily issued assets. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - - -## SAN_DAILY_TRUSTLINES_COUNT_CHANGE - -##### SAN_DAILY_TRUSTLINES_COUNT_CHANGE(projectSlug, from, to, interval) ⇒ Array - -Returns the daily trustlines count change. - -- **Kind**: global function -- **Returns**: Array - of the daily trustlines count change. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_DAILY_TRUSTLINES_COUNT_CHANGE_AGGREGATED - -##### SAN_DAILY_TRUSTLINES_COUNT_CHANGE_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the daily trustlines count change. - -- **Kind**: global function -- **Returns**: number - of aggregated the daily trustlines count change. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_DEX_VOLUME_IN_USD_INTRADAY - -##### SAN_DEX_VOLUME_IN_USD_INTRADAY(projectSlug, from, to, interval) ⇒ Array - -Returns the DEX volume in USD. - -- **Kind**: global function -- **Returns**: Array - of the DEX volume in USD. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_DEX_VOLUME_IN_USD_INTRADAY_AGGREGATED - -##### SAN_DEX_VOLUME_IN_USD_INTRADAY_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the DEX volume in USD. - -- **Kind**: global function -- **Returns**: number - of aggregated the DEX volume in USD. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_DEX_VOLUME_IN_XRP_INTRADAY - -##### SAN_DEX_VOLUME_IN_XRP_INTRADAY(projectSlug, from, to, interval) ⇒ Array - -Returns the DEX volume in XRP. - -- **Kind**: global function -- **Returns**: Array - of the DEX volume in XRP. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_DEX_VOLUME_IN_XRP_INTRADAY_AGGREGATED - -##### SAN_DEX_VOLUME_IN_XRP_INTRADAY_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the DEX volume in XRP. - -- **Kind**: global function -- **Returns**: number - of aggregated the DEX volume in XRP. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_TOTAL_ASSETS_ISSUED - -##### SAN_TOTAL_ASSETS_ISSUED(projectSlug, from, to, interval) ⇒ Array - -Returns the total issued assets. - -- **Kind**: global function -- **Returns**: Array - of the total issued assets. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_TOTAL_ASSETS_ISSUED_AGGREGATED - -##### SAN_TOTAL_ASSETS_ISSUED_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the total issued assets. - -- **Kind**: global function -- **Returns**: number - of aggregated the total issued assets. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_TOTAL_TRUSTLINES_COUNT - -##### SAN_TOTAL_TRUSTLINES_COUNT(projectSlug, from, to, interval) ⇒ Array - -Returns the total trustlines count. - -- **Kind**: global function -- **Returns**: Array - of the total trustlines count. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_TOTAL_TRUSTLINES_COUNT_AGGREGATED - -##### SAN_TOTAL_TRUSTLINES_COUNT_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the total trustlines count. - -- **Kind**: global function -- **Returns**: number - of aggregated the total trustlines count. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | - -## SAN_TRANSACTIONS_COUNT - -##### SAN_TRANSACTIONS_COUNT(projectSlug, from, to, interval) ⇒ Array - -Returns the transactions count. - -- **Kind**: global function -- **Returns**: Array - of the transactions count. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| interval | string | The resolution with which the data is fetched. Example: "5m" | - -## SAN_TRANSACTIONS_COUNT_AGGREGATED - -##### SAN_TRANSACTIONS_COUNT_AGGREGATED(projectSlug, from, to, aggregation) ⇒ number - -Returns the transactions count. - -- **Kind**: global function -- **Returns**: number - of aggregated the transactions count. -- **Customfunction**: - -| Param | Type | Description | -| ----------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| projectSlug | string | Name of the asset, more info at https://academy.santiment.net/glossary/#slug. Example: "santiment". | -| from | date | The starting date to fetch the data. Example: DATE(2018, 9, 20) | -| to | date | The ending date to fetch the data. Example: DATE(2018, 9, 21) | -| aggregation | string | Aggregation for the timeseries metrics. Example: "LAST" | diff --git a/src/docs/sansheets/index.md b/src/docs/sansheets/index.md deleted file mode 100644 index d36eac709..000000000 --- a/src/docs/sansheets/index.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Sansheets - Crypto Asset Data for Google Sheets -author: Santiment Team -description: Access on-chain, social, development activity, prices, and volume data with Sansheets! ---- - -Access on-chain, social, development activity, prices, and volume data with Sansheets! - -## Getting Started - -- [Setting up Sansheets](/sansheets/setting-up/) -- [Adding an API key to Sansheets](/sansheets/adding-an-api-key/) -- [How to create a correlation matrix like Cryptowatch.io](/sansheets/assets-correlation-matrix-google-sheets/) -- [The Asset Activity Matrix](/sansheets/asset-activity-matrix) - -## API - -- [List of All Functions](/sansheets/functions/) - -## Pro Templates - -- [Descriptions for all Pro Templates](/sansheets/pro-templates/) - diff --git a/src/docs/sansheets/onboarding/index.md b/src/docs/sansheets/onboarding/index.md deleted file mode 100644 index cacd3e607..000000000 --- a/src/docs/sansheets/onboarding/index.md +++ /dev/null @@ -1,136 +0,0 @@ ---- -title: Sansheets Onboarding article -description: Learn all the necessary steps to get Sansheets up and running! -author: Santiment Team ---- - -> **Note**: In order to enable your computer and Google Sheets documents to use Sansheets, you must be a Sanbase Pro subscriber. If you are a free user, you may still view templates made by our staff and community members. But you will need to become a Pro member for our powerful Sansheets add-on to be a tool you can use yourself. - -Whether you are a data scientist, crypto hobbyist, or simply a trader and investor with very little data background, Sansheets offers a way to create and view interactive market models using Santiment's on-chain, social and project data. With our all-in-one Spreadsheets plugin, you can run trade simulations, backtest new strategies and add context to the behavior and volatility of the crypto market. There is no need to make your own data aggregations. We've prepared the groundwork for you. - -Through existing custom templates that our team and Sanfam have already created, or through your own creations, you can investigate network activity, discover market patterns, and analyze stakeholder behavior with our clean, reliable data streams for hundreds of digital assets. - -Whereas our Sanbase platform are mainly used to provide any cryptocurrency data you may want to access at the tip of your fingertips, Sansheets allows you to make use of this data and actually form public or private strategies to backtest with the full power of Google Sheets, and use them for your own trading any way you'd like. - -One of the best parts of Sansheets' integration with Google Sheets is that templates can be setup to auto-update data without any need to refresh or constantly re-input end dates for the model to pull data for. Simply end your date range with "TODAY()" and you'll receive data directly into your model as soon as it becomes available on Santiment. - -![](01_examplequery.png) - -The possibilities are pretty endless when it comes to what types of models can be created, and Santiment offers an array of 48 different functions to use for you to build any cryptocurrency model your heart desires. You can learn all about the Sansheets functions we have available, and how they work on our academy page: https://academy.santiment.net/sansheets/functions/ - -With the explanation out of the way, let's get into how to get you setup with Sansheets on. To get started and begin creating your own templates and models, follow these simple steps precisely: - -## Install and activate Sansheets - -1. Head over to https://docs.google.com/spreadsheets/u/0/ and ensure you are signed in with any existing Google account. - ![](02_signin.png) -2. Open a Blank Google Sheets template - ![](03_selectblacksheet.png) -3. Go to the **Add-Ons** dropdown and click **Get Add-Ons** - ![](04_getaddons.png) -4. You'll see a Google Sheets store open up. In the top right, you'll see a search bar. Simply enter "Santiment" here, then hit **Enter**. - ![](05_addons.png) -5. You will see the "Santiment Data" app come up as a result, click on the **+FREE** button to install Sansheets to your system: - ![](06_santimentdata.png) -6. After installation of the Sansheets add-on, you should see confirmation that it was installed successfully. Go to the **Add-Ons** tab, hover over the newly created **Santiment Data** menu, and click **Enable**. - ![](07_santimentdata2.png) - ![](08_santimentdataenable.png) -7. After a few seconds, you should see a confirmation message explaining that you are about to enable cryptocurrency data through Santiment custom functions. Click **Ok**. - ![](09_confirmation.png) - -## Create and add an API key - -8. With Sansheets now enabled, you simply need to provide your API key. This key is found by going to https://sheets.santiment.net and clicking on the **account icon** at the top right of your page. - ![](10_account-icon.png) -9. If you already have an API key active, you will see your key with a **copy button** to allow you to easily copy it. If one doesn't yet exist yet, simply click on the **Generate** button and then use the **copy button** to save it to your clipboard. - ![](11_apikey.png) -10. Head back to your Google Sheets page and go to Add-ons -> Santiment Data, and click on Add API Key. Paste your copied API key and click **Confirm**. - ![](12_addapikey.png) - -## The first call - -11. To test out your newly and fully enabled Sansheets add-on, type in **`=SAN`** and look to see if there is a dropdown of different function options to choose from. If you see them, then you are officially ready to enter Santiment formulas and begin creating your own models! - ![](13_sanequals.png) -12. Choose a cell and ensure there are 2-5 blank columns to the right of it (depending on the SAN formula you choose to input). You can select between any SAN formula available in the dropdown, or refer to the Sansheets academy page to find the perfect function to accomplish what you're trying to create: https://academy.santiment.net/sansheets/functions/. Once selected, enter it with an open parentheses afterwards, followed by the full name of the project's slug, a comma, then your start date as "`DATE(month,day, year)`", another comma, and your end date as "`DATE(month,day, year)`" OR "`TODAY()`" if you would like your model to auto-update to the current date. Then press enter. Eg, "`=SAN_OHLC("bitcoin",DATE(2015,2,1),TODAY())`" will give you the Open, High, Low, and Close prices of every day between February 1st, 2015 and the most recent Santiment data available. - ![](14_ohlc.png) - -Depending on how large your timeframe was, you will have to wait momentarily while seeing "Loading..." where you entered your formula. Once done, you will see the data you requested generate into the expanded rows and columns from your original cell. -![](15_ohlcresult.png) - -Note that you may also refer to our helpful Github Sansheets function repository to find additional info on functions to pull data for any of your favorite metrics: https://github.com/santiment/google-spreadsheet-addon/blob/master/doc/sheet_functions.md - -A nice feature with Sansheets that you won't see in traditional data models is the fact that you can direct it to auto-pull Santiment data on a daily basis without any action needed. Simply take a certain start date and enter it into your formula along with an end date of "`TODAY()`" and Sansheets will add an extra row of data to whatever metric you are directing Sansheets to pull from Santiment's extensive database. - -You have the option to make your insights public and provide access to any of your self-made templates with other members of the Santiment Team and Sanfam to collaborate and put great minds together to create a special profitable strategy for cryptocurrency investing. - -Congratulations on beginning your Sansheets adventures, and contact us at any time should you have questions or troubleshooting needs! - -## Using existing Sansheets templates - -When it comes to using existing Sansheets templates, many templates provided by the Santiment Team will have an "About" tab to explain the functionality. Regardless, here is a breakdown of a few of our featured "View Only" templates that we offer: - -### NVT Analysis - -The objective of the NVT Analysis template is to indicate how a given coin's token circulation looks at a given time compared to its market cap. Using trendlines over time on a monthly perspective, this is a great tool to indicate when markets are looking bearish to bullish.What you see here is: - -1. A set of NVT columns represented by five distinct colors ranging from bearish to bullish -2. Three lines representing the high, average, and low price of each respective month -3. Subtle, colored trendlines which help calculate -4. Hashmarks on the right of the latest displayed month showing what the daily NVT values have looked like within that month over the past 10 days - ![](16_nvt.png) - -In short, the main objective of this chart is to provide a macro look at whether the most recent month is getting enough token circulation (unique addresses exchanging tokens) to justify its current market cap. - -Tips: Look at the color of the far right most column and match to the color of the five circles at the bottom left of the legend. The color of the right-most column in this above screenshot, for example, is red, and therefore would be an indication that the markets are bearish. However, pay special attention to the hashmarks that represent the recent 10 days of NVT. If they are starting to look lower on the chart, which is the case in this example (particularly the "1 Day" hashmark, representing yesterday), then NVT may be starting to see a short-term turning point. If these hashmarks are sustained, then you'll notice the color of the monthly column begin to match the levels the new days of data are indicating. - -This model does have great backtest results, proving that the correlations between a given month's low, average, and high prices of a given month tend to veer toward negative with bearish signals, and undoubtedly positive when posting bullish signals. -![](17_nvtreturns.png) - -### Historical Timing Trends - -This model includes four different ways to measure the results of Bitcoin's market results based on various measurements of time (with other tokens to come in the future): - -1. Day of Week - Measures Bitcoin's price performance based on the seven days of the week. -2. Month - Measures Bitcoin's price performance based on each month out of the year. -3. Time of Month - Measures Bitcoin's price performance based on the early, early-mid, mid, late-mid, and late portions of months. -4. Year - Measures Bitcoin's price performance based on each individual year. - ![](18_dayofweek.png) - -Explore and use filters to find what kinds of trends may be beneficial to your trading strategies. - -### Thresholds Crossed - -Currently available for Bitcoin and Ethereum, the Thresholds Crossed model indicates just how many times (from a daily perspective) projects have crossed above or below different round levels historically. Getting a glance at which thresholds have been crossed most often will give you a great perspective of where support and resistance of a given project lies. -![](19_thresholdscrossed.png) - -### Daily Active Address Divergence - -Daily active addresses are a great way to measure network health and to get an idea of where prices may be headed based on how many daily active addresses are being created at a given time. We have a model that measures when there is a divergence between these active addresses and the movement of price. -![](20_daadivergence.png) -Watch for large, grouped signals of green to identify when price is undervalued compared to the amount of daily active addresses that are being created. And conversely, look for groups of red signals to find out when price is becoming overinflated. - -### Velocity Divergence - -Created with the same concept in mind as daily active address divergence, velocity divergence also has some upside by measuring the amount of volume being circulated compared to the supply of a token. -![](21_velocitydivergence.png) -As is the case with our Daily Active Addresses model, you want to look out for bunched signals of green or red to identify tops and bottoms of markets. - -### Top Holders Supply - -The top holders supply model provides our users with three ways to see what some key ERC-20 top holders are doing with their funds. This is a great way to get an idea of what may be foreshadowing in the markets, as these high capital holders have a great amount of leverage when it comes to what direction prices of a given project are heading next: -![](22_topholderssupply.png) - -1. Cumulative percent change in top holders - View what the top 1, 10, or 100 holders of a given project have been doing with their holdings over the previous 30 days by viewing their percentage added and removed from their addresses during this timeframe. -2. Big moves in top holders on a given day - As opposed to viewing what the total change has been in top holder bags over the past 30 days, this view isolates only particularly large moves on a given day by these top holders. -3. Percentage held by top holders - As some tokens are less diversified than others, this model shows the percentage of tokens held by the top holder addresses of a given project, with each bar showing one of the past four weeks (green being most recent). The higher the percent of the total supply these 10 addresses hold, the more influence they have on the prices based on their own buys and sells. - -![](23_topholders2.png) - -### Development Activity - -Projects that have consistently high development activity tend to reflect a higher degree and chance of longevity by those respective teams. Finding out when they particularly start to ramp up or wind down their rates of activity can be a great way to measure when it's a safe time to get in or bow out of an investment. -![](24_devactivity.png) - -This model highlights considerably high fluctuations in development activity for some notable projects. Spotting a big spike in development activity over a particular or series of days can be a great way to find entry points. - -Whatever types of metrics you are into, Sansheets is likely capable of creating the models for your area of study. You can also contact our staff, and we can see about collaborating on a project with you, as we are always interested in learning more about the markets in unique and interesting ways. Let us know if you'd like to try out Sansheets for two weeks free of charge, and we look forward to hearing your feedback! diff --git a/src/docs/sansheets/pro-templates/index.md b/src/docs/sansheets/pro-templates/index.md deleted file mode 100644 index b48b877da..000000000 --- a/src/docs/sansheets/pro-templates/index.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Sansheets Pro Templates -author: Brian Quinlivan ---- - -## The Perks of Being a Pro Subscriber on Sanbase - -As many of you know, Sanbase is a free-to-use platform for researching and studying on-chain and behavioral analytics in the crypto markets. However, there is a paid version called "Pro" that unlocks numerous features and models unavailable to our free users. Check out the [list of perks we offer to our Pro subscribers](https://app.santiment.net/pricing) and discover all the benefits that come with being an insider on our platform! - -One of these perks is access to our Sansheets plugin and the various templates we have built with it. This article will provide an overview of these templates. - -_In case you are already a Sanbase Pro subscriber and want to copy these templates for yourself, please [get in touch](mailto:support@santiment.net)._ - -## Maximal Mean Dollar Age Template - -This template visualizes the [Mean Dollar Age](https://insights.santiment.net/read/%F0%9F%93%A2-mean-age-653/) of Bitcoin, Ethereum, and various ERC20 coins in comparison to one another. - -Developed by Santiment, Mean Dollar Age calculates the average age of all dollars invested in acquiring a particular coin. This metric identifies accumulation and sell cycles for any coin, and identifying dips in Mean Dollar Age can serve as a novel bullish indicator. - -## Top Holders Template - -Crypto is still a whale's playground. [This template](https://insights.santiment.net/read/top-token-holders-and-their-role-as-leading-indicators-5618) monitors the behavior of the largest addresses holding Ethereum and various ERC-20 coins. - -The template includes a dozen views of top whales' behavior, such as balance changes, significant accumulation/sell-off events, and week-to-week adjustments to the total supply held. - -## NVT Template - -This template calculates the NVT for BTC, ETH, and several ERC-20 coins, and assigns a bullish or bearish value to their historical and present-day performance. - -The idea behind the NVT is simple - if the value transferred on the network (token circulation) is too low relative to the network's valuation (market cap), the asset should be considered overvalued and due for a correction. Conversely, if the value transferred on the network is too high compared to its current valuation, the NVT would deem the asset undervalued and ripe for a breakout. - -## Price-DAA Divergence Template - -We [have found](https://insights.santiment.net/read/price---daily-addresses-divergence%3A-%0Aa-primer-on-on-chain-trading-strategies-2222) that major differences in the coin's price and network activity trends can present opportune times to buy OR sell, depending on the trend's direction. - -This template triggers BUY and SELL signals for Bitcoin and Ethereum based on major divergences in price and the amount of daily addresses interacting with the coin. - -## Network Growth & Daily Active Addresses Template - -This template compares the network growth and daily active address percentage changes of Bitcoin, Ethereum, and other projects over time. Generally, many projects create new addresses at a similar percentage rate to one another as markets ebb and flow. Identifying which projects are creating new addresses and growing their network at a faster rate than their price is an excellent strategy to find buy-low opportunities. - -## MVRV and MVRV Long/Short Difference Ratio Template - -The MVRV ratio is calculated by dividing the market cap (market value or MV) by the realized cap (total realized value or RV). This ratio provides a reliable estimate of how overvalued or undervalued the current market cap is. - -In addition, we offer the MVRV Long/Short Difference comparison in this template to help visualize which projects are above or below their average line of profitable traders. If the ratio is above 0%, then on average, Ethereum holders will profit if they sell their coins now. If it is below 0%, then the average holder will realize a loss if they sell. - -## Velocity vs. Price Template - -Velocity is an underutilized method for researching the speed at which money circulates in the crypto economy. It is calculated by dividing a token's transaction volume (in USD) by its market cap (in USD). - -Similar to the Daily Active Addresses Template, this model helps visualize when tokens are being overbought or oversold based on the historical trends of its velocity metric. - -## Thresholds Crossed Template - -Understanding how many times the price of a project has moved above or below a round number USD value, or a psychological barrier, can provide valuable insights into the cyclical nature of the cryptocurrency markets. Those who believe that crossing above a certain level means "it will never fall back below again" can be shown just how often prices have reset time and time again. - -This template is excellent for understanding support levels and identifying price points where there is a significant push and pull, along with psychological polarization among traders. Utilizing this information can be advantageous in your trading strategy. - -## Most Profitable Days for Trading Cryptocurrency - -As [we've tested in the past](https://insights.santiment.net/read/backtesting-the-week%3A-which-days-are-best-for-trading-crypto%3F-1139), knowing which days have the best historical ROI can help reduce risk and craft effective market strategies. - -This template determines the best trading days (historically) for any coin in the Santiment database, with adjustable time ranges for Pro users. - -## Distribution Index - -[Our research](https://insights.santiment.net/read/314) has shown that distributed coins (supply dispersed among many addresses) tend to outperform concentrated coins (much of circulating supply held by 'whales'). This index calculates the top 10 most distributed and most concentrated ERC-20 coins (within the top 50) over the last month. - -## ETH-ERC20 Correlation Index - -[Our previous analysis](https://medium.com/santiment/eth-vs-erc-20-a-tale-of-two-market-caps-94b2aca58e5e) indicates that ERC-20 coins tend to be less correlated to Ethereum during bull markets and exhibit higher correlation during bear markets. This index charts the correlation of the ERC-20 market cap to the ETH market cap over the last 3 months. - -## Stablecoin Volatility Index - -Stablecoins may be more volatile than you think. This presents an interesting market opportunity, as one could potentially invest in low-volatility stablecoins and trade during outbreaks in their more volatile counterparts. - -This Santiment Index ranks the 15 largest stablecoins from most to least volatile over the past 30 days. - -## Least Correlated Coins to BTC & ETH - -According to our research, a portfolio of coins that are least correlated to both Bitcoin and Ethereum tends to perform particularly well during bull cycles. This index calculates the 20 least correlated coins to BTC & ETH over the past 30 days. - diff --git a/src/docs/sansheets/setting-up/index.md b/src/docs/sansheets/setting-up/index.md deleted file mode 100644 index 81e4cf4e0..000000000 --- a/src/docs/sansheets/setting-up/index.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Setting up Sansheets -description: Learn how to add Sansheets to your Google Sheets and start using it with ease. -author: Max Bartel ---- - -## Install Sansheets - -To add Sansheets to your Google Sheets, first open a spreadsheet. It can be a new one. You will find the option **`Get add-ons...`** in the top navigation under: - -![](01_add_addon.png) - -This will open a store-like interface for add-ons. Enter **`Santiment`** into the search bar in the upper right and hit return: - -![](04_add_addon2.png) - -You will get **`Santiment Data`** as a result. Click on the **`+FREE`** button to install it: - -![](05_add_addon3.png) - -You will now be asked to select the Google account you want to use. As you should be logged in already, the appropriate one should be listed. Click it to continue: - -![](06_add_addon_confirm_account.png) - -In the next step, you are asked to confirm that the Sansheets plugin is allowed to do its work: - -![](07_add_addon_confirm_account2.png) - -Sansheets is now installed, which will be highlighted by an introductory tooltip: - -![](08_add_addon_confirmation.png) - -## Enabling Sansheets for the Spreadsheet - -To activate Sansheets in the currently opened document, select it in the **`Add-ons`** menu, where you will find **`Enable`**: - -![](09_enable.png) - -Sansheets will take a moment to activate and will notify you as soon as it's ready: - -![](10_enable_confirmation.png) - -## Accessing More Data with Sansheets - -To fully utilize Sansheets, you will eventually need to use an API key. Learn [how to create an API key](/products-and-plans/create-an-api-key) and [how to add it to Sansheets](/sansheets/adding-an-api-key) by following these guides. - diff --git a/src/docs/santiment-introduction/index.md b/src/docs/santiment-introduction/index.md deleted file mode 100644 index f19e5737c..000000000 --- a/src/docs/santiment-introduction/index.md +++ /dev/null @@ -1,150 +0,0 @@ ---- -title: Getting started with Santiment -author: Santiment Team -date: 2025-01-24 ---- - - - -## Santiment: A Deep Dive into Crypto Market Intelligence - -Are you tired of relying on hype and influencer opinions for your crypto -trading decisions? Santiment is a powerful platform that goes beyond basic -price charts, providing you with the tools and data to understand the -underlying forces driving the market. This article summarizes the key -features and benefits of Santiment, helping you understand how it can enhance -your trading decisions. - -## The Santiment Advantage: Data-Driven Insights - -Santiment's core philosophy is to move beyond price action and delve into the -behavioral patterns of market participants. Instead of relying solely on price -data, which can be easily manipulated, Santiment focuses on: - -- **On-Chain Metrics**: Analyzing transactions on the blockchain to understand - the actual movement and usage of cryptocurrencies. -- **Social Sentiment:** Tracking discussions and sentiment across social media - to gauge the prevailing mood and trends. -- **Key Stakeholder Activity:** Monitoring the actions of large holders - ("whales" and "sharks") to identify potential market shifts. - -This comprehensive approach provides a more holistic view of the market, -allowing you to make more informed decisions. - -![noborder](./hollistic_approach.png) - -## Key Features and Tools - -[Santiment](https://app.santiment.net/) offers a range of tools and features designed to help you gain a -competitive edge: - -- [Alerts](https://app.santiment.net/alerts): Set up alerts for almost anything. -- [Charts](https://app.santiment.net/charts): Browse, create, and save layouts to visualize data how you want. -- [Ecosystem Development Activity Dashboard](https://app.santiment.net/dev-activity): Explore developer activity data for entire blockchains and projects within. -- [Explorer](https://app.santiment.net/explorer): Browse community generated insights, alerts, chart layouts, and more. -- [Historical Balance Tool](https://app.santiment.net/labs/balance?assets=): A tool for looking up the historical balance of specific wallet addresses on the Ethereum blockchain and also BTC, XRP, ADA, and LTC on their native blockchains. -- [Screener](https://app.santiment.net/screener): Filter and compare assets according to the [Metrics](https://academy.santiment.net/metrics/) you choose. -- [Social Trends Dashboard](https://app.santiment.net/social-trends): Set of tools to identify trending narratives, topics, and tokens for insights into market sentiment: - - [Trending Words](https://app.santiment.net/social-trends): See which keywords have the most traction. - - [Trending Stories](https://app.santiment.net/social-trends/trending-stories): See which stories are getting the most attention. - - [Trending Coins](https://app.santiment.net/social-trends/trending-coins): See which assets are have the most social interest. - - [Crypto Narratvies](https://app.santiment.net/social-trends/crypto-narratives): See narratives and their behaviors over time. -- [Watchlists](https://app.santiment.net/watchlists): Track custom or pre-set market segments. -- [Whale Watcher Dashboard](https://queries.santiment.net/dashboard/top-cex-deposits-1001?utm_source=sanbase&utm_medium=post&utm_campaign=sanbase_eth_top_cex_deposits_b_112124/&fpr=twitter): Tracks large deposits to centralized exchanges, which can signal potential sell-offs. -- [Asset Activity Matrix](https://app.santiment.net/insights/read/the-new-activity-matrix-model-for-sanbase-pro-is-a-game-changer-for-crypto-analytics-7389): All of your daily crypto analytic research on one page thanks for SanSheets and Google Sheets, PRO subscription required. - -![noborder](./scredriver.png) - -## Practical Use Cases - -### Identifying Market Tops and Bottoms - -Santiment's tools can help you identify potential market turning points: - -#### Tops - -- [Social Volume Spikes](/for-traders/#spot-tops-and-exit-opportunities): - Extreme spikes in social volume during a rally can indicate a local top, - especially for smaller-cap coins. -- [Negative Sentiment](/metrics/sentiment-metrics/#what-is-sentiment): - When the crowd is overly bullish, it can be a sign that a top is near. - Santiment's [weighted sentiment - metric](/metrics/sentiment-metrics/weighted-sentiment-metrics/#definition) - can help identify these situations. - -#### Bottoms - -- [Contrarian Approach](/for-traders/#spot-bottoms-and-entry-opportunities): - Santiment's research suggests that the market often moves in the opposite - direction of the crowd's expectations. Buying when the crowd is bearish can - be a profitable strategy. -- [Network Activity](/education-and-use-cases/understanding-short-term-market-trends/#network-activity): - Increased network activity, even during a price downturn, can indicate a - potential bottom. - -#### Monitoring Volatility - -Metrics like [Token Age Consumed](/education-and-use-cases/timing-market-volatility-with-token-age-consumed/) -alert you to potential trend reversals by tracking the movement of previously -idle coins. - -#### Understanding Real-World Utility - -[Transaction volume](/education-and-use-cases/trading-and-transaction-volume/) -captures all on-chain activity, including payments, smart contract -interactions, and wallet transfers. Comparing this with trading volume reveals -whether an asset’s activity stems from speculation or genuine use. - -#### The Importance of Context - -While Santiment's tools are powerful, it's crucial to remember that context is -key. Don't rely solely on one metric or indicator. Instead, use a combination -of data and analysis to make informed decisions. - ---- - -![noborder](./context.png) - -#### Customization and Accessibility - -Santiment offers a variety of customization options to suit your analysis -style: - -- [Chart Adjustments](/sanbase/keyboard-shortcuts/#charts): - Modify timeframes, chart types, and data layers for detailed insights. -- [SanAPI](https://api.santiment.net/) and [SanSheets](https://sheets.santiment.net/): Integrate data into Google - Sheets for advanced modeling and visualization. -- [Pre-Built Templates](https://app.santiment.net/explorer): Access - ready-made layouts for popular metrics like daily active addresses and whale - transactions. - ---- - -#### Learning and Support - -Santiment provides a wealth of educational resources to help users maximize the -platform’s potential: - -- [Insights Page](https://insights.santiment.net/): Regular updates on - trending topics, whale activity, and other key metrics. -- [Live Streams](https://www.youtube.com/@Santimentfeed): Weekly sessions - discussing market trends and answering community questions. -- [Free Trial](https://app.santiment.net/pricing): Explore all features for - two weeks without commitment. -- Book a call: If you are a B2B customer, book a call with the team. We - will help you understand how our product can help you. - ---- - -#### Final Thoughts - -Santiment serves as an indispensable information resource within the complex -and ever-changing crypto market. By merging cutting-edge tools with insightful -analytics, Santiment enables users to make informed decisions based on reliable -data rather than offering direct investment advice. Catering to both -experienced traders and newcomers alike, Santiment’s platform is expertly -crafted to support a variety of trading and investment needs. - -Embark on your exploration today and join countless others who utilize -Santiment’s comprehensive data and analytics to stay ahead in the crypto -landscape. diff --git a/src/docs/santiment-queries/api-access/index.md b/src/docs/santiment-queries/api-access/index.md deleted file mode 100644 index 8afb169c8..000000000 --- a/src/docs/santiment-queries/api-access/index.md +++ /dev/null @@ -1,295 +0,0 @@ ---- -title: API Access to Sanqueries -author: Santiment Team -date: 2023-03-29 -description: How to execute queries using the API ---- - -## Overview - -Before you start, make sure you acquaint yourself with the Sanqueries product -and the SQL queries you can write by reading the `Introduction`, `Exploration` -and `Writing SQL Queries` articles that can be found on the [Sanqueries Oveview](/santiment-queries/introduction/) page. - -The [Santiment Queries Web Interface](https://app.santiment.net/queries) is only -one of the ways to execute queries and access the data. - -For those who want to automate the process of executing queries, we provide access -access via our GraphQL API. You can query the API endpoint directly or use our -[python library](https://github.com/santiment/sanpy). - -## When to use it? - -If the data needs to be consumed by another system, that system can use the API -to compute an SQL query and get the results as a JSON object. - -A few examples of when the API can be used: - -- When the data needs to be consumed by another system at a regular interval - (e.g. every hour). -- When the same query needs to be executed multiple times with different - arguments. -- Any use case that requires automation is a good candidate for - using the API. - -## How to use the Web interface to write queries for the API? - -The web interface is a powerful tool for exploring the data, writing queries, -observing the results in real-time or explore prebuilt dashboards. - -Even when the data is consumed only through the API, it is recommended to use -the web interface to write the SQL queries. The web interface -facilitates the process of writing queries by providing syntax highlighting, -auto-completion and a preview of the result in real-time, speeding up the -development and debugging process. When the query is ready, it can be copied -and used in the API. - - -## API Endpoint - -On the [API Overview](/sanapi/#overview/) page one can find information how to access the API. - -There are two ways to execute queries using the API: - -- Directly execute the `runRawSqlQuery` GraphQL query against the API graphql endpoint; -- Use the [sanpy execute_sql function](https://github.com/santiment/sanpy#execute-sql-queries-and-get-the-result) to execute an SQL query and get the result as a Pandas DataFrame. The python library itself also uses the API, but provides functions that hide the details of the API. - -### The query - -The query that is used in the examples bellow is the following: - -```sql -SELECT - get_metric_name(metric_id) AS metric, - get_asset_name(asset_id) AS asset, - dt, - argMax(value, computed_at) AS value -FROM daily_metrics_v2 -WHERE - asset_id = get_asset_id('bitcoin') AND - metric_id = get_metric_id('nvt') AND - dt >= now() - INTERVAL 7 DAY -GROUP BY dt, metric_id, asset_id -ORDER BY dt ASC -``` - -This query fetches one value per day of the `nvt` metric for the last 7 days. - -The examples below show how to parameterize the query in order to provide some of the arguments separately, instead of hardcoding them. -The following parameters are used: -- `slug` - A string representing the slug of a project; -- `metric` - A string representing the name of a metric; -- `last_n_day` - An integer representing the number of days to be fetched. - -### Direct API call - -The direct API calls can be made using any HTTP client in any programming language. -What you need to do is send a POST request and put the query in the body. - -The query looks like this: -```graphql -{ - runRawSqlQuery( - sqlQueryText: "SELECT\n get_metric_name(metric_id) AS metric,\n get_asset_name(asset_id) AS asset,\n dt,\n argMax(value, computed_at) AS value\n FROM daily_metrics_v2\n WHERE\n asset_id = get_asset_id({{slug}}) AND\n metric_id = get_metric_id({{metric}}) AND\n dt >= now() - INTERVAL {{last_n_days}} DAY\n GROUP BY dt, metric_id, asset_id\n ORDER BY dt ASC", - sqlQueryParameters: "{\"slug\": \"bitcoin\", \"last_n_days\": 7, \"metric\": \"nvt\"}" - ){ - columns - columnTypes - rows - } -} -``` - -**[Run in GraphiQL Live Explorer](https://api.santiment.net/graphiql?query=%7B%0A%20%20runRawSqlQuery(%0A%20%20%20%20sqlQueryText%3A%20%22SELECT%5Cn%20%20%20%20get_metric_name(metric_id)%20AS%20metric%2C%5Cn%20%20%20%20get_asset_name(asset_id)%20AS%20asset%2C%5Cn%20%20%20%20dt%2C%5Cn%20%20%20%20argMax(value%2C%20computed_at)%20AS%20value%5Cn%20%20FROM%20daily_metrics_v2%5Cn%20%20WHERE%5Cn%20%20%20%20asset_id%20%3D%20get_asset_id(%7B%7Bslug%7D%7D)%20AND%5Cn%20%20%20%20metric_id%20%3D%20get_metric_id(%7B%7Bmetric%7D%7D)%20AND%5Cn%20%20%20%20dt%20%3E%3D%20now()%20-%20INTERVAL%20%7B%7Blast_n_days%7D%7D%20DAY%5Cn%20%20GROUP%20BY%20dt%2C%20metric_id%2C%20asset_id%5Cn%20%20ORDER%20BY%20dt%20ASC%22%2C%0A%20%20%20%20sqlQueryParameters%3A%20%22%7B%5C%22slug%5C%22%3A%20%5C%22bitcoin%5C%22%2C%20%5C%22last_n_days%5C%22%3A%207%2C%20%5C%22metric%5C%22%3A%20%5C%22nvt%5C%22%7D%22%0A%20%20)%7B%0A%20%20%20%20columns%0A%20%20%20%20columnTypes%0A%20%20%20%20rows%0A%20%20%7D%0A%7D%0A)** - -> **Note**: In order to be able to run the query in the GraphiQL Explorer you need to login on [Sanbase](https://app.santiment.net) on the same browser. - -### curl - -You can execute the query in your terminal via the following curl command: - -```bash -curl 'https://api.santiment.net/graphql' \ --X POST \ --H 'Content-Type: application/graphql' \ --H 'Authorization: Apikey ' \ ---data '{runRawSqlQuery(sqlQueryText: "SELECT get_metric_name(metric_id) AS metric, get_asset_name(asset_id) AS asset, dt, argMax(value, computed_at) AS value FROM daily_metrics_v2 WHERE asset_id = get_asset_id({{slug}}) AND metric_id = get_metric_id({{metric}}) AND dt >= now() - INTERVAL {{last_n_days}} DAY GROUP BY dt, metric_id, asset_id ORDER BY dt ASC", sqlQueryParameters: "{\"slug\": \"bitcoin\", \"metric\": \"nvt\", \"last_n_days\": 7}"){columns columnTypes rows}}' -``` - -> **Note**: If you have the `jq` tool installed, you can pipe the result into it to pretty print the result. - -#### Result Example - -The result of both the direct API call and the curl command is a JSON. The dates and values will differ when you execute the query. - -```json -{ - "data": { - "runRawSqlQuery": { - "columnTypes": [ - "String", - "String", - "Date", - "Float64" - ], - "columns": [ - "metric", - "asset", - "dt", - "value" - ], - "rows": [ - [ - "nvt", - "bitcoin", - "2025-01-10T00:00:00Z", - 175.20088476942317 - ], - [ - "nvt", - "bitcoin", - "2025-01-11T00:00:00Z", - 471.06125719541876 - ], - [ - "nvt", - "bitcoin", - "2025-01-12T00:00:00Z", - 588.6754853340366 - ], - [ - "nvt", - "bitcoin", - "2025-01-13T00:00:00Z", - 306.4015448498733 - ], - [ - "nvt", - "bitcoin", - "2025-01-14T00:00:00Z", - 272.04406973516427 - ], - [ - "nvt", - "bitcoin", - "2025-01-15T00:00:00Z", - 223.79467244976001 - ], - [ - "nvt", - "bitcoin", - "2025-01-16T00:00:00Z", - 811.1304231153288 - ] - ] - } - } -} -``` - -#### API request arguments definition - -The `runRawSqlQuery` accepts two arguments: - -- `sqlQueryText` - The SQL query to execute. The query must be a valid SQL query that - can be executed against the Clickhouse database. The article [Writing SQL Queries](/santiment-queries/writing-sql-queries/) is a recommended read. - The query allows for parametrization by using named parameters. Each parameter has a key and a value. - The query contains the parameter name surrounded in double curly braces: `{{key}}`. -- `sqlQueryParameters` - A stringified JSON object that contains the key-value pairs. When the SQL query - is executed, the `{{key}}` templates are replaced with the corresponding values from the `sqlQueryParameters` map. - -#### API result fields interpretation - -The result of the GraphQL query contains the result of the executed SQL query. -The selected fields in this example are: `columns`, `columnTypes` and `rows`. - -The meaning of the fields is: - -- `columns` is a list of the column names in the result. The order of the columns - is specified in the SQL query itself. The name of the column is the name of the column - in the database table or the alias specified with the `AS` keyword. If an aggregation - function is used, it is highly recommended to specify the alias for the column, otherwise - the name of the column will be the expression itself. -- `columnTypes` is a list of the types of the columns in the result. The order of the -- types is the same as in the `columns` field. The types are the raw Clickhouse type. - Example types are `UInt64`, `Date`, `Float64`, `DateTime`, `String`, etc. These type are mapped - to JSON types as JSON has a limited number of types. All integer and float types are - mapped to the JSON number type but with specified meaning (size, type and sign of the number). - A lot of the other types are transpored as JSON string - `String`, `Date`, `DateTime` and others - are JSON strings with specified meaning. -- `rows` is a list of lists, each inner list is a row in the result. The order of the - rows is the same as in the result of the SQL query. The order of the columns in the - inner list is the same as in the `columns` field. - -### Using the Python library - -The [sanpy](https://github.com/santiment/sanpy) provides the `execute_sql` function, which -interacts with the above described `runRawSqlQuery` API. The function accepts two -named parameters - `query` and `parameters`, runs the query and returns the result as a Pandas DataFrame. - -#### sanpy request example - -To run the code: - -- Install sanpy with `pip install sanpy`. -- Replace `YOUR_OWN_API_KEY` with your API key. - -```python -import san - -san.ApiConfig.api_key = 'YOUR_OWN_API_KEY' - -san.execute_sql(query=""" - SELECT - get_metric_name(metric_id) AS metric, - get_asset_name(asset_id) AS asset, - dt, - argMax(value, computed_at) AS value - FROM daily_metrics_v2 - WHERE - asset_id = get_asset_id({{slug}}) AND - metric_id = get_metric_id({{metric}}) AND - dt >= now() - INTERVAL {{last_n_days}} DAY - GROUP BY dt, metric_id, asset_id - ORDER BY dt ASC -""", -parameters={ - 'slug': 'bitcoin', - 'metric': 'nvt', - 'last_n_days': 7 -}, -set_index="dt") -``` - -#### sanpy result example - -The result is a Pandas DataFrame: - -``` -dt metric asset value -2023-03-23T00:00:00Z nvt bitcoin 151.301315 -2023-03-24T00:00:00Z nvt bitcoin 165.503689 -2023-03-25T00:00:00Z nvt bitcoin 291.854742 -2023-03-26T00:00:00Z nvt bitcoin 379.362459 -2023-03-27T00:00:00Z nvt bitcoin 195.730616 -2023-03-28T00:00:00Z nvt bitcoin 181.268121 -2023-03-29T00:00:00Z nvt bitcoin 376.403649 -``` - -#### sanpy request parameters definition - -The `execute_sql` function accepts three named parameters - one mandatory and two optinal: - -- `query` - The meaning is the same as in the `runRawSqlQuery` API described. This parameter is mandatory/ -- `parameters` - The meaning is the same as in the `runRawSqlQuery` API described above. - The format here is a Python dictionary that automatically gets converted to a JSON string when - executing the request. If the query does not have any parameters, this parameter can be omitted. -- `set_index` - The name of the column to use as the index of the returned DataFrame. If not - specified, the index will be a range of integers. This parameter is optional. - -#### sanpy result parameters definition - -The `execute_sql` function returns a Pandas DataFrame with the result of the query. -The name of each column is the name of the column in the database table or the alias -specified with the `AS` keyword. If an aggregation function is used, it is highly recommended -to specify the alias for the column, otherwise the name of the column will be the expression itself. diff --git a/src/docs/santiment-queries/bridges/index.md b/src/docs/santiment-queries/bridges/index.md deleted file mode 100644 index dd2e367aa..000000000 --- a/src/docs/santiment-queries/bridges/index.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Bridge Transactions Table Overview -author: Santiment Team -date: 2024-02-21 -description: Discover how Santiment Queries gather data on cryptocurrency exchanges across various blockchain networks. ---- - -## Overview - -A crypto bridge is a platform or protocol that facilitates the exchange of cryptocurrencies between different blockchain networks, promoting interoperability and liquidity within the cryptocurrency ecosystem. - -In **Santiment Queries**, we collect data from platforms or protocols which are trading cryptocurrencies across diverse blockchain networks: - -- Across -- Arbitrum_bridge -- Avalanche -- Manta_pacific -- Multichain -- Op_bridge -- Polygon_bridge -- Squid -- Stargate -- Wbtc -- Zksync_era_bridge -- Zksync_lite - -## Usage - -Data Analysis and Reporting: This repository facilitates the analysis and reporting of transactions across various types of bridges, offering valuable insights into their utilization and acceptance. - -Monitoring and Alert Systems: Utilizing transaction data from bridges, teams can establish monitoring and alert systems to detect irregular or questionable activities across diverse bridge networks. - -Integration with Santiment Products: The exported data can seamlessly integrate with other Santiment products, like Sanbase, enhancing the overall understanding of the cryptocurrency landscape. - -## Exploring the Tables - -We can inspect the table using the commands we learned in [Exploration](/santiment-queries/exploration/). - -Here, we've provided the Bridge Transactions table along with its columns, concise descriptions, and a few sample queries for you to delve into the data. - -### bridge\_transactions - -The `bridge_transactions` table is designed to capture and store detailed information about transactions occurring on a bridge between different blockchain networks. Each row in this table represents a single transaction, and the table includes various attributes to provide comprehensive insights into the transaction process. It has the following columns: - -- **tx_hash** (*String*): Hash of the transaction. -- **log_index** (*UInt32*): Log index of the event. -- **dt** (*DateTime*): Date and time of the transaction -- **chain_in** (*String*): The target blockchain to recieve the funds. -- **chain_out** (*String*): The Blockchain from where the transaction was initiated -- **contract_addr** (*String*): Address of the involved smart contract. -- **token_in** (*Nullable(String)*): Type of token received from the bridge. -- **token_out** (*Nullable(String)*): Type of token sent into the bridge. -- **amount_in** (*UInt256*): Quantity of token_in. -- **amount_out** (*UInt256*): Quantity of token_out. -- **project_name** (*String*): Name or identifier of the associated project. -- **user** (*String*): Identifier of the transaction initiator. -- **args** (*String*): Additional transaction parameters or data -- **asset_in_ref_id** (*UInt64*): Reference ID of the currency contract that can be used to retrieve additional information about the asset from the `asset_metadata` table. -- **asset_out_ref_id** (*UInt64*): Reference ID of the currency contract that can be used to retrieve additional information about the asset from the `asset_metadata` table. -- **computed_at** (*DateTime*): Timestamp indicating when the transaction details were recorded in the database. - -## Sample Queries - -We've put together a dashboard with several queries to assist you in monitoring transaction volume and count, as well as the top 10 transactions or bridge flows. You can utilize our queries for a quick data check, or dive deeper by clicking on each query's name within the dashboard to customize them to your preferences. - -[Bridge Dashboard](https://queries.santiment.net/dashboard/bridges-710) \ No newline at end of file diff --git a/src/docs/santiment-queries/dex-pools/index.md b/src/docs/santiment-queries/dex-pools/index.md deleted file mode 100644 index dffd2cf8d..000000000 --- a/src/docs/santiment-queries/dex-pools/index.md +++ /dev/null @@ -1,200 +0,0 @@ ---- -title: DEX Pools Tables Overview -author: Santiment Team -date: 2023-02-16 -description: Learn about the information on trades in decentralized exchanges (DEX) that can be gathered using Santiment Queries. ---- - -## Overview - -A DEX, short for decentralized exchange, is a type of peer-to-peer marketplace where cryptocurrency traders can conduct transactions directly with one another. By eliminating the need for intermediaries such as banks and brokers, DEXs facilitate the core promise of cryptocurrency, which is to enable financial transactions without centralized control. - -In **Santiment Queries**, we collect data from protocols that provide liquidity pools (aggregators are not included): - -- Balancer -- Bamboodefi -- Bancor-v3 -- ChickenSwap -- Clipper -- Curve -- DefiPlaza -- DefiSwap -- DoDo -- Elk -- EmpireDex -- KwikSwap -- KyberSwap -- MooniSwap -- RadioShack -- Saddle -- ShibaSwap -- StandardTech -- Sum Swap -- SushiSwap -- Swapr -- Synapse -- Uniswap v2/v3 -- YouSwap - -This information gives you the ability to check: - -- the DEX market activity -- the smart money movement on certain tokens -- information about liquidity pools -- the most active tokens, addresses, and DEX protocols -- different DEX protocols and to compare them - -## List of DEX Tables - -All our tables that contain DEX-related data have the string 'dex' in their name. You can easily find them by running the following query: - -```sql -SHOW TABLES LIKE '%dex%' -``` - -``` -┌─name───────────────────┐ -│ dex_pools │ -│ dex_pools_trades │ -└────────────────────────┘ -``` - -## Exploring the Tables - -We can inspect the tables using the commands we learned in [Exploration](/santiment-queries/exploration/). - -Below, we have listed all the DEX pools tables with their columns, brief descriptions, and some example queries that you can use to explore the tables. - -### dex\_pools - -The `dex_pools` table is designed to store information about liquidity pool creation events on DEX protocols. It has the following columns: - -- **dt** (*DateTime*): Date and time of the pool deployment. -- **chain** (*String*): The chain that the pool is deployed on. -- **tx_hash** (*String*): Hash of the transaction. -- **log_index** (*UInt32*): Log index of the pool event. -- **project_name** (*String*): Name of the DEX or projects, such as uniswap_v3, curve, dydx, etc. -- **factory_address** (*Nullable(String)*): Address of the factory that created the pool; NULL if there is no factory (e.g., clipper.exchange). -- **pool_address** (*String*): Address of the pool. -- **token_address** (*Array(Nullable(String))*): Array of token addresses used in the pool. -- **fee** (*Nullable(Float64)*): Fee of the pool in percentage; NULL if not available or variable. -- **computed_at** (*DateTime*): The timestamp when the pool was inserted into the table. - -### dex\_pools\_trades - -The `dex_pools_trades` is a table designed to store trading events on DEX protocols. It has the following columns: - -- **dt** (*DateTime*): Date and time of trade -- **chain** (*String*): The chain that the pool is deployed on -- **tx_hash** (*String*): Hash of the transaction in which the trade has been included -- **log_index** (*UInt32*): Log index of trade event -- **trade_index** (*UInt32*): The sequence order of the trade in the transaction. For example, if there are 5 trades in a transaction, the trade index should be 0 to 4 accordingly. -- **pool_address** (*String*): Address of the pool -- **router_address** (*String*): Address of the router used in this transaction. A router routes trade orders to the most appropriate pool of liquidity for efficient execution and optimal pricing based on available liquidity.* -- **from** (*String*): Sender address of the transaction.** -- **to** (*String*): Receiver address of the transaction -- **token_in** (*Nullable(String)*): Address of token sent, NoneType if it's ETH -- **token_out** (*Nullable(String)*): Address of token received -- **amount_in** (*UInt256*): The amount of the token sent -- **amount_out** (*UInt256*): The amount of the token received -- **asset_in_ref_id** (*UInt64*): Reference ID of the currency contract that was sent which can be used to retrieve additional information about the asset from the `asset_metadata` table. -- **asset_out_ref_id** (*UInt64*): Reference ID of the currency contract that was received. -- **computed_at** (*DateTime*): The timestamp when the trade was inserted into the table. - -\* In decentralized exchanges (DEXs), a router is used to direct transactions between different blockchain networks or between different liquidity pools within the same network. When a user wants to make a trade on a DEX, the router identifies the best path for the trade to take in order to get the best possible price. The router can also split the trade into smaller orders and route them through multiple liquidity pools in order to find the best overall price. Additionally, the router can be used to manage liquidity and minimize the impact of large trades on the market by routing the trade through multiple liquidity pools. By doing so, the router ensures that the trade does not cause significant price movements in any single pool, which could adversely affect the price of the traded asset. - -** Note about **from** and **to**: They can be equal when there is an internal router transaction, then the address in **from** will be the same as **to** and also the **router_address**. However, it is also possible to have routed transactions in which they are not equal, such as when the transaction is to or from the router or when a router is used for a normal trade between addresses. - -## Sample Queries - -### Volume of a specific token on a specific exchange for the last 30 days - -```sql -SELECT - SUM(dpt.amount_in)/1e6 as total_amount -FROM - dex_pools_trades dpt - INNER JOIN dex_pools dp - ON dp.pool_address = dpt.pool_address -WHERE - dp.project_name = 'uniswap_v3' - AND dpt.token_in = LOWER('0xdAC17F958D2ee523a2206206994597C13D831ec7') --USDT - AND dt >= now() - interval 30 DAY -``` -Test in [Queries](https://queries.santiment.net/query/volume-of-a-specific-token-on-a-specific-exchange-for-the-last-30-days-383) - -### Number of trades that occurred in the past 30 days on a specific exchange - -```sql -SELECT - COUNT(*) AS trade_count -FROM - dex_pools_trades dpt - INNER JOIN dex_pools dp - ON dp.pool_address = dpt.pool_address -WHERE - dp.project_name = 'curve' - AND dt >= now() - interval 30 DAY -``` - -Test in [Queries](https://queries.santiment.net/query/number-of-trades-that-occurred-in-the-past-30-days-on-a-specific-exchange-385) - -### Unique Traders in the Past 30 Days on DODO Exchange - -```sql -SELECT - COUNT(DISTINCT "from") AS unique_trader -FROM - dex_pools_trades dpt - INNER JOIN dex_pools dp - ON dp.pool_address = dpt.pool_address -WHERE - dp.project_name = 'dodo' - AND dt >= now() - interval 30 DAY -``` - -Test in [Queries](https://queries.santiment.net/query/unique-traders-in-the-past-30-days-on-dodo-exchange-386) - -### Number of Pools on a Specific Exchange - -```sql -SELECT - COUNT(DISTINCT pool_address) AS pool_count -FROM - dex_pools -WHERE - project_name = 'sushi_v2' -``` - -Test in [Queries](https://queries.santiment.net/query/number-of-pools-on-a-specific-exchange-387) - ---- - -### Pool Fees Ranked Descending - -```sql -SELECT - pool_address, project_name, fee -FROM - dex_pools -ORDER BY fee DESC, project_name DESC -LIMIT 50 -``` - -Test in [Queries](https://queries.santiment.net/query/pool-fees-ranked-descending-388) - -### Projects Ranked by Number of Pools - -```sql -SELECT - project_name, - MIN(dt) as start_date, - COUNT(DISTINCT pool_address) AS pool_count -FROM - dex_pools -GROUP BY project_name -ORDER BY pool_count DESC -``` - -Test in [Queries](https://queries.santiment.net/query/projects-ranked-by-number-of-pools-389) - diff --git a/src/docs/santiment-queries/exploration/index.md b/src/docs/santiment-queries/exploration/index.md deleted file mode 100644 index cba3fc43a..000000000 --- a/src/docs/santiment-queries/exploration/index.md +++ /dev/null @@ -1,161 +0,0 @@ ---- -title: Exploration -author: Santiment Team -date: 2022-08-17 -description: Learn how to explore the contents of the database and table structure ---- - -## Overview - -This document aims to enhance the reader's ability to navigate through Clickhouse using SQL and explore the available tables and their structures. - -## List of Tables - -To get a list of all available tables, execute the following query: - -```sql -SHOW TABLES -``` - -You can filter the list of tables using a regex. For example, to get the list of all tables containing `price` in their name: - -```sql -SHOW TABLES LIKE '%price%' -``` - -Test in [Queries](https://queries.santiment.net/query/list-of-tables-390) - -Example output: - -``` -┌─name───────────────────┐ -│ asset_price_pairs_only │ -│ asset_prices_v3 │ -└────────────────────────┘ -``` - -The `%` at the beginning means that there could be other characters to the left. -The `%` at the end means that there could be other characters to the right. - -## Get Information About a Table - -To inspect the structure of a given table, execute the `DESCRIBE` statement: - -```sql -DESCRIBE intraday_metrics -``` - -Test in [Queries](https://queries.santiment.net/query/describe-table-392) - -``` -┌─name───────────────┬─type─────────────┬─default_type─┬─default_expression─────────────┬─comment─┬─codec_expression─┬─ttl_expression─┐ -│ asset_id │ UInt64 │ │ │ │ │ │ -│ computed_at │ DateTime │ DEFAULT │ now() │ │ │ │ -│ name │ Nullable(String) │ DEFAULT │ CAST(NULL, 'Nullable(String)') │ │ │ │ -│ version │ Date │ │ │ │ │ │ -│ asset_ref_id │ UInt64 │ │ │ │ │ │ -│ ticker_slug │ Nullable(String) │ DEFAULT │ CAST(NULL, 'Nullable(String)') │ │ │ │ -│ decimals │ UInt32 │ DEFAULT │ CAST(0, 'UInt32') │ │ │ │ -│ contract_addresses │ Array(String) │ │ │ │ │ │ -│ specification │ Nullable(String) │ │ │ │ │ │ -└────────────────────┴──────────────────┴──────────────┴────────────────────────────────┴─────────┴──────────────────┴────────────────┘ -``` - -To see how a table was created, execute the `SHOW CREATE TABLE` statement. This includes information about partitioning, ordering, table engine, and other settings. Knowing the `ORDER BY` helps create better and faster queries. - -```sql -SHOW CREATE TABLE intraday_metrics -``` - -Test in [Queries](https://queries.santiment.net/query/show-create-table-391) - -``` -┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ CREATE TABLE default.intraday_metrics │ -│ ( │ -│ `asset_id` UInt64 CODEC(DoubleDelta, LZ4), │ -│ `metric_id` UInt64 CODEC(DoubleDelta, LZ4), │ -│ `dt` DateTime CODEC(DoubleDelta, LZ4), │ -│ `value` Float64, │ -│ `computed_at` DateTime │ -│ ) │ -│ ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/global/intraday_metrics_v2', '{hostname}', computed_at) │ -│ PARTITION BY toYYYYMM(dt) │ -│ ORDER BY (asset_id, metric_id, dt) │ -│ SETTINGS index_granularity = 8192 │ -└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - -## Get data from a table - -After inspecting the structure of a given table, you can execute a few simple queries to obtain some data from the table to see how it looks. Most of the time, it makes more sense to select more recent data instead of data starting from the beginning, as it will be more relevant. To improve readability, you can apply functions for transforming the `metric_id` and `asset_id` to their names. The `, *` syntax allows you to select all fields but also add something else to the result. - -```sql -SELECT - get_asset_name(asset_id) AS slug, - get_metric_name(metric_id) AS metric, - * -FROM daily_metrics_v2 -WHERE dt >= (now() - toIntervalDay(2)) -LIMIT 10 -``` - -Test in [Queries](https://queries.santiment.net/query/get-data-from-a-table-393) - -```sql -┌─slug──────────────────────┬─metric──────────────────┬─metric_id─┬─asset_id─┬─────────dt─┬───────────────value─┬─────────computed_at─┐ -│ bnb-binance-usd │ adjusted_daa_divergence │ 681 │ 41039 │ 2022-08-15 │ -1.5018654389124684 │ 2022-08-15 00:11:03 │ -│ bnb-tether │ adjusted_daa_divergence │ 681 │ 41048 │ 2022-08-15 │ -2.3807976412934018 │ 2022-08-15 00:11:03 │ -│ bnb-usd-coin │ adjusted_daa_divergence │ 681 │ 41051 │ 2022-08-15 │ -1.6207922927296166 │ 2022-08-15 00:11:03 │ -│ bnb-1inch │ payment_count │ 179 │ 41038 │ 2022-08-15 │ 4 │ 2022-08-15 00:13:20 │ -│ bnb-chainlink │ payment_count │ 179 │ 41040 │ 2022-08-15 │ 103 │ 2022-08-15 00:13:20 │ -│ bnb-binance-usd │ payment_count │ 179 │ 41039 │ 2022-08-15 │ 2688 │ 2022-08-15 00:13:20 │ -│ bnb-chromia │ payment_count │ 179 │ 41041 │ 2022-08-15 │ 3 │ 2022-08-15 00:13:20 │ -│ bnb-trust-wallet-token │ payment_count │ 179 │ 41049 │ 2022-08-15 │ 6 │ 2022-08-15 00:13:20 │ -│ bnb-green-metaverse-token │ payment_count │ 179 │ 41042 │ 2022-08-15 │ 25 │ 2022-08-15 00:13:20 │ -│ bnb-uniswap │ payment_count │ 179 │ 41050 │ 2022-08-15 │ 15 │ 2022-08-15 00:13:20 │ -└───────────────────────────┴─────────────────────────┴───────────┴──────────┴────────────┴─────────────────────┴─────────────────────┘ -``` - -## How to Interpret the Table Structure - -When looking at a table structure, there are several important things that the reader needs to pay attention to. - -Let's take a look at the following table structure: - -``` -┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ CREATE TABLE default.intraday_metrics │ -│ ( │ -│ `asset_id` UInt64 CODEC(DoubleDelta, LZ4), │ -│ `metric_id` UInt64 CODEC(DoubleDelta, LZ4), │ -│ `dt` DateTime CODEC(DoubleDelta, LZ4), │ -│ `value` Float64, │ -│ `computed_at` DateTime │ -│ ) │ -│ ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/global/intraday_metrics_v2', '{hostname}', computed_at) │ -│ PARTITION BY toYYYYMM(dt) │ -│ ORDER BY (asset_id, metric_id, dt) │ -│ SETTINGS index_granularity = 8192 │ -└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - -### Table Name -The complete table name is `default.intraday_metrics`, where `default` refers to the database and `intraday_metrics` is the table name. Since queries are executed in the `default` database, you can omit `default` when referencing the table. - -### Columns - -The columns are represented by their names and corresponding data types. Data types may have modifiers that determine how the data is stored on disk (e.g., `CODEC(DoubleDelta, LZ4)`). These modifiers can be disregarded when examining a table. - -### ORDER BY - -This should not be confused with `ORDER BY` clause used when you write an SQL query, which controls how the records in the result set are sorted. The `ORDER BY` examined here is a property of the database table and controls how the data is sorted on disk, acting like an index. - -This is a crucial field to understand and consider when writing a query. ClickHouse is a column-oriented database, meaning that the data for columns is stored continuously on-disk. This makes it more challenging and less efficient to use multiple indexes, so the column order in `ORDER BY` is essential for writing performant queries. If filters for the columns at the beginning of the list are present, the query will run faster. - -### Engine - -The [Table Engine](https://clickhouse.com/docs/en/engines/table-engines/) controls how data is stored, updated, and accessed. If the engine is *MergeTree, then the `FINAL` keyword needs to be used. See the [Writing SQL Queries](/santiment-queries/writing-sql-queries) page for more detailed examples and reasoning. - -### Partition -The partitioning has little to no effect on performance, making it safe to ignore. diff --git a/src/docs/santiment-queries/index.md b/src/docs/santiment-queries/index.md deleted file mode 100644 index fc8c32312..000000000 --- a/src/docs/santiment-queries/index.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Santiment Queries -author: Santiment Team -date: 2022-08-17 -description: Database explorer & research tool ---- - -> :point_right: **We no longer offer this product, but still support it for legacy users** :point_left: - -[Santiment Queries](https://app.santiment.net/queries) gives access to a Clickhouse Database cluster via SQL interface that holds crypto-related on-chain, financial, social and development activity data. - -- [Introduction](/santiment-queries/introduction) gives information what this tool is about and why it exists. -- [Exploration](/santiment-queries/exploration) shows how to navigate the database and explore the tables structure. -- [Writing SQL Queries](/santiment-queries/writing-sql-queries) is a comprehensive guide to your first steps in writing SQL queries using Clickhouse SQL and Santiment datasets. -- [Rate Limiting and Credits Cost](/santiment-queries/rate-limits-and-credits-cost) describes what limits are applied when you run queries. -- [API Access](/santiment-queries/api-access) shows how to execute the queries using the API instead of the web interface. -- [Prices Tables Overview](/santiment-queries/prices-tables/) gives information about the tables related to prices, trading volume and marketcap. -- [Pre-computed Metrics Tables Overview](/santiment-queries/metric-tables/) provides info about fetching a wide range of pre-computed Santiment metrics. -- [Bridge Transactions Table Overview](/santiment-queries/bridges/) show how to gather data on cryptocurrency exchanges across various blockchain networks. -- [Lending Pools Overview](/santiment-queries/lending-pools/) tracks the deposits, borrows, repayments, withdraws and liquidate actions happened on lending protocols. -- [DEX Pools Overview](/santiment-queries/dex-pools/) gives information about the dex pools tables in Santiment Queries. -- [NFT Tables Overview](/santiment-queries/nft-tables) gives information about the nft related tables in Santiment Queries. -- [XRPL Tables Overview](santiment-queries/xrpl-tables) gives information about the tables for the XRPL chain in Santiment Queries. diff --git a/src/docs/santiment-queries/introduction/index.md b/src/docs/santiment-queries/introduction/index.md deleted file mode 100644 index 473b76ce8..000000000 --- a/src/docs/santiment-queries/introduction/index.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Introducing Santiment Queries -author: Santiment Team -date: 2022-08-17 -description: An overview of the Santiment Queries tool and its purpose ---- - -## Overview - -At Santiment, we make extensive use of [Clickhouse](https://clickhouse.com/), a high-performance column-oriented database, to store on-chain, financial, social, and development activity data. In addition to storing data, Clickhouse is capable of performing complex calculations and aggregations on millions of rows of data, making it an ideal tool to power your research. - -Santiment Queries is an online web tool that provides access to a Clickhouse cluster containing our datasets. Basic SQL knowledge is required to use the tool. If you have no experience, you can follow brief Clickhouse Tutorial [here](https://clickhouse.com/docs/en/guides/writing-queries) or [here](https://clickhouse.com/docs/en/tutorial#3-analyze-the-data) to get started. - -## Accessing Santiment Queries - -Santiment Queries can be found at [https://app.santiment.net/queries](https://app.santiment.net/queries). Anonymous users can browse the public dashboards, while logged-in users can create both public and private dashboards. - -## Exploration - -The [Exploration](/santiment-queries/exploration) page guides users on how to explore the contents of the database, understand the available tables, and learn about their structure. - -## Writing Your First SQL Query - -The [Writing SQL Queries](/santiment-queries/writing-sql-queries) page guides you through the process of writing your first SQL query. \ No newline at end of file diff --git a/src/docs/santiment-queries/lending-pools/index.md b/src/docs/santiment-queries/lending-pools/index.md deleted file mode 100644 index d49998b9a..000000000 --- a/src/docs/santiment-queries/lending-pools/index.md +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Lending Pools Overview -author: Santiment Team -date: 2023-04-03 -description: Information about the Lending Pools's table stored in Santiment Queries. ---- - -## Overview - -A lending pool is a collective source of funds or assets that individuals deposit into for lending purposes, typically facilitated by decentralized finance (DeFi) platforms. It allows lenders to earn interest on their deposited funds while borrowers can access these funds by providing collateral or meeting specific requirements set by the lending protocol. - -Lending Pools is a project that aims to track deposits, borrows, repayments, withdrawals, and liquidation actions occurring on lending protocols. - -In **Santiment Queries**, we record the platform from which the liquidation data was recorded under the `project_name` column. The platforms we collect data from are: - -- AAVE-v2/v3 -- Compound/v3 -- Liquity -- MakerDAO - -## Usage - -The Lending Pools project can be used for the following purposes: - -- Monitor the inflow and outflow of lending protocols -- Observe liquidation actions occurring on each protocol -- Track the Total Value Locked (TVL) in various protocols -- Determine the total amount borrowed for a specific asset - -## Exploration of the Tables - -We can inspect the table with the commands we learned in [Exploration](/santiment-queries/exploration/). - -Below, we have listed the table containing the lending pools data with its columns, brief descriptions, and some example queries that you can use to explore the table. - -### lending\_pools\_events - -- **tx_hash** (*String*): Hash of the transaction in which the event has been included -- **log_index** (*UInt32*): Log index of the event -- **dt** (*DateTime*): Date and time of the event -- **chain** (*String*): The chain that the pool is deployed on -- **pool_address** (*String*): Address of the pool -- **on_behalf_of** (*String*): Address holding the debt or collateral -- **action** (*Enum8*): Type of action recorded. *borrow* = 0, *deposit* = 1, *withdraw* = 2, *liquidate* = 3, *repay* = 4 -- **token_in** (*Nullable(String)*): Address of token received by the pool (in case of deposit/repay/liquidate actions) -- **token_out** (*Nullable(String)*): Address of token leaving the pool (in case of borrow/withdraw/liquidate actions) -- **amount_in** (*UInt256*): The amount of the token received by the pool. 0 in case of borrow/withdraw -- **amount_out** (*UInt256*): The amount of the token leaving the pool. 0 in case of deposit/repay -- **project_name** (*String*): Name of the project, such as aave_v2, aave_v3, compound, compound_v3, liquity and makerdao. -- **user** (*String*): Address performing the action -- **computed_at** (*DateTime*): The timestamp when the event was inserted into the table. - -## Sample Queries - -### Total Deposits for a Certain Platform - -To find the total deposits for AAVE-v2 in the last 30 days for a specific token, use the following SQL query: - -```sql -SELECT SUM(amount_in) -FROM lending_pools_events -WHERE project_name = 'aave_v2' -AND action = 'deposit' -AND token_in = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' -AND dt >= now() - interval 30 DAY -``` -Test in [Queries](https://queries.santiment.net/query/total-deposits-for-a-certain-platform-394) - ---- - -### Number of Liquidations for a Certain Platform - -To find the number of liquidations that occurred in the past 30 days on MakerDAO, use the following SQL query: - -```sql -SELECT COUNT(*) -FROM lending_pools_events -WHERE project_name = 'makerdao' -AND action = 'liquidate' -AND dt >= now() - interval 30 DAY -``` -Test in [Queries](https://queries.santiment.net/query/number-of-liquidations-for-a-certain-platform-395) - ---- - -### Unique Borrowers for a Certain Platform - Unique Borrowers on Compound in the Past 30 Days - -```sql -SELECT DISTINCT user -FROM lending_pools_events -WHERE project_name = 'compound' -AND action = 'borrow' -AND dt >= now() - interval 30 DAY -``` - -Test in [Queries](https://queries.santiment.net/query/unique-borrowers-for-a-certain-platform-unique-borrowers-on-compound-in-the-past-30-days-396) - diff --git a/src/docs/santiment-queries/metric-tables/index.md b/src/docs/santiment-queries/metric-tables/index.md deleted file mode 100644 index fa3f078d4..000000000 --- a/src/docs/santiment-queries/metric-tables/index.md +++ /dev/null @@ -1,374 +0,0 @@ ---- -title: Metrics Datasets -author: Santiment Team -date: 2024-04-01 -description: Learn about Santiment metrics datasets. ---- - -## Overview - -This document introduces Santiment's precomputed metrics datasets. - -You can filter all metric tables as: - -```sql -SHOW TABLES LIKE '%metrics%' -``` - -Test in [Queries](https://queries.santiment.net/query/metrics-tables-example-494) - -Usually, tables storing pre-computed data have a common set of columns: - -- `dt` - A `DateTime` field storing the corresponding date and time. -- `asset_id` - An `UInt64` unique identifier for an asset. The data for that ID is stored in the `asset_metadata` table. -- `metric_id` - An `UInt64` unique identifier for a metric. The data for that ID is stored in the `metric_metadata` table. -- `value` - A `Float` column holding the metric's value for the given asset/metric pair. -- `computed_at` - A `DateTime` column storing the date and time when the given row was computed. - -Metrics are located in different tables, depending on some different parameters. All tables are similar to each other and described below. - -## Tables - ---- - -### daily_metrics_v2 - -The `daily_metrics_v2` table stores a single metric value for each asset for each day. I.e. in that tables stored metrics that have exactly 1 value per day. - -Here's an example how to fetch `daily_active_addresses` for `bitcoin` using `daily_metrics_v2` - -```SQL -SELECT - dt, - get_asset_name(asset_id) AS asset, - get_metric_name(metric_id) AS metric, - value -FROM daily_metrics_v2 FINAL -WHERE - asset_id = get_asset_id('bitcoin') AND - metric_id = get_metric_id('daily_active_addresses') AND - dt >= toDateTime('2020-01-01 00:00:00') -LIMIT 2 -``` -Test in [Queries](https://queries.santiment.net/query/dict-example-with-func-413) - ---- - -### intraday_metrics - -Table `intraday_metrics` is very similar to `daily_metrics_v2` but stores metrics with more than one value per day. In most cases, these metrics have a new value every 5 minutes. - -Here's an example how to get 5-minute prices for ethereum: - -```SQL -SELECT - dt, - get_asset_name(asset_id) AS asset, - get_metric_name(metric_id) AS metric, - value -FROM intraday_metrics FINAL -WHERE - asset_id = get_asset_id('ethereum') AND - metric_id = get_metric_id('price_usd') AND - dt >= toDateTime('2024-01-01 00:00:00') -ORDER BY dt DESC -LIMIT 5 -``` - -Test in [Queries](https://queries.santiment.net/query/price-example-478) - ---- - -### labeled_intraday_metrics_v2 - -Table `labeled_intraday_metrics_v2` stores metrics for a given `blockchain` and `label_id`. Each `label_id` corresponds to a certain [label FQN.](/labels/label-fqn) The data for that ID is stored in the `label_metadata` table. Blockchain column contains the string for blockchain name, e.g. `bictoin`, `ethereum`, etc. - -For instance, you can retrieve ethereum balance of all centralized exchange addresses with the query: - -```SQL -SELECT - dt, - value AS balance -FROM labeled_intraday_metrics FINAL -WHERE - dt >= toDateTime('2024-01-01 00:00:00') - AND label_id = dictGet('labels_by_fqn', 'label_id', 'santiment/centralized_exchange:v1') - AND metric_id = dictGet('metrics_by_name', 'metric_id', 'combined_labeled_balance') - AND asset_id = dictGet('assets_by_name', 'asset_id', 'ethereum') - AND blockchain = 'ethereum' -ORDER BY dt DESC -LIMIT 5 -``` - -Test in [Queries](https://queries.santiment.net/query/cex-balance-example-479) - ---- - -### daily_label_based_metrics - -Table `intraday_metrics` also has `label` and `owner` columns so that metrics stored in that table correspond to a particular label and owner. - -> Note that this table uses old way to filter labels (plain label/owner instead of label_fqn). - -This table could be used to retrieve [labelled exchange](/metrics/labeled-exchange) metrics under names: - -* `labelled_active_deposits` -* `labelled_deposit_transactions` -* `labelled_active_withdrawals` -* `labelled_withdrawal_transactions` - -or NFT [trading volume](metrics/nft-trade-volume-usd) and [trades count](metrics/nft-trades-count) metrics. - -Here's an example to get Binance active deposits: - -```SQL -SELECT - dt, - get_asset_name(asset_id) AS asset, - get_metric_name(metric_id) AS metric, - value -FROM daily_label_based_metrics FINAL -WHERE - dt >= toDateTime('2024-01-01 00:00:00') - AND asset_id = get_asset_id('ethereum') - AND metric_id = get_metric_id('labelled_active_deposits') - AND label = 'centralized_exchange' AND owner = 'binance' -ORDER BY dt DESC -LIMIT 5 -``` - -Test in [Queries](https://queries.santiment.net/query/labelled-active-deposits-example-481) - ---- - -### ecosystem_aggregated_metrics - -`ecosystem_aggregated_metrics` is a table similar to the `daily_metrics_v2` table. The only distinction is that it doesn't contain asset_id column; instead, it includes the ecosystem column. This adjustment was made to accommodate the requirements for development and github activity metrics, allowing us to monitor the activity of the entire ecosystem. - -`ecosystem` is a string, you can get available ecosystems as: - -```SQL -SELECT DISTINCT ecosystem -FROM ecosystem_aggregated_metrics -WHERE dt >= today() - 7 -``` - -Test in [Queries](https://queries.santiment.net/query/ecosystem-example-482) - -> In that table you can find dev activity metrics like -* `ecosystem_github_activity` -* `ecosystem_dev_activity` -* `ecosystem_github_activity_contributors_count` -* `ecosystem_dev_activity_contributors_count`, etc. - -Here's an example how to get ecosystem_github_activity_contributors_count for ethereum: - -```SQL -SELECT - dt, - get_metric_name(metric_id) AS metric, - value -FROM ecosystem_aggregated_metrics FINAL -WHERE - dt >= toDateTime('2024-01-01 00:00:00') - AND ecosystem = 'ethereum' - AND metric_id = get_metric_id('ecosystem_github_activity_contributors_count') -ORDER BY dt DESC -LIMIT 5 -``` - -Test in [Queries](https://queries.santiment.net/query/ecosystem-aggregated-metrics-example-483) - ---- - -### intraday_nft_metrics - -A table `intraday_nft_metrics` was created to store intraday nft metrics which are related to whole nft collection or to specific tokens within nft collection. Here's an example how to get floor price for boredapeyachtclub collection: - -```SQL -SELECT - dt, value -FROM intraday_nft_metrics -WHERE - dt >= toDateTime('2024-01-01 00:00:00') - AND asset_id = get_asset_id('ethereum') - AND metric_id = get_metric_id('nft_collection_min_price') - AND collection_name = 'boredapeyachtclub' -LIMIT 5 -``` - -Test in [Queries](https://queries.santiment.net/query/intraday-nft-metrics-example-485) - ---- - -## Use Cases and Other tables - -### Metadata tables - -There are few metadata tables storing data about metrics, assets and label_fqns: - -* `metric_metadata` stores metric name, ID, metric version, etc. -* `asset_metadata` stores asset name, ID, decimals, contract_addresses, ticker and slug, etc. -* `label_metadata` stores label fqn, ID and other label related info. - -Using these table you can navigate through a wide range of Santiment datasets. For instance, you're able to -find all price-related metrics with a simple query: - -```SQL -SELECT DISTINCT name, metric_id -FROM metric_metadata -WHERE name LIKE '%price%' -``` - -Test in [Queries](https://queries.santiment.net/query/price-related-metrics-example-488) - -Also you're able to find deciamals and contract addresses for a particular asset, e.g. uniswap: - -```SQL -SELECT DISTINCT name, asset_id, decimals, contract_addresses -FROM asset_metadata -WHERE name = 'uniswap' -``` -``` -┌───────name─┬──asset_id─┬──deciamls─┬──────────contract_addresses───────────────────────────┐ -│ 'uniswap' 2825 18 ['0x1f9840a85d5af5bf1d1762f925bdaddc4201f984'] │ -└─────────────┴────────────┴─────────────┴───────────────────────────────────────────────────────────┘ -``` - - -### Using precomputed metrics to build new metrics - -Not all metrics are build from the raw data only. Some of the metrics are -computed by combining a set of pre-computed metrics. - -The MVRV is defined as the ratio between the Market Value and Realized Value. -The total supply is part of the numerator and the denominator, so it can be -eliminated. The result is that the numerator is just `price_usd` and the -denominator is `realized_price_usd`. There are precomputed metrics for both, so -we can use them to compute the MVRV (and that's how we do it for the official -MVRV metric!). Depending on the load on the database, the query duration can -vary. At the moment of writing this, running the query takes 0.13 seconds. - -In the query `anyIf` is used as there is filtering by `asset_id` and -`metric_id`, so there is only one value per metric for each `dt`. The example -after that discusses how to handle more complex `GROUP BY` clauses. - -```sql -SELECT - dt, - get_asset_name(any(asset_id)) AS asset, - anyIf(value, metric_id=get_metric_id('price_usd')) AS numerator, - anyIf(value, metric_id=get_metric_id('mean_realized_price_usd_intraday_20y')) AS denominator, - numerator / denominator AS mvrv_usd_ratio, - floor((mvrv_usd_ratio - 1) * 100, 2) AS mvrv_usd_percent -FROM intraday_metrics FINAL -WHERE - asset_id = get_asset_id('bitcoin') AND - metric_id IN (get_metric_id('price_usd'), get_metric_id('mean_realized_price_usd_intraday_20y')) AND - dt >= toDateTime('2022-01-01 00:00:00') -GROUP BY dt -ORDER BY dt ASC -LIMIT 10 -``` -Test in [Queries](https://queries.santiment.net/query/usage-of-precomputed-metrics-example-415) - -``` -┌──────────────────dt─┬─asset───┬──────────numerator─┬────────denominator─┬─────mvrv_usd_ratio─┬─mvrv_usd_percent─┐ -│ 2022-01-01 00:00:00 │ bitcoin │ 46378.15778582922 │ 23002.992048445383 │ 2.0161793599786777 │ 101.61 │ -│ 2022-01-01 00:05:00 │ bitcoin │ 46394.94838737312 │ 23002.992048445383 │ 2.016909291176695 │ 101.69 │ -│ 2022-01-01 00:10:00 │ bitcoin │ 46376.92099283003 │ 23002.997373190537 │ 2.0161251266707207 │ 101.61 │ -│ 2022-01-01 00:15:00 │ bitcoin │ 46342.625905845896 │ 23002.997373190537 │ 2.01463423022676 │ 101.46 │ -│ 2022-01-01 00:20:00 │ bitcoin │ 46349.908441099375 │ 23002.95114246238 │ 2.014954870531355 │ 101.49 │ -│ 2022-01-01 00:25:00 │ bitcoin │ 46419.391208461006 │ 23002.920905515144 │ 2.0179781254358686 │ 101.79 │ -│ 2022-01-01 00:30:00 │ bitcoin │ 46423.024145185496 │ 23002.93075048584 │ 2.0181351954122198 │ 101.81 │ -│ 2022-01-01 00:35:00 │ bitcoin │ 46499.005410722944 │ 23002.948585722002 │ 2.021436740487479 │ 102.14 │ -│ 2022-01-01 00:40:00 │ bitcoin │ 46573.474600493675 │ 23002.95629498449 │ 2.024673437763669 │ 102.46 │ -│ 2022-01-01 00:45:00 │ bitcoin │ 46647.52193392966 │ 23003.039167275976 │ 2.0278851674647504 │ 102.78 │ -└─────────────────────┴─────────┴────────────────────┴────────────────────┴────────────────────┴──────────────────┘ -``` - -To return only some of the columns, the query can be provided as a FROM subquery. This does not induce any -performence degradation. This example also shows how the [WITH Clause](https://clickhouse.com/docs/en/sql-reference/statements/select/with/) -can be used to avoid string literals repetition. - -```sql -WITH - get_metric_id('price_usd') AS price_usd_metric_id, - get_metric_id('mean_realized_price_usd_intraday_20y') AS realized_price_usd_metric_id -SELECT - dt, - price_usd / realized_price_usd AS mvrv_usd_ratio, - floor((mvrv_usd_ratio - 1) * 100, 2) AS mvrv_usd_percent -FROM ( - SELECT - dt, - get_asset_name(any(asset_id)) AS asset, - anyIf(value, metric_id=price_usd_metric_id) AS price_usd, - anyIf(value, metric_id=realized_price_usd_metric_id) AS realized_price_usd - FROM intraday_metrics FINAL - WHERE - asset_id = get_asset_id('bitcoin') AND - metric_id IN (price_usd_metric_id, realized_price_usd_metric_id) AND - dt >= toDateTime('2022-01-01 00:00:00') - GROUP BY dt -) -ORDER BY dt ASC -LIMIT 10 -``` -Test in [Queries](https://queries.santiment.net/query/with-example-416) - -The next query demonstrates what needs to be done if there is a need to -aggregate the datetime instead of getting a value for each `dt`: - -```sql -WITH - get_metric_id('price_usd') AS price_usd_metric_id, - get_metric_id('mean_realized_price_usd_intraday_20y') AS realized_price_usd_metric_id -SELECT - month, - price_usd / realized_price_usd AS mvrv_usd_ratio, - floor((mvrv_usd_ratio - 1) * 100, 2) AS mvrv_usd_percent -FROM ( - SELECT - toStartOfMonth(dt) AS month, - get_asset_name(any(asset_id)) AS asset, - argMaxIf(value, dt, metric_id=price_usd_metric_id) AS price_usd, - argMaxIf(value, dt, metric_id=realized_price_usd_metric_id) AS realized_price_usd - FROM intraday_metrics FINAL - WHERE - asset_id = get_asset_id('bitcoin') AND - metric_id IN (price_usd_metric_id, realized_price_usd_metric_id) AND - dt >= toDateTime('2022-01-01 00:00:00') - GROUP BY month -) -ORDER BY month ASC -LIMIT 10 -``` -Test in [Queries](https://queries.santiment.net/query/with-example-with-aggregated-dt-417) - -The following row needs some explanation: -```sql -argMaxIf(value, dt, metric_id=get_metric_id('price_usd')) AS price_usd, -``` - -This function call has three parameters: -- `value` - This is the column that is returned -- `dt` - This is the column that `max` is performed upon. Of all columns - matching the filter, the one with the max `dt` is returned. -- `metric_id=get_metric_id('price_usd')` - This a boolean expression. Look only - at the rows for which the expression evaluates to true. - -If the `FINAL` keyword is not used, taking the row with biggest `computed_at` -among those with the same `dt` can be achieved by using a tuple as a second -argument: - -```sql -argMaxIf(value, (dt, computed_at), metric_id=get_metric_id('price_usd')) AS price_usd, -``` - - - - - - - diff --git a/src/docs/santiment-queries/nft-tables/index.md b/src/docs/santiment-queries/nft-tables/index.md deleted file mode 100644 index 47db0001b..000000000 --- a/src/docs/santiment-queries/nft-tables/index.md +++ /dev/null @@ -1,306 +0,0 @@ ---- -title: NFT Tables Overview -author: Santiment Team -date: 2023-01-30 -description: Learn about the Non-Fungible Token (NFT) tables stored in Santiment Queries for easy access and analysis. ---- - -## Overview - -NFT stands for Non-Fungible Token, which is a digital asset that represents ownership of a unique item or piece of content, such as art, music, video, or tweets. NFTs differ from cryptocurrencies because each NFT is unique and cannot be exchanged one-to-one, while cryptocurrencies are interchangeable. - -NFTs are created using blockchain technology, which provides a secure and transparent record of ownership and transfer. This allows creators and owners to prove ownership, authenticity, and rarity, potentially increasing the value of their digital assets over time. - -In **Santiment Queries**, we collect data for all NFTs from exchanges on: - -### Ethereum: -- CryptoPunks -- Foundation -- LooksRare -- OpenSea -- Rarible -- SuperRare - - -The Polygon chain has been deprecated as of October 28th 2024 and is no longer supported. - - -This information allows you to effortlessly track a specific NFT or an entire collection, as well as investigate past prices and owners. - -## List of NFT Tables - -All our tables that contain NFT-related data have the string 'nft' in their name. To find them yourself, run the following query: - -```sql -SHOW TABLES LIKE '%nft%' -``` - -The result will display the NFT-related tables: - -``` -┌─name───────────────────┐ -│ nft_trades │ -│ nft_tokens_metadata │ -│ intraday_nft_metrics │ -└────────────────────────┘ -``` - -## Exploring the Tables - -We can inspect the tables using the commands we learned in [Exploration](/santiment-queries/exploration/). - -Below, we have listed all the NFT tables with their columns, brief descriptions, and some example queries that you can use to explore the tables. - -### nft\_trades - -The `nft_trades` table is designed to store information about the NFT trades that we have collected. It has the following columns: - -- **dt** (*DateTime*): When the transaction happened. -- **blockchain** (*String*): The blockchain on which the transaction occurred. -- **tx_hash** (*String*): Unique identifier generated when the transaction was executed. -- **log_index** (*UInt32*): Log index of the trade event. -- **platform** (*String*): Name of the platform where trades occurred, such as OpenSea, CryptoPunks, etc. -- **seller_address** (*String*): Address of the seller. -- **buyer_address** (*String*): Address of the buyer. -- **nft_contract_address** (*String*): Address of the NFT's collection. -- **currency_contract_address** (*Nullable(String)*): Identifier of the currency used in the trade. It is empty if the native coin was used (Ether or Matic), otherwise, it is the address of the ERC20 token's smart contract. -- **asset_ref_id** (*UInt64*): Reference ID of the currency contract that can be used to retrieve additional information about the asset from the `asset_metadata` table. -- **token_ids** (*Array(String)*): Array of NFT token IDs in hex that were exchanged in the trade. Usually, only one is exchanged. -- **amount_tokens** (*Array(String)*): Array of amounts, which describes how many tokens were transferred. -- **nft_contract_type** (*UInt8*): Type of NFT contract, 0 - ERC721, 1 - ERC1155. Based on the signature of the transfer. -- **amount** (*String*): The amount of the transaction in the asset used in it. -- **complete** (*UInt8*): State of the transaction (1 means it is completed). -- **computed_at** (*DateTime*): The timestamp when the trade was inserted into the table. - -### nft\_tokens\_ metadata - -The `nft_tokens_metadata` is a table designed to store information about NFT tokens. It has the following columns: - -- **blockchain** (*String*): Refers to the decentralized platform on which the NFT exists, e.g. Ethereum, Binance Smart Chain, etc. -- **address** (*String*): Represents the unique public address of the NFT owner. -- **token_id** (*String*): Unique identifier assigned to each NFT in decimal, used to distinguish it from others. -- **uri** (*Nullable(String)*): Uniform Resource Identifier, a link that directs to additional information or media related to the NFT. -- **data** (*Nullable(String)*): Contains the NFT's metadata, such as its name, image, and any other relevant information in JSON format. -- **created_at** (*DateTime*): The date and time when the NFT was created. -- **error** (*Nullable(String)*): Any error message associated with the NFT, such as a transaction failure, if applicable. This column is used to track and monitor any issues that arise in the NFT creation process. - -### intraday\_nft\_metrics - -The `intraday_nft_metrics` is a table designed to store intraday metrics for NFT assets. The table has the following columns: - -- **asset_id** (*UInt64*): ID of the currency used in value calculation (ETH or WETH). -- **metric_id** (*UInt64*): Unique identifier assigned to the specific metric being recorded. -- **address** (*String*): Represents the address of the NFT collection. -- **collection_name** (*String*): The name of the NFT collection that the asset belongs to. -- **token_id** (*Nullable(UInt64)*): Unique identifier assigned to each NFT, used to distinguish it from others. -- **dt** (*DateTime*): The date and time when the metric was recorded. -- **value** (*Float64*): The value of the metric recorded at the specified `dt`. -- **computed_at** (*DateTime*): The timestamp when the trade was inserted into the table. This is used to track the accuracy of the metric calculation and to ensure that the most up-to-date information is available. - -There are currently 16 metrics we track: - -| ID | Name | Additional Information | -|------|-------------------------------|-----------------------------------------------------------------------------------------| -| 1279 | nft_collection_min_price | [more information](/metrics/nft-collection-price/#nft-collection-price) | -| 1280 | nft_collection_max_price | [more information](/metrics/nft-collection-price/#nft-collection-price) | -| 1281 | nft_collection_avg_price | [more information](/metrics/nft-collection-price/#nft-collection-price) | -| 1282 | nft_collection_trades_count | [more information](/metrics/nft-collection-price/#nft-collection-price) | -| 1283 | nft_collection_min_price_usd | [more information](/metrics/nft-collection-price/#nft-collection-price) | -| 1284 | nft_collection_max_price_usd | [more information](/metrics/nft-collection-price/#nft-collection-price) | -| 1285 | nft_collection_avg_price_usd | [more information](/metrics/nft-collection-price/#nft-collection-price) | -| 1288 | nft_market_volume | [more information](/metrics/nft-market-volume) | -| 1289 | nft_market_count | [more information](/metrics/nft-market-volume) | -| 1290 | nft_collection_holders_balance| [more information](/metrics/nft-collection-holders-balance) | -| 1291 | nft_network_profit_loss | [more information](/metrics/nft-network-profit-loss) | -| 1292 | nft_network_profit_loss_usd | [more information](/metrics/nft-network-profit-loss) | -| 1293 | nft_collection_profit_loss | [more information](/metrics/nft-network-profit-loss) | -| 1294 | nft_collection_profit_loss_usd| [more information](/metrics/nft-network-profit-loss) | - -## Sample Queries - -### Number of Unique NFT Owners - -Check the number of unique wallets that have owned an NFT in the last 7 days. - -```sql -SELECT countDistinct(buyer_address) AS uniqueBuyers -FROM nft_trades -WHERE dt >= (now() - INTERVAL 6 DAY) -``` - -Test in [Queries](https://queries.santiment.net/query/number-of-unique-nft-owners-397) - -### Unique NFT Platforms Ordered by Sales - -Check the platforms ordered by sales for the last 7 days: - -```sql -SELECT - platform, - count(platform) AS sales -FROM nft_trades -WHERE (complete = 1) AND (dt >= (now() - toIntervalDay(6))) -GROUP BY platform -ORDER BY sales DESC -``` - -Test in [Queries](https://queries.santiment.net/query/unique-nft-platforms-ordered-by-sales-398). - ---- - -### Number of Unique Sales for a Platform - -To find the number of unique sales for a platform (in this case, 'opensea') for the last 5 months, split by month, use the following SQL query: - -```sql -SELECT - toStartOfMonth(dt) AS month, - count(platform) AS sales -FROM nft_trades -WHERE (complete = 1) AND (dt >= (now() - toIntervalMonth(4))) AND (platform = 'opensea') -GROUP BY month -``` - -Test in [Queries](https://queries.santiment.net/query/number-of-unique-sales-for-a-platform-399) - ---- - -### Top 10 Buyers by Completed Purchases - -To find the top 10 buyers ordered by the count of completed purchases in the last 5 days, use the following query. To find the top 10 sellers, simply swap `buyer_address` with `seller_address`. - -```sql -SELECT - buyer_address, - platform, - count(platform) AS purchases -FROM nft_trades -WHERE (complete = 1) AND (dt >= (now() - toIntervalDay(4))) -GROUP BY - buyer_address, - platform -ORDER BY purchases DESC -LIMIT 10 -``` - -Test in [Queries](https://queries.santiment.net/query/top-10-buyers-by-completed-purchases-400) - ---- - -### Summed Amounts of Assets for a Platform - -Get the unique assets for the last 7 days for a single platform with summed amounts. You can get similar information for buyers and sellers by swapping the platform in the `WHERE` clause with buyer/seller. - -```sql -SELECT - DISTINCT tb1.asset_ref_id, - tb2.name, - tb1.sum_amount -FROM ( - SELECT - asset_ref_id, - sum(CAST(amount, 'UInt64')) AS sum_amount - FROM nft_trades - WHERE - dt >= (now() - INTERVAL 6 DAY) and platform = 'opensea' - GROUP BY asset_ref_id - ORDER BY sum_amount -) AS tb1 -INNER JOIN asset_metadata AS tb2 ON tb1.asset_ref_id = tb2.asset_ref_id -ORDER BY sum_amount DESC -``` - -Test in [Queries](https://queries.santiment.net/query/summed-amounts-of-assets-for-a-platform-401) - ---- - -### Collections Ranked by Traded Tokens - -This query ranks collections based on the number of traded tokens in the collection for the last 5 days. - -```sql -SELECT - nft_contract_address, - platform, - count(token_ids) as number_of_traded_nfts -FROM nft_trades -WHERE (complete = 1) and (dt >= NOW() - toIntervalDay(4)) -GROUP BY - nft_contract_address, - platform -ORDER BY number_of_traded_nfts desc -LIMIT 10 -``` - -Test in [Queries](https://queries.santiment.net/query/collections-ranked-by-traded-tokens-402) - ---- - -### Collections Ranked by Recorded Tokens - -This query ranks collections based on the number of recorded tokens in each collection. - -```sql -SELECT - blockchain, - address, - COUNT(token_id) as number_of_nfts -FROM - nft_tokens_metadata -GROUP BY - blockchain, - address -ORDER BY - number_of_nfts DESC -LIMIT 10 -``` - -Test in [Queries](https://queries.santiment.net/query/collections-ranked-by-recorded-tokens-403). - ---- - -### Retrieve All Tokens with Additional Information for an Address - -To get all the tokens and their related information for a given address, use the following SQL query: - -```sql -SELECT - token_id, - simpleJSONExtractString(data, 'name') as token_name, - simpleJSONExtractString(data, 'description') as token_description, - simpleJSONExtractString(data, 'external_url') as external_url -FROM nft_tokens_metadata -WHERE address = '0x76be3b62873462d2142405439777e971754e8e77' -ORDER BY token_id -``` - -Test in [Queries](https://queries.santiment.net/query/retrieve-all-tokens-with-additional-information-for-an-address-404). - ---- - -### NFT trades in USD for an address -Recent NFT trades volume of an address with amount calculated in USD - -```sql -SELECT day_dt, SUM((amount/POW(10, decimals))*price) as volume_usd FROM ( - SELECT - toDate(dt) as day_dt, - dictGet('default.assets_by_ref_id', 'decimals', asset_ref_id) as decimals, - dictGet('default.assets_by_ref_id', 'asset_id', asset_ref_id) as asset_id, - SUM(toInt256(amount)) as amount - FROM nft_trades - WHERE ( - buyer_address == '0x94fc70cffb47fc77d16f7997acd527e45a87b050' - OR - seller_address == '0x94fc70cffb47fc77d16f7997acd527e45a87b050' - ) AND blockchain = 'ethereum' AND dt >= toDate(NOW()) - INTERVAL 7 DAY - GROUP BY day_dt, asset_id, decimals -) INNER JOIN ( - SELECT dt as day_dt, asset_id, value as price - FROM daily_metrics_v2 - WHERE metric_id = (SELECT metric_id FROM metric_metadata FINAL WHERE name = 'daily_avg_price_usd') -) USING day_dt, asset_id -GROUP BY day_dt -``` - -Test in [Queries](https://queries.santiment.net/query/nft-trades-in-usd-for-an-address-405) diff --git a/src/docs/santiment-queries/prices-tables/index.md b/src/docs/santiment-queries/prices-tables/index.md deleted file mode 100644 index 031439e37..000000000 --- a/src/docs/santiment-queries/prices-tables/index.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: "Fetching Prices, Volume, and Market Cap using Santiment Queries" -author: Santiment Team -date: 2023-05-30 -description: Learn how to extract cryptocurrency asset prices, trading volume, and market cap data using the asset_prices_v3 table in Santiment Queries. ---- - -## Overview - -Santiment Queries' `asset_prices_v3` table serves as a critical tool for procuring accurate and detailed information about cryptocurrency asset prices, volume, and market capitalization at any given timestamp. This guide aims to introduce you to the table's structure and its versatile applications. - -Data for the `asset_prices_v3` table is sourced from two primary platforms - Coinmarketcap and Cryptocompare. - -## Table Structure - -The `asset_prices_v3` table offers extensive information about cryptocurrency asset prices at various timestamps. Here are the key columns you should be familiar with: - -- **dt** (*DateTime*): This column signifies the timestamp of the data. -- **source** (*LowCardinality(String)*): Specifies the data's origin, either `coinmarketcap` or `cryptocompare`. -- **slug** (*LowCardinality(String)*): The name of the cryptocurrency project (e.g., 'bitcoin', 'ethereum'). -- **price_usd** (*Float64*): The price of the asset in USD. -- **price_btc** (*Float64*): The price of the asset in Bitcoin. -- **marketcap_usd** (*Float64*): The market capitalization of the asset in USD. -- **volume_usd** (*Float64*): The rolling total trading volume of the asset in USD for last 24 hours - -## Sample Queries - -### Query 1: Fetch the Daily Closing Price of Bitcoin for the Past Week - -The following SQL query allows you to extract the daily closing price of Bitcoin for the last seven days. - -```sql -SELECT - toDate(dt) as date, - argMax(price_usd, dt) as closing_price -FROM - asset_prices_v3 -WHERE - slug = 'bitcoin' - AND dt >= (now() - interval 7 day) -GROUP BY - date -ORDER BY - date DESC -``` - -Test in [Queries](https://queries.santiment.net/query/fetch-the-daily-closing-price-of-bitcoin-for-the-past-week-406) - -### Query 2: Identify the Top Projects by USD Trading Volume in the Past 24 Hours - -To retrieve the top 20 cryptocurrency projects ranked by their average trading volume in USD over the last 24 hours, use the following SQL query. - -```sql -SELECT - slug, - AVG(volume_usd) as avg_volume -FROM - asset_prices_v3 -WHERE - dt >= (now() - interval 24 hour) -GROUP BY - slug -ORDER BY - avg_volume DESC -LIMIT 20; -``` - -Test in [Queries](https://queries.santiment.net/query/identify-the-top-projects-by-usd-trading-volume-in-the-past-24-hours-407) \ No newline at end of file diff --git a/src/docs/santiment-queries/rate-limits-and-credits-cost/index.md b/src/docs/santiment-queries/rate-limits-and-credits-cost/index.md deleted file mode 100644 index 5582090b5..000000000 --- a/src/docs/santiment-queries/rate-limits-and-credits-cost/index.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: Rate Limits, Restrictions and Credits Cost -author: Santiment Team -date: 2023-05-19 -description: What limits are applied when running queries? ---- - -## Overview - -Santiment Queries is a powerful tool that provides users with access to a Clickhouse database, enabling them to execute SQL queries and obtain relevant metrics. These queries are executed as GraphQL API calls. -The queries executed can vastly differ in their resource consumption. Because of that, there is an additional credits model that restricts the queries. - -## API Calls Rate Limits - -The queries are executed as ordinary GraphQL API calls. The same [rate limits](/sanapi/rate-limits) apply to these SQL queries as well. - -## Execution Restrictions - -When executing a query there are two main restrictions that are applied which, if exceeded, will stop the execution of the query and return an error. - -**Timeout**: The query execution must finish in 60 seconds -**RAM memory consumption**: If the query needs more than 10GB of RAM memory to run, it will be terminated. - - -## Credits Cost - -The execution of a query spends RAM, CPU and IO (disk) resources. The combination of all resources spent with the size of the result is used to compute the cost of the query. The bigger the result and the more resources are spent, the higher the cost of the query. - -The available credits per month are determined by the subscription plan. - - -Check the plans and restrictions for **Sanbase** subscriptions on the: -- [Sanbase pricing page](https://app.santiment.net/pricing?plans=individual) -- [Sanbase plans academy page](/products-and-plans/sanbase-plans/) - -Check the plans and restrictions for **API** subscriptions on the: -- [API pricing page](https://app.santiment.net/pricing?plans=business) -- [API plans academy page](/products-and-plans/sanapi-plans/) - -### Example - -The example below shows how you can check the credits cost of your query. -```graphql -{ - runRawSqlQuery(sqlQueryText: "SELECT * FROM intraday_metrics limit 5", sqlQueryParameters: "{}") { - clickhouseQueryId - rows - columns - } -} -``` -```json -{ - "data": { - "runRawSqlQuery": { - "clickhouseQueryId": "2d579859-c098-44b8-88ea-c7ebb45c9ee3", - "columns": [ - "asset_id", - "metric_id", - "dt", - "value", - "computed_at", - "block_number", - "is_finalized", - "seq_num" - ], - "rows": [ - [ 1369, 1175, "2024-04-01T00:00:00Z", 0, "2024-10-01T17:50:01Z", 0, true, 0 ], - [ 1369, 1175, "2024-04-02T00:00:00Z", 0, "2024-10-01T17:50:01Z", 0, true, 0 ], - [ 1369, 1175, "2024-04-03T00:00:00Z", 0, "2024-10-01T17:50:01Z", 0, true, 0 ], - [ 1369, 1175, "2024-04-04T00:00:00Z", 0, "2024-10-01T17:50:01Z", 0, true, 0 ], - [ 1369, 1175, "2024-04-05T00:00:00Z", 0, "2024-10-01T17:50:01Z", 0, true, 0 ] - ] - } - } -} -``` - -In order to check the credits cost, the `clickhouseQueryId` needs to be taken and provided to another query. -It is important to note that the credit cost is not immediately available after the execution of the query. -```graphql -{ - getClickhouseQueryExecutionStats(clickhouseQueryId: "175F9502835E975E") { - creditsCost - cpuTimeMicroseconds - memoryUsageGb - queryDurationMs - readGb - readCompressedGb - readRows - resultGb - resultRows - } -} -``` -```json -{ - "data": { - "getClickhouseQueryExecutionStats": { - "cpuTimeMicroseconds": 41156, - "creditsCost": 1, - "memoryUsageGb": 0.011724, - "queryDurationMs": 69, - "readCompressedGb": 0.000001, - "readGb": 0, - "readRows": 10, - "resultGb": 0, - "resultRows": 5 - } - } -} -``` - -In the same query if 100 thousand rows are returned instead of just 5, the credit cost jumps to 109. diff --git a/src/docs/santiment-queries/writing-sql-queries/index.md b/src/docs/santiment-queries/writing-sql-queries/index.md deleted file mode 100644 index a258c15d1..000000000 --- a/src/docs/santiment-queries/writing-sql-queries/index.md +++ /dev/null @@ -1,420 +0,0 @@ ---- -title: Writing SQL Queries -author: Santiment Team -date: 2022-08-17 -description: First steps in using SQL combined with Santiment's datasets ---- - -## Overview - -This document introduces the reader to the basics of Clickhouse SQL and Santiment's datasets. - -The available datasets contain two types of data: - -- Precomputed metrics: These are calculated and stored using raw data and preprocessing, such as `mvrv_usd` or `daily_active_addresses`. -- Raw data: This includes information like transfers, balances, labels, events, and more. - -## Clickhouse Overview - -[Clickhouse](https://clickhouse.com/) is a true Column-Oriented Database Management System that excels in storing and working with metrics and crypto-related data due to its exceptional speed. Clickhouse SQL is similar to ANSI SQL with some unique features. It supports `SELECT`, `GROUP BY`, `JOIN`, `ORDER BY`, subqueries in `FROM`, `IN` operator and subqueries in `IN` operator, window functions, numerous aggregate functions (avg, max, min, last, first, etc.), scalar subqueries, and more. - -To achieve the highest possible performance, some features are not present: - -- No support for foreign keys, but they are simulated in some existing tables (holding pre-computed metrics mostly). For example, there is an `asset_id` column in the `intraday_metrics` table, and an `asset_metadata` table to which the `asset_id` refers. The lack of foreign key support means that the database cannot guarantee referential integrity, so it is enforced by application-level code. -- No full-fledged transactions. The SQL Editor has read-only access, and Clickhouse is used mainly as append-only storage, so the lack of transactions does not cause any issues for this use case. - -Official [Clickhouse SQL Reference](https://clickhouse.com/docs/en/sql-reference/) - -Some important pages containing useful information: - -- [Syntax](https://clickhouse.com/docs/en/sql-reference/syntax/) -- [SELECT Statements](https://clickhouse.com/docs/en/sql-reference/statements/select/) -- [Functions](https://clickhouse.com/docs/en/sql-reference/functions/) -- [Operators](https://clickhouse.com/docs/en/sql-reference/operators/) -- [Aggregate Functions](https://clickhouse.com/docs/en/sql-reference/aggregate-functions/) - -## The FINAL keyword - -> Note: This part is more technical - -There are some keywords that can often be seen in Clickhouse SQL but are not -seen in other known SQL variants. These keywords are explained here. - -Values in Clickhouse tables are not updated directly. Instead, in case there is a need to -modify an existing row, the [MergeTree Table Engine](https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree/) is used. -In order to update an existing row, a new row with the same primary key is -inserted. At some unspecified point in time, Clickhouse will merge all rows with -the same primary key into one. Until that merge happens, all rows will exist and -will appear in selects. - -Example: There is one value per day for an asset-metric pair in the -`daily_metrics_v2` table. The value is recomputed every hour and a new row with -the same primary key but different `value` and `computed_at` is inserted. - -In order to read the data as if it is already merged, you need to add the -`FINAL` keyword after the table name: -```sql -SELECT dt, value -FROM daily_metrics_v2 FINAL -WHERE asset_id = get_asset_id('bitcoin') AND metric_id = get_metric_id('daily_active_addresses') -ORDER BY dt DESC -LIMIT 2 -``` -Test in [Queries](https://queries.santiment.net/query/final-example-408) - -This `FINAL` keyword is not free - it slightly reduces the performance. In case -performance is seeked, the same goal can be achieved with standard SQL by using -`GROUP BY` the primary key and aggregate functions. This approach has smaller -performance penalty at the cost of code readability and maintainability. -```sql -SELECT dt, argMax(value, computed_at) -FROM daily_metrics_v2 -WHERE asset_id = get_asset_id('bitcoin') AND metric_id = get_metric_id('daily_active_addresses') -GROUP BY dt, asset_id, metric_id -ORDER BY dt DESC -LIMIT 2 -``` - -Test in [Queries](https://queries.santiment.net/query/without-final-example-409) - -## The PREWHERE Clause - -In addition to the standard [WHERE](https://clickhouse.com/docs/en/sql-reference/statements/select/where) clause, Clickhouse also supports the [PREWHERE](https://clickhouse.com/docs/en/sql-reference/statements/select/prewhere/) clause. This optimization allows for more efficient filtering by initially reading only the columns necessary for executing the filtering expression. - -When the `FINAL` keyword is not used, the `WHERE` clause is automatically transformed into a `PREWHERE` clause. However, when the `FINAL` keyword is used, the `WHERE` clause does not automatically transform into a `PREWHERE` clause. This transformation in the latter case can lead to different results if columns that are not part of the primary key are used in the filtering. - -It is recommended not to use the `PREWHERE` clause unless you are certain of its implications and effects on your query. - -## Using Pre-computed Metrics - -We store pre-computed metrics in tables that are described on [this page](/santiment-queries/metric-tables). - -Let's use `daily_metrics_v2` table as an example. Here's a schema for this table: - -- `dt` - A `DateTime` field storing the corresponding date and time. -- `asset_id` - An `UInt64` unique identifier for an asset. The data for that ID is stored in the `asset_metadata` table. -- `metric_id` - An `UInt64` unique identifier for a metric. The data for that ID is stored in the `metric_metadata` table. -- `value` - A `Float` column holding the metric's value for the given asset/metric pair. -- `computed_at` - A `DateTime` column storing the date and time when the given row was computed. - -### Fetch data for asset bitcoin and metric **daily_active_addresses** - -The following example shows how to fetch rows for Bitcoin's -`daily_active_addresses` metric: -```SQL -SELECT asset_id, metric_id, dt, value -FROM daily_metrics_v2 FINAL -WHERE - asset_id = (SELECT asset_id FROM asset_metadata FINAL WHERE name = 'bitcoin' LIMIT 1) AND - metric_id = (SELECT metric_id FROM metric_metadata FINAL WHERE name = 'daily_active_addresses' LIMIT 1) AND - dt >= toDateTime('2020-01-01 00:00:00') -LIMIT 2 -``` - -Test in [Queries](https://queries.santiment.net/query/fetch-data-for-asset-bitcoin-and-metric-daily-active-addresses-410) - -``` -┌─asset_id─┬─metric_id─┬─────────dt─┬──value─┐ -│ 1452 │ 74 │ 2020-01-01 │ 522172 │ -│ 1452 │ 74 │ 2020-01-02 │ 678391 │ -└──────────┴───────────┴────────────┴────────┘ -``` - -The query is lengthy and contains parts that will be often used in -queries - the `asset_id` and `metric_id` filtering. For this reason, predefined functions can be used to simplify fetching those ids. - -```SQL -SELECT asset_id, metric_id, dt, value -FROM daily_metrics_v2 FINAL -WHERE - asset_id = get_asset_id('bitcoin') AND - metric_id = get_metric_id('daily_active_addresses') AND - dt >= toDateTime('2020-01-01 00:00:00') -LIMIT 2 -``` - -Test in [Queries](https://queries.santiment.net/query/predef-example-411) - -The result still contains the integer representation of the asset and metric. To -convert the `asset_id` to the asset name and the `metric_id` to the metric name -there are a few options: -- Join the result with the `asset_metadata` and `metric_metadata` tables. This - works, but is highly verbose. -- Use [dictionaries](https://clickhouse.com/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts) that store these mappings and can be used without JOIN. - -```SQL -SELECT - dt, - dictGetString('asset_metadata_dict', 'name', asset_id) AS asset, - dictGetString('metric_metadata_dict', 'name', metric_id) AS metric, - value -FROM daily_metrics_v2 FINAL -WHERE - asset_id = get_asset_id('bitcoin') AND - metric_id = get_metric_id('daily_active_addresses') AND - dt >= toDateTime('2020-01-01 00:00:00') -LIMIT 2 -``` -Test in [Queries](https://queries.santiment.net/query/dict-example-412) - -``` -┌─────────dt─┬─asset───┬─metric─────────────────┬─value─┐ -│ 2022-06-30 │ bitcoin │ daily_active_addresses │ 0 │ -│ 2022-07-01 │ bitcoin │ daily_active_addresses │ 0 │ -└────────────┴─────────┴────────────────────────┴───────┘ -``` - -As with the `asset_id` and `metric_id` filtering, there are functions that -simplify the dictionary access as well. - -```SQL -SELECT - dt, - get_asset_name(asset_id) AS asset, - get_metric_name(metric_id) AS metric, - value -FROM daily_metrics_v2 FINAL -WHERE - asset_id = get_asset_id('bitcoin') AND - metric_id = get_metric_id('daily_active_addresses') AND - dt >= toDateTime('2020-01-01 00:00:00') -LIMIT 2 -``` -Test in [Queries](https://queries.santiment.net/query/dict-example-with-func-413) - -To obtain the average value per month, aggregation and grouping must be used. -When grouping, all columns not part of the `GROUP BY` must have an aggregation -applied. In this case, as there is data for a single asset and a single metric, -their corresponding id columns can be aggregated with `any` as all these values -are the same. - -```SQL -SELECT - toStartOfMonth(dt) AS month, - get_asset_name(any(asset_id)) AS asset, - get_metric_name(any(metric_id)) AS metric, - floor(avg(value)) AS monthly_avg_value -FROM daily_metrics_v2 FINAL -WHERE - asset_id = get_asset_id('bitcoin') AND - metric_id = get_metric_id('daily_active_addresses') AND - dt >= toDateTime('2020-01-01 00:00:00') -GROUP BY month -LIMIT 12 -``` -Test in [Queries](https://queries.santiment.net/query/group-by-example-414) - -``` -┌──────month─┬─asset───┬─metric─────────────────┬─monthly_avg_value─┐ -│ 2020-01-01 │ bitcoin │ daily_active_addresses │ 712767 │ -│ 2020-02-01 │ bitcoin │ daily_active_addresses │ 758896 │ -│ 2020-03-01 │ bitcoin │ daily_active_addresses │ 738555 │ -│ 2020-04-01 │ bitcoin │ daily_active_addresses │ 803423 │ -│ 2020-05-01 │ bitcoin │ daily_active_addresses │ 896321 │ -│ 2020-06-01 │ bitcoin │ daily_active_addresses │ 876348 │ -│ 2020-07-01 │ bitcoin │ daily_active_addresses │ 958904 │ -│ 2020-08-01 │ bitcoin │ daily_active_addresses │ 984239 │ -│ 2020-09-01 │ bitcoin │ daily_active_addresses │ 982237 │ -│ 2020-10-01 │ bitcoin │ daily_active_addresses │ 942581 │ -│ 2020-11-01 │ bitcoin │ daily_active_addresses │ 1026279 │ -│ 2020-12-01 │ bitcoin │ daily_active_addresses │ 1072016 │ -└────────────┴─────────┴────────────────────────┴───────────────────┘ -``` - -### Using precomputed metrics to build new metrics - -[This section was moved here](/santiment-queries/metric-tables/#using-precomputed-metrics-to-build-new-metrics) - -## Using Raw Data - -### Example: Top Transfers - -Find the 5 biggest ETH transactions to the graveyard address 0x0000000000000000000000000000000000000000. - -> Note: Some tables are duplicated with different `ORDER BY` clauses. In the case of transfer tables, there are tables with the `_to` suffix. This indicates that the `to` address is at the front of the `ORDER BY` key. This table has better performance when only filtering by the `to` address. - -```sql -SELECT - dt, - from, - transactionHash, - value / pow(10, 18) -- transform from gwei to ETH -FROM eth_transfers_to FINAL -WHERE to = '0x0000000000000000000000000000000000000000' -ORDER BY value DESC -LIMIT 5 -``` - -Test in [Queries](https://queries.santiment.net/query/example-top-transfers-418) - -```sql -┌──────────────────dt─┬─from───────────────────────────────────────┬─transactionHash────────────────────────────────────────────────────┬─divide(value, pow(10, 18))─┐ -│ 2015-08-08 11:01:14 │ 0x3f98e477a361f777da14611a7e419a75fd238b6b │ 0x242a15349ad0a7070afb73df92e8e569fd196c88c7f589a467f24e6028a07c69 │ 2000 │ -│ 2016-07-28 19:39:05 │ 0xaa1a6e3e6ef20068f7f8d8c835d2d22fd5116444 │ 0x1c96608bda6ce4be0d0f30b3a5b3a9d9c94930291a168a0dbddfe9be24ac70d1 │ 1493 │ -│ 2015-08-13 17:50:09 │ 0xf5437e158090b2a2d68f82b54a5864b95dd6dbea │ 0x88db76f50553d3d9d61eaf7480a92b1d68db08d69e688fd9b457571cc22ab2b0 │ 1000 │ -│ 2021-09-08 03:30:47 │ 0x517bb391cb3a6d879762eb655e48a478498c3698 │ 0x429bfa5fdd1bf8117d6707914b6300ccf08ec3383d38a10ddf37247e18d90557 │ 515.001801432 │ -│ 2015-08-15 06:52:11 │ 0x20134cbff88bfadc466b52eceaa79857891d831e │ 0xe218f7abd6b557e01376c57bcdf7f5d8e94e0760306b1d9eb37e1a8ddc51e6ab │ 400 │ -└─────────────────────┴────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────┴────────────────────────────┘ -``` - -### Example for address balance - -Select the UNI balance of address at the beginning of each month. - -For performance reasons the table has a non-intuitive design. The balances of an address -are stored in a single field of type `AggregateFunction(groupArray, Tuple(DateTime, Float64))`. -When the `groupArrayMerge` function is called on that field, it essentially turns into -`Array` - -The [arrayJoin](https://clickhouse.com/docs/en/sql-reference/functions/array-join/) is a Clickhouse-specific function that is useful in many -scenarios. Normal functions do not change a set of rows, but just change the -values in each row (map). Aggregate functions compress a set of rows (fold or -reduce). The arrayJoin function takes each row and generates a set of rows -(unfold). - -In this scenario `arrayJoin` is used to unfold the array of tuples into rows where each row has a datetime and value. - -```sql -SELECT - toStartOfMonth(dt) AS datetime, - toFloat64(argMax(value, dt)) / pow(10, 18) AS value -FROM ( - SELECT - arrayJoin(groupArrayMerge(values)) AS values_merged, - values_merged.1 AS dt, - values_merged.2 AS value - FROM balances_aggregated - WHERE - address = '0x1a9c8182c09f50c8318d769245bea52c32be35bc' AND - blockchain = 'ethereum' AND - asset_ref_id = get_asset_ref_id('uniswap') - GROUP BY address, blockchain, asset_ref_id - HAVING dt >= toDateTime('2021-01-01 00:00:00') AND dt < toDateTime('2022-08-01 00:00:00') -) -GROUP BY datetime -``` -Test in [Queries](https://queries.santiment.net/query/example-for-address-balance-419) - -Note that not every month has a balance. This is because during these months no transfers happened and balance records -are produced only when the balance changes. - -```sql -┌───datetime─┬──────────────value─┐ -│ 2021-01-01 │ 54854034.6123795 │ -│ 2021-02-01 │ 75792689.3561644 │ -│ 2021-04-01 │ 105258204.83054289 │ -│ 2021-05-01 │ 113312234.63774733 │ -│ 2021-06-01 │ 123442268.88432267 │ -│ 2021-07-01 │ 134441434.15575847 │ -│ 2021-08-01 │ 158560087.2506342 │ -│ 2021-09-01 │ 173403155.20471838 │ -│ 2021-11-01 │ 173403155.20471838 │ -│ 2021-12-01 │ 173403155.20471838 │ -│ 2022-02-01 │ 227551085.1894977 │ -│ 2022-04-01 │ 227040881.1894977 │ -│ 2022-05-01 │ 254925338.09589037 │ -│ 2022-06-01 │ 268638940.6453577 │ -│ 2022-07-01 │ 280393165.7214612 │ -└────────────┴────────────────────┘ -``` - -### Example for Development Activity - -The `github_v2` table contains [Github Events](https://docs.github.com/en/developers/webhooks-and-events/events/github-event-types) data. -Using these events one can compute better development activity metrics compared to using just commits counts, -as described in [this article](https://medium.com/santiment/tracking-github-activity-of-crypto-projects-introducing-a-better-approach-9fb1af3f1c32) - -To compute the development activity of an organization: - -```sql -WITH ('IssueCommentEvent', - 'IssuesEvent', - 'ForkEvent', - 'CommitCommentEvent', - 'FollowEvent', - 'ForkEvent', - 'DownloadEvent', - 'WatchEvent', - 'ProjectCardEvent', - 'ProjectColumnEvent', - 'ProjectEvent') AS non_dev_related_event_types -SELECT - toStartOfMonth(dt) AS month, - count(*) AS events -FROM ( - SELECT event, dt - FROM github_v2 FINAL - WHERE - owner = 'santiment' AND - dt >= toDateTime('2021-01-01 00:00:00') AND - dt < toDateTime('2021-12-31 23:59:59') AND - event NOT IN non_dev_related_event_types -- these events are related more with comments/issues, not developing -) -GROUP BY month -``` -Test in [Queries](https://queries.santiment.net/query/example-for-development-activity-420) - -``` -┌──────month─┬─events─┐ -│ 2021-01-01 │ 1600 │ -│ 2021-02-01 │ 1815 │ -│ 2021-03-01 │ 1709 │ -│ 2021-04-01 │ 1541 │ -│ 2021-05-01 │ 1139 │ -│ 2021-06-01 │ 1211 │ -│ 2021-07-01 │ 1213 │ -│ 2021-08-01 │ 1058 │ -│ 2021-09-01 │ 1156 │ -│ 2021-10-01 │ 269 │ -│ 2021-11-01 │ 1079 │ -│ 2021-12-01 │ 760 │ -└────────────┴────────┘ -``` - -To count all the people that have contributed to the development activity of an organization in a given -time period: - -```sql -WITH ('IssueCommentEvent', - 'IssuesEvent', - 'ForkEvent', - 'CommitCommentEvent', - 'FollowEvent', - 'ForkEvent', - 'DownloadEvent', - 'WatchEvent', - 'ProjectCardEvent', - 'ProjectColumnEvent', - 'ProjectEvent') AS non_dev_related_event_types -SELECT - toStartOfMonth(dt) AS month, - uniqExact(actor) AS contributors -FROM ( - SELECT actor, dt - FROM github_v2 FINAL - WHERE - owner = 'santiment' AND - dt >= toDateTime('2021-01-01 00:00:00') AND - dt < toDateTime('2021-12-31 23:59:59') AND - event NOT IN non_dev_related_event_types -- these events are related more with comments/issues, not developing -) -GROUP BY month -``` -Test in [Queries](https://queries.santiment.net/query/example-2-for-development-activity-421) - -``` -┌──────month─┬─contributors─┐ -│ 2021-01-01 │ 18 │ -│ 2021-02-01 │ 17 │ -│ 2021-03-01 │ 20 │ -│ 2021-04-01 │ 22 │ -│ 2021-05-01 │ 23 │ -│ 2021-06-01 │ 19 │ -│ 2021-07-01 │ 21 │ -│ 2021-08-01 │ 20 │ -│ 2021-09-01 │ 20 │ -│ 2021-10-01 │ 19 │ -│ 2021-11-01 │ 19 │ -│ 2021-12-01 │ 19 │ -└────────────┴──────────────┘ -``` \ No newline at end of file diff --git a/src/docs/santiment-queries/xrpl-tables/index.md b/src/docs/santiment-queries/xrpl-tables/index.md deleted file mode 100644 index 2a2197941..000000000 --- a/src/docs/santiment-queries/xrpl-tables/index.md +++ /dev/null @@ -1,124 +0,0 @@ ---- -title: XRPL Tables Overview -author: Boris -date: 2023-03-30 -description: An overview of the XRPL-related tables and their functions ---- - -## List of Tables - -All our tables that contain XRPL-related data have the string 'xrp' in their name. To find them yourself, run the following query: - -```sql -SHOW TABLES LIKE '%xrp%' -``` - -The result will display the list of tables: - -``` -┌─name───────────────────┐ -│ xrp_balances │ -│ xrp_balances_shard_v5 │ -│ xrp_dex_volume │ -│ xrp_dex_volume_shard │ -│ xrp_ripple_state │ -│ xrp_ripple_state_shard │ -└────────────────────────┘ -``` - -## Exploration of the Tables - -We can inspect the tables with the commands we learned in [Exploration](/santiment-queries/exploration/). - -Below, we have listed all the XRPL tables with their columns and a brief description of each. - -## xrp\_balances -Represents balance changes per address per currency. - -- **dt** (*DateTime*): The date and time of the balance change -- **blockNumber** (*UInt64*): Unique identifier for the block in which the transaction was processed -- **balance** (*Float64*): The balance of the asset in the account after the transaction was completed -- **oldDt** (*Nullable(DateTime)*): The date and time of the previous balance change -- **oldBlockNumber** (*Nullable(UInt64)*): The block number of the previous balance change -- **oldBalance** (*Float64*): The previous balance in this currency for this address -- **address** (*String*): The owner of the funds -- **currency** (*String*): Type of currency used in the transaction -- **issuer** (*Nullable(String)*): The issuer of the currency -- **issuerCurrency** (*String*): The type of the issued currency -- **addressType** (*String*): Enum(NORMAL | SPECIAL) - Indicates if the address is a valid XRPL address or a meta address used for metric purposes -- **transactionIndex** (*UInt64*): Position of the transaction that caused the balance change inside the XRPL block -- **transactionHash** (*String*): Hash value identifying the transaction that caused the balance change - -## xrp\_dex\_volume -Represents trades on the XRPL DEX. - -- **dt** (*DateTime*): The time when the transaction occurred. -- **blockNumber** (*UInt64*): Unique identifier for the block in which the transaction was processed. -- **offerAddress** (*String*): The owner of the funds. -- **makerAddress** (*String*): The address of the account that owns the Offer, resulting in a DEX trade. -- **offerSequence** (*UInt32*): The sequence number of the Offer transaction that resulted in a DEX trade. -- **takerPaysIssuerCurrency** (*String*): The currency type offered by the taker. -- **takerPaysAmount** (*Float64*): The amount of currency offered by the taker. -- **takerGetsIssuerCurrency** (*String*): The currency type received by the taker. -- **takerGetsAmount** (*Float64*): The amount of currency received by the taker. -- **transactionIndex** (*UInt64*): Position of the transaction that caused the balance change inside the XRPL block. -- **transactionHash** (*String*): Hash value identifying the transaction that caused the balance change. -- **xrpAmount** (*Nullable(Float64)*): The amount of the trade measured in XRP. - -## xrp\_ripple\_state -Represents creation and destruction or XRPL trustlines. - -- **sign** (*Int8*): Indicates the creation or deletion of a trustline. '1' denotes creation, and '-1' denotes deletion. -- **dt** (*DateTime*): The date and time when the transaction occurred. -- **blockNumber** (*UInt64*): A unique identifier for the block in which the transaction was processed. -- **transactionIndex** (*UInt32*): The position of the transaction that caused the balance change inside the XRPL block. -- **transactionHash** (*String*): The hash value identifying the transaction that caused the balance change. -- **currency** (*String*): The type of currency used in the trustline. -- **balance** (*Float64*): The accumulated balance. -- **highLimitIssuer** (*String*): The issuer of the high account. -- **highLimitBalance** (*Float64*): The balance of the high account. -- **lowLimitIssuer** (*String*): The issuer of the low account. -- **lowLimitBalance** (*Float64*): The balance of the low account. - -## Sample Queries - -### DEX Volume per Asset Pair, Measured in XRP - -DEX volume for a specific asset pair, per day, measured in XRP. - -```sql -WITH ('r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV/USD', 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B/BTC') AS issuer_pair -SELECT - toDate(dt) AS day, - SUM(xrpAmount) AS count_final -FROM xrp_dex_volume -WHERE (takerPaysIssuerCurrency IN (issuer_pair)) OR (takerGetsIssuerCurrency IN (issuer_pair)) -GROUP BY day -ORDER BY day DESC -LIMIT 100 -``` - -Test in [Queries](https://queries.santiment.net/query/dex-volume-per-asset-pair-measured-in-xrp-422) - ---- - -### DEX Volume per Asset Pair, Measured in USD - -DEX volume for a specific asset pair, per day, measured in USD. To achieve the result, we need to join the on-chain XRPL data with prices. - -```sql -WITH ('r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV/USD', 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B/BTC') AS issuer_pair -SELECT - toDate(dt) AS dt, - SUM(xrpAmount * value) AS volume_usd -FROM xrp_dex_volume -INNER JOIN daily_metrics_v2 USING (dt) -WHERE (metric_id = dictGet('metrics_by_name', 'metric_id', 'daily_avg_price_usd')) -AND (asset_id = dictGet('assets_by_name', 'asset_id', 'xrp')) -AND ((takerPaysIssuerCurrency IN (issuer_pair)) OR (takerGetsIssuerCurrency IN (issuer_pair))) -GROUP BY dt -ORDER BY dt DESC -LIMIT 100 -``` - -Test in [Queries](https://queries.santiment.net/query/dex-volume-per-asset-pair-measured-in-usd-423) \ No newline at end of file diff --git a/src/docs/youtube-videos/index.md b/src/docs/youtube-videos/index.md deleted file mode 100644 index 6e7d1c403..000000000 --- a/src/docs/youtube-videos/index.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Videos -author: Santiment Team -description: Youtube webinars and tutorials -date: 2025-08-14 ---- - -- [The Santiment Youtube Channel](https://www.youtube.com/@Santimentfeed/videos) has many videos not necessarily featured here. -- [Tutorials](/youtube-videos/tutorials) -- [Full Walkthroughs](/youtube-videos/walkthroughs) -- [Webinars](/youtube-videos/webinars) diff --git a/src/docs/youtube-videos/tutorials/index.md b/src/docs/youtube-videos/tutorials/index.md deleted file mode 100644 index cfc1ee2aa..000000000 --- a/src/docs/youtube-videos/tutorials/index.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Youtube tutorials -author: Santiment Team -date: 2025-08-14 ---- -## How to create a Watchlist - - -## How to create an Alert - - -## Tracking the Social Trends - - -## Santiment Screener - - -## Combine any metrics to take fundamental analysis to the next level **Charts** - \ No newline at end of file diff --git a/src/docs/youtube-videos/walkthroughs/index.md b/src/docs/youtube-videos/walkthroughs/index.md deleted file mode 100644 index 11e6ce275..000000000 --- a/src/docs/youtube-videos/walkthroughs/index.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Walkthroughs -author: Santiment Team -date: 2025-08-29 ---- - -## Walking Through Sanbase -*The social, onchain, and fundamental data dashboard for crypto tokens* - - -## Walking Through SanR -*The first blockchain-powered, price prediction battleground* - diff --git a/src/docs/youtube-videos/webinars/index.md b/src/docs/youtube-videos/webinars/index.md deleted file mode 100644 index 2c1ca0132..000000000 --- a/src/docs/youtube-videos/webinars/index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Youtube webinars -author: Santiment Team -date: 2021-05-24 ---- - -## 6 ways you could have caught REN’s summer tops - - -## Top on-chain 'valuation' metrics and how to use them (Public Webinar) - - -## How to analyze crowd sentiment with Sanbase (Public Webinar) - - -## How to analyze 'whale' behavior with Sanbase (Public Webinar) - - -## How to analyze 'whale' behavior with Sanbase (Pro Webinar) - - -## Sansheets Webinar - Using Santiment API for Price Prediction Models - - -## How to Analyze Speculative Demand with Sanbase (Pro Webinar) - \ No newline at end of file diff --git a/src/fonts/ProximaNova-Medium.woff2 b/src/fonts/ProximaNova-Medium.woff2 deleted file mode 100644 index efca5def6..000000000 Binary files a/src/fonts/ProximaNova-Medium.woff2 and /dev/null differ diff --git a/src/fonts/ProximaNova-Regular.woff2 b/src/fonts/ProximaNova-Regular.woff2 deleted file mode 100644 index 06db44883..000000000 Binary files a/src/fonts/ProximaNova-Regular.woff2 and /dev/null differ diff --git a/src/fonts/ProximaNova-Semibold.woff2 b/src/fonts/ProximaNova-Semibold.woff2 deleted file mode 100644 index 59e7ac9e2..000000000 Binary files a/src/fonts/ProximaNova-Semibold.woff2 and /dev/null differ diff --git a/src/gql/changelog.js b/src/gql/changelog.js deleted file mode 100644 index 170a7fb27..000000000 --- a/src/gql/changelog.js +++ /dev/null @@ -1,75 +0,0 @@ -import gql from 'graphql-tag' - -export const METRICS_QUERY = gql` - query metricsChangelog($page: Int, $pageSize: Int, $searchTerm: String) { - metricsChangelog( - page: $page - pageSize: $pageSize - searchTerm: $searchTerm - ) { - entries { - date - createdMetrics { - metric { - humanReadableName - metric - docs { - link - } - } - eventTimestamp - } - deprecatedMetrics { - metric { - humanReadableName - metric - } - eventTimestamp - deprecationNote - } - } - pagination { - hasMore - currentPage - totalDates - totalPages - } - } - } -` - -export const ASSETS_QUERY = gql` - query assetsChangelog($page: Int, $pageSize: Int, $searchTerm: String) { - assetsChangelog(page: $page, pageSize: $pageSize, searchTerm: $searchTerm) { - entries { - date - createdAssets { - asset { - name - ticker - slug - logoUrl - description - link - } - eventTimestamp - } - hiddenAssets { - asset { - name - ticker - slug - } - eventTimestamp - hidingReason - } - } - pagination { - hasMore - totalDates - currentPage - totalPages - } - } - } -` diff --git a/src/gql/user.js b/src/gql/user.js deleted file mode 100644 index feaae7e16..000000000 --- a/src/gql/user.js +++ /dev/null @@ -1,59 +0,0 @@ -import gql from 'graphql-tag' - -const userDataFragment = gql` - fragment userDataFragment on User { - id - email - username - privacyPolicyAccepted - apikeys - subscriptions { - id - cancelAtPeriodEnd - currentPeriodEnd - plan { - id - name - amount - interval - product { - id - name - } - } - } - } -` - -export const CURRENT_USER_QUERY = gql` - query { - currentUser { - ...userDataFragment - } - } - ${userDataFragment} -` - -export const VERIFY_EMAIL_MUTATION = gql` - mutation emailLoginVerify($email: String!, $token: String!) { - emailLoginVerify(email: $email, token: $token) { - token - user { - ...userDataFragment - } - } - } - - ${userDataFragment} -` - -export const EMAIL_LOGIN_MUTATION = gql` - mutation($email: String!, $subscribeToWeeklyNewsletter: Boolean = false) { - emailLogin( - email: $email - subscribeToWeeklyNewsletter: $subscribeToWeeklyNewsletter - ) { - success - } - } -` diff --git a/src/html.js b/src/html.js deleted file mode 100644 index 9468d5968..000000000 --- a/src/html.js +++ /dev/null @@ -1,83 +0,0 @@ -import React from "react" -import PropTypes from "prop-types" - -const intercomScript = ( - - - - - {gtagScript} - - - {props.preBodyComponents} - -
    - {props.postBodyComponents} - {firstPromoterScript} - - - ) -} - -HTML.propTypes = { - htmlAttributes: PropTypes.object, - headComponents: PropTypes.array, - bodyAttributes: PropTypes.object, - preBodyComponents: PropTypes.array, - body: PropTypes.string, - postBodyComponents: PropTypes.array, -} diff --git a/src/images/docs/Changelog.js b/src/images/docs/Changelog.js deleted file mode 100644 index 2cec1138f..000000000 --- a/src/images/docs/Changelog.js +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react' - -const Changelog = ({ withColor }) => ( - - - - - - - - -) - -export default Changelog diff --git a/src/images/docs/Education.js b/src/images/docs/Education.js deleted file mode 100644 index fc800df84..000000000 --- a/src/images/docs/Education.js +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react' - -const Education = ({ withColor }) => ( - - - - - - - -) - -export default Education diff --git a/src/images/docs/Glossary.js b/src/images/docs/Glossary.js deleted file mode 100644 index 72964de30..000000000 --- a/src/images/docs/Glossary.js +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react' - -const Glossary = ({ withColor }) => ( - - - - - - - -) - -export default Glossary diff --git a/src/images/docs/Labels.js b/src/images/docs/Labels.js deleted file mode 100644 index 770f246b0..000000000 --- a/src/images/docs/Labels.js +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react' - -const Labels = ({ withColor }) => ( - - - - - - - - - -) - -export default Labels diff --git a/src/images/docs/Metrics.js b/src/images/docs/Metrics.js deleted file mode 100644 index 1ab9d521f..000000000 --- a/src/images/docs/Metrics.js +++ /dev/null @@ -1,72 +0,0 @@ -import React from 'react' - -const Metrics = ({ withColor }) => ( - - - - - - - - - - - - - -) - -export default Metrics diff --git a/src/images/docs/Products.js b/src/images/docs/Products.js deleted file mode 100644 index 85b1ae4dd..000000000 --- a/src/images/docs/Products.js +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react' - -const Products = ({ withColor }) => ( - - - - - - - -) - -export default Products diff --git a/src/images/docs/San.js b/src/images/docs/San.js deleted file mode 100644 index 131e0aeef..000000000 --- a/src/images/docs/San.js +++ /dev/null @@ -1,39 +0,0 @@ -import React from 'react' - -const San = ({ withColor }) => ( - - - - - - - - - -) - -export default San diff --git a/src/images/docs/Sanapi.js b/src/images/docs/Sanapi.js deleted file mode 100644 index a1534536f..000000000 --- a/src/images/docs/Sanapi.js +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react' - -const Sanapi = ({ withColor }) => ( - - - - - - - -) - -export default Sanapi diff --git a/src/images/docs/Sanbase.js b/src/images/docs/Sanbase.js deleted file mode 100644 index 16f6c688a..000000000 --- a/src/images/docs/Sanbase.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react' - -const Sanbase = ({ withColor }) => ( - - - - - - -) - -export default Sanbase diff --git a/src/images/docs/Sanqueries.js b/src/images/docs/Sanqueries.js deleted file mode 100644 index 4f2ca92af..000000000 --- a/src/images/docs/Sanqueries.js +++ /dev/null @@ -1,81 +0,0 @@ -import React from 'react' - -const Sanqueries = ({ withColor }) => { - return withColor ? ( - - - - - - - - ) : ( - - - - - - - - ) -} - -export default Sanqueries diff --git a/src/images/docs/Sansheets.js b/src/images/docs/Sansheets.js deleted file mode 100644 index 9245a5a2b..000000000 --- a/src/images/docs/Sansheets.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react' - -const Sansheets = ({ withColor }) => ( - - - - - - -) - -export default Sansheets diff --git a/src/images/docs/Signals.js b/src/images/docs/Signals.js deleted file mode 100644 index 4f7cddf8f..000000000 --- a/src/images/docs/Signals.js +++ /dev/null @@ -1,90 +0,0 @@ -import React from 'react' - -const Signals = ({ withColor }) => ( - - - - - - - - - - - - - - - - - - -) - -export default Signals diff --git a/src/images/docs/Youtube.js b/src/images/docs/Youtube.js deleted file mode 100644 index 5725d31a2..000000000 --- a/src/images/docs/Youtube.js +++ /dev/null @@ -1,85 +0,0 @@ -import React from 'react' - -const Youtube = ({ withColor }) => { - return withColor ? ( - - - - - - - - ) : ( - - - - - - - - ) -} - -export default Youtube diff --git a/src/images/logo-SAN.svg b/src/images/logo-SAN.svg deleted file mode 100644 index 16efb7bfd..000000000 --- a/src/images/logo-SAN.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/images/logo.png b/src/images/logo.png deleted file mode 100644 index 83390a919..000000000 Binary files a/src/images/logo.png and /dev/null differ diff --git a/src/images/logo.svg b/src/images/logo.svg deleted file mode 100644 index 02f07998b..000000000 --- a/src/images/logo.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/images/logos/logo-neuro.svg b/src/images/logos/logo-neuro.svg deleted file mode 100644 index b1e6656ae..000000000 --- a/src/images/logos/logo-neuro.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/images/logos/logo-queries.svg b/src/images/logos/logo-queries.svg deleted file mode 100644 index eeb73c0af..000000000 --- a/src/images/logos/logo-queries.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/images/logos/logo-sanbase.svg b/src/images/logos/logo-sanbase.svg deleted file mode 100644 index 143c6af3e..000000000 --- a/src/images/logos/logo-sanbase.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/images/logos/logo-sheets.svg b/src/images/logos/logo-sheets.svg deleted file mode 100644 index 778aedd95..000000000 --- a/src/images/logos/logo-sheets.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/images/logos/logo-trends.svg b/src/images/logos/logo-trends.svg deleted file mode 100644 index 28c040cff..000000000 --- a/src/images/logos/logo-trends.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/images/logos/main-logo.svg b/src/images/logos/main-logo.svg deleted file mode 100644 index 5219befc6..000000000 --- a/src/images/logos/main-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/images/people/Alan.png b/src/images/people/Alan.png deleted file mode 100644 index 954ff02ab..000000000 Binary files a/src/images/people/Alan.png and /dev/null differ diff --git a/src/images/people/Alex.png b/src/images/people/Alex.png deleted file mode 100644 index 31dae3ef8..000000000 Binary files a/src/images/people/Alex.png and /dev/null differ diff --git a/src/images/people/Anastasiya.png b/src/images/people/Anastasiya.png deleted file mode 100644 index 3574086cd..000000000 Binary files a/src/images/people/Anastasiya.png and /dev/null differ diff --git a/src/images/people/Anatoliy.png b/src/images/people/Anatoliy.png deleted file mode 100644 index 3e194251b..000000000 Binary files a/src/images/people/Anatoliy.png and /dev/null differ diff --git a/src/images/people/Ante.png b/src/images/people/Ante.png deleted file mode 100644 index 55ee00382..000000000 Binary files a/src/images/people/Ante.png and /dev/null differ diff --git a/src/images/people/Brian.png b/src/images/people/Brian.png deleted file mode 100644 index c5f6c6af9..000000000 Binary files a/src/images/people/Brian.png and /dev/null differ diff --git a/src/images/people/Dima.png b/src/images/people/Dima.png deleted file mode 100644 index c5e186482..000000000 Binary files a/src/images/people/Dima.png and /dev/null differ diff --git a/src/images/people/Dino.png b/src/images/people/Dino.png deleted file mode 100644 index 97cea0f6d..000000000 Binary files a/src/images/people/Dino.png and /dev/null differ diff --git a/src/images/people/Garry.png b/src/images/people/Garry.png deleted file mode 100644 index 44e895559..000000000 Binary files a/src/images/people/Garry.png and /dev/null differ diff --git a/src/images/people/Ilya.png b/src/images/people/Ilya.png deleted file mode 100644 index 5a195dad4..000000000 Binary files a/src/images/people/Ilya.png and /dev/null differ diff --git a/src/images/people/Irina.png b/src/images/people/Irina.png deleted file mode 100644 index 989db1ccd..000000000 Binary files a/src/images/people/Irina.png and /dev/null differ diff --git a/src/images/people/Ivan.png b/src/images/people/Ivan.png deleted file mode 100644 index 31df1fb17..000000000 Binary files a/src/images/people/Ivan.png and /dev/null differ diff --git a/src/images/people/IvanK.png b/src/images/people/IvanK.png deleted file mode 100644 index e5178e0b6..000000000 Binary files a/src/images/people/IvanK.png and /dev/null differ diff --git a/src/images/people/Jan.png b/src/images/people/Jan.png deleted file mode 100644 index f8cbab44e..000000000 Binary files a/src/images/people/Jan.png and /dev/null differ diff --git a/src/images/people/Jia.png b/src/images/people/Jia.png deleted file mode 100644 index fc932726e..000000000 Binary files a/src/images/people/Jia.png and /dev/null differ diff --git a/src/images/people/Katsiaryna.png b/src/images/people/Katsiaryna.png deleted file mode 100644 index 267f0a11b..000000000 Binary files a/src/images/people/Katsiaryna.png and /dev/null differ diff --git a/src/images/people/Kelvin.png b/src/images/people/Kelvin.png deleted file mode 100644 index b6a3bdb9d..000000000 Binary files a/src/images/people/Kelvin.png and /dev/null differ diff --git a/src/images/people/Kim.png b/src/images/people/Kim.png deleted file mode 100644 index 3c36bc832..000000000 Binary files a/src/images/people/Kim.png and /dev/null differ diff --git a/src/images/people/Larry.png b/src/images/people/Larry.png deleted file mode 100644 index 671e4bcde..000000000 Binary files a/src/images/people/Larry.png and /dev/null differ diff --git a/src/images/people/Lyudmil.png b/src/images/people/Lyudmil.png deleted file mode 100644 index 2e16dcd58..000000000 Binary files a/src/images/people/Lyudmil.png and /dev/null differ diff --git a/src/images/people/Maksim.png b/src/images/people/Maksim.png deleted file mode 100644 index 58eacf313..000000000 Binary files a/src/images/people/Maksim.png and /dev/null differ diff --git a/src/images/people/MaksimR.png b/src/images/people/MaksimR.png deleted file mode 100644 index 952c12b76..000000000 Binary files a/src/images/people/MaksimR.png and /dev/null differ diff --git a/src/images/people/Max.png b/src/images/people/Max.png deleted file mode 100644 index 5c5deeac9..000000000 Binary files a/src/images/people/Max.png and /dev/null differ diff --git a/src/images/people/Mayumi.png b/src/images/people/Mayumi.png deleted file mode 100644 index c3fdf076d..000000000 Binary files a/src/images/people/Mayumi.png and /dev/null differ diff --git a/src/images/people/Nastya.png b/src/images/people/Nastya.png deleted file mode 100644 index fe06e3653..000000000 Binary files a/src/images/people/Nastya.png and /dev/null differ diff --git a/src/images/people/Nikolay.png b/src/images/people/Nikolay.png deleted file mode 100644 index c23aacaba..000000000 Binary files a/src/images/people/Nikolay.png and /dev/null differ diff --git a/src/images/people/Rinat.png b/src/images/people/Rinat.png deleted file mode 100644 index 379d83eb9..000000000 Binary files a/src/images/people/Rinat.png and /dev/null differ diff --git a/src/images/people/Serena.png b/src/images/people/Serena.png deleted file mode 100644 index 7b68e4026..000000000 Binary files a/src/images/people/Serena.png and /dev/null differ diff --git a/src/images/people/Serge.png b/src/images/people/Serge.png deleted file mode 100644 index e7a2a6c0f..000000000 Binary files a/src/images/people/Serge.png and /dev/null differ diff --git a/src/images/people/Tsetso.png b/src/images/people/Tsetso.png deleted file mode 100644 index a18952c3e..000000000 Binary files a/src/images/people/Tsetso.png and /dev/null differ diff --git a/src/images/people/Tzanko.png b/src/images/people/Tzanko.png deleted file mode 100644 index 2d65d175c..000000000 Binary files a/src/images/people/Tzanko.png and /dev/null differ diff --git a/src/images/people/Valentin.png b/src/images/people/Valentin.png deleted file mode 100644 index 330d8ca51..000000000 Binary files a/src/images/people/Valentin.png and /dev/null differ diff --git a/src/images/people/Vassil.png b/src/images/people/Vassil.png deleted file mode 100644 index f39e18919..000000000 Binary files a/src/images/people/Vassil.png and /dev/null differ diff --git a/src/images/people/Vlad.png b/src/images/people/Vlad.png deleted file mode 100644 index 084db583a..000000000 Binary files a/src/images/people/Vlad.png and /dev/null differ diff --git a/src/images/people/Yordan.png b/src/images/people/Yordan.png deleted file mode 100644 index 5fecb1be2..000000000 Binary files a/src/images/people/Yordan.png and /dev/null differ diff --git a/src/images/people/Yura.png b/src/images/people/Yura.png deleted file mode 100644 index fab8ab061..000000000 Binary files a/src/images/people/Yura.png and /dev/null differ diff --git a/src/images/planet.svg b/src/images/planet.svg deleted file mode 100644 index b361c67f8..000000000 --- a/src/images/planet.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/layouts/Document.astro b/src/layouts/Document.astro new file mode 100644 index 000000000..68aab65f5 --- /dev/null +++ b/src/layouts/Document.astro @@ -0,0 +1,69 @@ +--- +import 'katex/dist/katex.min.css' + +import type { CollectionEntry } from 'astro:content' +import type { MarkdownHeading } from 'astro' +import type { TBreadcrumb } from '$modules/navigation/breadcrumbs' +import type { SidebarSection } from '$modules/navigation/sidebar' + +import { sluggify } from 'san-webkit-next/utils/url' + +import Sidebar from '$components/layout/Sidebar.svelte' +import Breadcrumbs from '$components/shared/Breadcrumbs.astro' +import TableOfContents from '$components/layout/TableOfContents.svelte' +import LastUpdated from '$components/shared/LastUpdated.svelte' +import DiscordCTA from '$components/shared/DiscordCTA.svelte' +import SupportButton from '$components/shared/SupportButton.svelte' + +import H1 from '$components/markdown/headings/H1.astro' + +type Props = { + doc: CollectionEntry<'docs'> + breadcrumbs: TBreadcrumb[] + sidebarData: SidebarSection[] + relatedProduct: { href: string; title: string } | null + headings: MarkdownHeading[] + lastUpdatedAt?: Date | string +} + +const { slug } = Astro.params + +const { doc, breadcrumbs, relatedProduct, sidebarData, headings } = Astro.props +--- + +
    +
    + +
    + +
    +
    + + + + +
    + { + doc.data.title && ( +

    {doc.data.title}

    + ) + } + + + +
    + + +
    +
    +
    +
    + +
    diff --git a/src/layouts/Page.astro b/src/layouts/Page.astro new file mode 100644 index 000000000..79bd54564 --- /dev/null +++ b/src/layouts/Page.astro @@ -0,0 +1,64 @@ +--- +import type { SidebarSection } from '$modules/navigation/sidebar' + +import '../app.css' +import 'san-webkit-next/app.css' + +import { ClientRouter } from 'astro:transitions' +import Notifications from 'san-webkit-next/ui/core/Notifications' + +import Nav from '$components/layout/Nav.svelte' + +import GoogleAnalytics from '$modules/analytics/components/GoogleAnalytics.astro' +import Intercom from '$modules/support/components/Intercom.astro' + +type Props = { + sidebarData?: SidebarSection[] +} + +const { slug } = Astro.params + +const { sidebarData } = Astro.props +--- + + + + + + + + + + + { + import.meta.env.PROD && ( + <> + + + + ) + } + + + + + + + +
    +
    + + + + diff --git a/src/modules/analytics/components/GoogleAnalytics.astro b/src/modules/analytics/components/GoogleAnalytics.astro new file mode 100644 index 000000000..a60b12fa8 --- /dev/null +++ b/src/modules/analytics/components/GoogleAnalytics.astro @@ -0,0 +1,21 @@ +--- +interface Props { + id: string +} + +const { id } = Astro.props +--- + + + + diff --git a/src/modules/changelog/api.ts b/src/modules/changelog/api.ts new file mode 100644 index 000000000..ff378e7d6 --- /dev/null +++ b/src/modules/changelog/api.ts @@ -0,0 +1,90 @@ +import { ApiQuery } from 'san-webkit-next/api' + +import type { + AssetsChangelogQueryResponse, + MetricsChangelogQueryResponse, +} from './types' + +export const queryMetricsChangelog = ApiQuery( + (page: number, pageSize: number, searchTerm: string) => ({ + schema: `query metricsChangelog($page: Int, $pageSize: Int, $searchTerm: String) { + metricsChangelog( + page: $page + pageSize: $pageSize + searchTerm: $searchTerm + ) { + entries { + date + createdMetrics { + metric { + humanReadableName + metric + docs { + link + } + } + eventTimestamp + } + deprecatedMetrics { + metric { + humanReadableName + metric + } + eventTimestamp + deprecationNote + } + } + pagination { + hasMore + currentPage + totalDates + totalPages + } + } + } +`, + variables: { page, pageSize, searchTerm }, + }), + (gql: MetricsChangelogQueryResponse) => gql.metricsChangelog, +) + +export const queryAssetsChangelog = ApiQuery( + (page: number, pageSize: number, searchTerm: string) => ({ + schema: `query assetsChangelog($page: Int, $pageSize: Int, $searchTerm: String) { + assetsChangelog(page: $page, pageSize: $pageSize, searchTerm: $searchTerm) { + entries { + date + createdAssets { + asset { + name + ticker + slug + logoUrl + description + link + } + eventTimestamp + } + hiddenAssets { + asset { + name + ticker + slug + } + eventTimestamp + hidingReason + } + } + pagination { + hasMore + totalDates + currentPage + totalPages + } + } + } + `, + variables: { page, pageSize, searchTerm }, + }), + (gql: AssetsChangelogQueryResponse) => gql.assetsChangelog, +) diff --git a/src/modules/changelog/types.ts b/src/modules/changelog/types.ts new file mode 100644 index 000000000..672f56e3d --- /dev/null +++ b/src/modules/changelog/types.ts @@ -0,0 +1,76 @@ +export type Pagination = { + hasMore: boolean + currentPage: number + totalDates: number + totalPages: number +} + +type ChangelogResponse = { + entries: EntryType[] + pagination: Pagination +} + +type MetricDocs = { + link: string +} + +type Metric = { + humanReadableName: string + metric: string + docs?: MetricDocs +} + +export type MetricCreatedEvent = { + metric: Metric + eventTimestamp: string +} + +export type MetricDeprecatedEvent = { + metric: Metric + eventTimestamp: string + deprecationNote?: string +} + +type MetricsChangelogEntry = { + date: string + createdMetrics: MetricCreatedEvent[] + deprecatedMetrics: MetricDeprecatedEvent[] +} + +export type MetricsChangelogData = ChangelogResponse + +export type MetricsChangelogQueryResponse = { + metricsChangelog: MetricsChangelogData +} + +type Asset = { + name: string + ticker: string + slug: string + logoUrl?: string + description?: string + link?: string +} + +export type AssetCreatedEvent = { + asset: Asset + eventTimestamp: string +} + +export type AssetHiddenEvent = { + asset: Asset + eventTimestamp: string + hidingReason?: string +} + +export type AssetsChangelogEntry = { + date: string + createdAssets: AssetCreatedEvent[] + hiddenAssets: AssetHiddenEvent[] +} + +export type AssetsChangelogData = ChangelogResponse + +export type AssetsChangelogQueryResponse = { + assetsChangelog: AssetsChangelogData +} diff --git a/src/modules/changelog/utils.ts b/src/modules/changelog/utils.ts new file mode 100644 index 000000000..dda248dea --- /dev/null +++ b/src/modules/changelog/utils.ts @@ -0,0 +1,29 @@ +export function mergeEntries( + prevEntries: T[], + nextEntries: T[], + keys: { created: keyof T; removed: keyof T }, +): T[] { + if (!prevEntries.length) return nextEntries + if (!nextEntries.length) return prevEntries + + const lastPrev = prevEntries[prevEntries.length - 1] + const firstNext = nextEntries[0] + + if (lastPrev.date === firstNext.date) { + const mergedGroup = { + ...lastPrev, + [keys.created]: [ + ...((lastPrev[keys.created] as unknown as any[]) || []), + ...((firstNext[keys.created] as unknown as any[]) || []), + ], + [keys.removed]: [ + ...((lastPrev[keys.removed] as unknown as any[]) || []), + ...((firstNext[keys.removed] as unknown as any[]) || []), + ], + } + + return [...prevEntries.slice(0, -1), mergedGroup, ...nextEntries.slice(1)] + } + + return [...prevEntries, ...nextEntries] +} diff --git a/src/modules/consent/cookies.ts b/src/modules/consent/cookies.ts new file mode 100644 index 000000000..b23e92cc2 --- /dev/null +++ b/src/modules/consent/cookies.ts @@ -0,0 +1,16 @@ +import { mount } from 'svelte' + +import CookiesPopup from 'san-webkit-next/ui/core/CookiesPopup' + +export function initCookiesPopup() { + if (typeof window === 'undefined') return + + const accepted = document.cookie.includes('COOKIE_POLICY_ACCEPTED=true') + + if (accepted) return + + mount(CookiesPopup, { + target: document.body, + props: { isVisible: true }, + }) +} diff --git a/src/modules/date/index.ts b/src/modules/date/index.ts new file mode 100644 index 000000000..36a527aa7 --- /dev/null +++ b/src/modules/date/index.ts @@ -0,0 +1,43 @@ +import { + ONE_DAY_IN_MS, + ONE_HOUR_IN_MS, + ONE_MINUTE_IN_MS, + ONE_MONTH_IN_MS, +} from 'san-webkit-next/utils/dates' + +enum TimeType { + Minute = 'minute', + Hour = 'hour', + Day = 'day', + Month = 'month', + Year = 'year', +} +const TimeTypeDivider = { + [TimeType.Minute]: ONE_MINUTE_IN_MS, + [TimeType.Hour]: ONE_HOUR_IN_MS, + [TimeType.Day]: ONE_DAY_IN_MS, + [TimeType.Month]: ONE_MONTH_IN_MS, +} +export function dateDifferenceInWords(from: Date, to = new Date()): string { + const diff = +to - +from + if (diff < ONE_MINUTE_IN_MS) return 'a few seconds ago' + + let amount = 0 + let timeType: TimeType + + if (diff < ONE_HOUR_IN_MS) timeType = TimeType.Minute + else if (diff < ONE_DAY_IN_MS) timeType = TimeType.Hour + else if (diff < ONE_MONTH_IN_MS) timeType = TimeType.Day + else timeType = TimeType.Month + + amount = Math.floor(diff / TimeTypeDivider[timeType]) + + if (timeType === TimeType.Month && amount > 11) { + timeType = TimeType.Year + amount = Math.floor(amount / 12) + } + + if (amount > 1) (timeType as string) += 's' + + return `${amount} ${timeType} ago` +} diff --git a/src/modules/docs/props.ts b/src/modules/docs/props.ts new file mode 100644 index 000000000..4fbced968 --- /dev/null +++ b/src/modules/docs/props.ts @@ -0,0 +1,46 @@ +import type { CollectionEntry } from 'astro:content' + +import { getBreadcrumbs } from '$modules/navigation/breadcrumbs' +import { getPublicSlug } from '$modules/navigation/paths' +import type { SidebarSection } from '$modules/navigation/sidebar' + +import { PRODUCTS } from '$config/products' + +interface Context { + sidebarData: SidebarSection[] + docsMap: Map> + slugRegistry: Map +} + +export function prepareDocProps(doc: CollectionEntry<'docs'>, ctx: Context) { + const { sidebarData, docsMap, slugRegistry } = ctx + + const publicSlug = getPublicSlug(doc.id) + + if (slugRegistry.has(publicSlug)) { + const existingFile = slugRegistry.get(publicSlug) + + throw new Error( + `\nURL COLLISION DETECTED:\n` + + `Slug: "/${publicSlug}"\n` + + `Conflict between:\n` + + `1. ${existingFile}\n` + + `2. ${doc.id}\n` + + `Action: Rename one of the files.`, + ) + } + slugRegistry.set(publicSlug, doc.id) + + const [_section, productId] = doc.id.split('/') + const relatedProduct = PRODUCTS[productId] + + return { + params: { slug: publicSlug }, + props: { + doc, + sidebarData, + relatedProduct, + breadcrumbs: getBreadcrumbs(doc.id, docsMap), + }, + } +} diff --git a/src/modules/navigation/breadcrumbs.ts b/src/modules/navigation/breadcrumbs.ts new file mode 100644 index 000000000..40934f22e --- /dev/null +++ b/src/modules/navigation/breadcrumbs.ts @@ -0,0 +1,36 @@ +import type { CollectionEntry } from 'astro:content' + +import { getPublicSlug } from '$modules/navigation/paths' + +export type TBreadcrumb = { + pathname: string + label: string +} + +type DocsMap = Map> + +export const getBreadcrumbs = ( + docId: string, + docsMap: DocsMap, +): TBreadcrumb[] => { + const segments = docId.split('/') + + const crumbs = [{ pathname: '/', label: 'Home' }] + + let currentPath = '' + + for (const segment of segments) { + currentPath = currentPath ? `${currentPath}/${segment}` : segment + + const doc = docsMap.get(currentPath) + + if (doc) { + crumbs.push({ + pathname: `/${getPublicSlug(doc.id)}/`, + label: doc.data.sidebar.label ?? doc.data.title, + }) + } + } + + return crumbs +} diff --git a/src/modules/navigation/paths.ts b/src/modules/navigation/paths.ts new file mode 100644 index 000000000..ee1a7e6c4 --- /dev/null +++ b/src/modules/navigation/paths.ts @@ -0,0 +1,13 @@ +import { ROOT_SECTIONS } from '$config/navigation' + +const SYSTEM_SECTIONS = new Set(Object.keys(ROOT_SECTIONS)) + +export function getPublicSlug(docId: string) { + const parts = docId.split('/') + + if (SYSTEM_SECTIONS.has(parts[0])) { + return parts.slice(1).join('/') + } + + return docId +} diff --git a/src/modules/navigation/sidebar.ts b/src/modules/navigation/sidebar.ts new file mode 100644 index 000000000..6b6403167 --- /dev/null +++ b/src/modules/navigation/sidebar.ts @@ -0,0 +1,91 @@ +import { type CollectionEntry } from 'astro:content' + +import { getPublicSlug } from '$modules/navigation/paths' + +import { ROOT_SECTIONS } from '$config/navigation' + +export type SidebarLink = { + type: 'link' + title: string + href: string + slug: string + order: number +} + +export type SidebarGroup = Omit & { + type: 'group' + items: SidebarItem[] +} + +export type SidebarItem = SidebarLink | SidebarGroup + +export type SidebarSection = { + title: string + items: SidebarItem[] +} + +type SidebarItemDraft = Omit & { + type: 'link' | 'group' +} + +function isGroup(item: SidebarItem): item is SidebarGroup { + return item.type === 'group' +} + +function sortSidebarItems(items: SidebarItem[]) { + items.sort((a, b) => a.order - b.order) + + items.forEach((item) => { + if (isGroup(item)) { + sortSidebarItems(item.items) + } + }) +} + +export function getSidebar( + allDocs: CollectionEntry<'docs'>[], +): SidebarSection[] { + const docs = allDocs.filter((d) => !d.data.sidebar.hidden) + + const sidebarMap: Record = Object.fromEntries( + Object.keys(ROOT_SECTIONS).map((key) => [ + key, + { title: ROOT_SECTIONS[key], items: [] }, + ]), + ) + + const itemMap = new Map() + + docs.forEach((doc) => { + itemMap.set(doc.id, { + type: 'link', + title: doc.data.sidebar.label || doc.data.title, + href: `/${getPublicSlug(doc.id)}/`, + order: doc.data.sidebar.order ?? 999, + slug: getPublicSlug(doc.id), + items: [], + }) + }) + + docs.forEach((doc) => { + const item = itemMap.get(doc.id)! + const parts = doc.id.split('/') + const [rootKey] = parts + + const parentId = parts.slice(0, -1).join('/') + const parentItem = itemMap.get(parentId) + + if (parentItem) { + parentItem.type = 'group' + parentItem.items.push(item) + } else if (sidebarMap[rootKey]) { + sidebarMap[rootKey].items.push(item) + } + }) + + const result = Object.values(sidebarMap) + + result.forEach((section) => sortSidebarItems(section.items)) + + return result +} diff --git a/src/modules/support/components/Intercom.astro b/src/modules/support/components/Intercom.astro new file mode 100644 index 000000000..80a6f872a --- /dev/null +++ b/src/modules/support/components/Intercom.astro @@ -0,0 +1,47 @@ +--- +interface Props { + appId: string +} + +const { appId } = Astro.props +--- + + diff --git a/src/pages/404.astro b/src/pages/404.astro new file mode 100644 index 000000000..bd8e62443 --- /dev/null +++ b/src/pages/404.astro @@ -0,0 +1,36 @@ +--- +import Footer from 'san-webkit-next/ui/app/Footer' +import Button from 'san-webkit-next/ui/core/Button' + +import { cn } from 'san-webkit-next/ui/utils' + +import Page from '$layouts/Page.astro' +import SEO from '$components/layout/SEO.astro' +--- + + + + +
    +

    + Looks like you got lost +

    +

    + The page you're looking for is missing or your link is incorrect. +

    + + +
    + +